首页 > 系统服务 > 详细

linux 利用LDAP身份集中认证

时间:2019-10-05 16:44:04      阅读:76      评论:0      收藏:0      [点我收藏+]

碰巧所在的公司用到了ldap 集中身份认证,所有打算研究下这套架构,但是看遍了网络上的很多教程,要么不完整,要么就是照着根本弄不出来,十月一研究了三天,结合八方资源终于弄出来了,真是不容易,哎,特此记录一把:

一。实现效果:

1.实现linux openldap 账号集中管理

2.可以控制账号是否可以sudo 到root

3.可以实现密码和pubkey 登陆

4.可以控制用户可以登陆到哪些主机

 

二。系统环境:

Red Hat Enterprise Linux Server release 6.7 (Santiago)

三。项目拓扑:

采用两节点演示:

ldap server端: 192.168.85.137  (既充当server端,也做client端)

ldap  client端: 192.168.85.139

四.软件版本:

openldap-servers-2.4.40-16.el6.x86_64

 #安装前准备:

1.关闭防火墙及selinux

2.配置hosts解析:

192.168.85.137 node1
192.168.85.139 node2

3.配置ntp时间同步:

ntpdate time.windows.com

 

# 安装openldap server:

yum install -y openldap-servers-2.4.40-16.el6.x86_64 openldap-clients-2.4.40-16.el6.x86_64 openldap-2.4.40-16.el6.x86_64 openldap-devel-2.4.40-16.el6.x86_64 compat-openldap.x86_64

# 初始化openldap配置:

cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
chown -R ldap.ldap /etc/openldap
chown -R ldap.ldap /var/lib/ldap
suffix "dc=hello,dc=com"

#编辑 /etc/openldap/slapd.conf  (修改以下配置,其他可以保持默认,或者根据自己需求修改,我这里只是修改了下面三项)

suffix		"dc=hello,dc=com"            #配置域名后缀,类似最上次的父域名称
rootdn		"cn=admin,dc=hello,dc=com"   #新建管理员admin
rootpw		{SSHA}LoVG+OZ61YG95bbZbVDZnkotGRSchz+Q    #管理员的password,可以使用明文或密文,密文用 slappasswd 生成

#生成配置文件:

rm /etc/openldap/slapd.d/* -fr   #删除老的配置数据库
slaptest -f /etc/openldap/slapd.conf   #检测配置文件是否有语法错误
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d #通过slapd.conf生成新的数据库

  

# 启动ldap server:

/etc/init.d/slapd start

# openldap 默认使用389,端口,查看服务是否启动成功:

技术分享图片

 

 ############################################# 客户端配置

# 客户端部署,安装openldap client 软件:

yum install -y openldap-clients.x86_64 nss-pam-ldap

  

# 修改/etc/nslcd.conf ,添加下面内容:

uri ldap://192.168.85.137/
base dc=hello,dc=com
ssl no

  

# 修改/etc/pam_ldap.conf,增加下面内容:

base dc=hello,dc=com
uri ldap://192.168.85.137/

  

# 修改/ /etc/pam.d/system-auth

auth    required    pam_env.so
auth    sufficient   pam_unix.so nullok try_first_pass
auth    requisite    pam_succeed_if.so uid>=500 quiet
auth    sufficient   pam_ldap.so   #增加ldap模块
auth     required    pam_deny.so
 
account   required   pam_unix.so
account   sufficient   pam_succeed_if.so uid<500 quiet
account   required    pam_ldap.so  #增加ldap模块
account   required    pam_permit.so
 
password   requisite   pam_cracklib.so  try_first_pass retry=3
password   sufficient   pam_unix.so md5 shadow nullok try_first_pass use_authtok
password   sufficient   pam_ldap.so  use_authtok md5    #增加ldap模块
password    required   pam_deny.so
 
session     optional    pam_keyinit.so  revoke
session     required    pam_limits.so
session     [success=1  default=ignore]pam_succeed_if.so service in crond quiet
session     required    pam_unix.so
session  required   pam_mkhomedir.so skel=/etc/skel/ umask=0022
session   optional  pam_ldap.so           #增加ldap模块

 

# 修改/etc/pam.d/sshd  (ssh登陆的话需要用到这个文件,如果只修改/etc/pam.d/system-auth的话控制台登陆没问题,但是如果远程ssh 连接就会出现问题)

auth    required    pam_env.so
auth    sufficient   pam_unix.so nullok try_first_pass
auth    requisite    pam_succeed_if.so uid>=500 quiet
auth    sufficient   pam_ldap.so use_first_pass   #加载ldap
auth     required    pam_deny.so
account   required   pam_unix.so
account   sufficient   pam_succeed_if.so uid<500 quiet
account     [default=bad success=ok user_unknown=ignore] pam_ldap.so    #加载ldap
account   required    pam_permit.so
password   requisite   pam_cracklib.so  try_first_pass retry=3
password   sufficient   pam_unix.so md5 shadow nullok try_first_pass use_authtok
password   sufficient   pam_ldap.so  use_authtok    #加载ldap
password    required   pam_deny.so
session     optional    pam_keyinit.so  revoke
session     required    pam_limits.so
session     [success=1  default=ignore]pam_succeed_if.so service in crond quiet
session     required    pam_unix.so
session  required   pam_mkhomedir.so skel=/etc/skel/ umask=0022     #自动创建用户家目录
session   optional  pam_ldap.so                                     #加载ldap模块

  

 

# 修改/etc/nsswitch.conf,指定查找顺序:

passwd:     files ldap
shadow:     files ldap
group:      files ldap

# 修改 /etc/sysconfig/authconfig

USESHADOW=yes
USELDAPAUTH=yes
USELOCAUTHORIZE=yes
USELDAP=yes

# 新建ou,用来存放用户:

dn: ou=People,dc=hello,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit

# 新建ou,用来存放组:

dn: ou=Group,dc=hello,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit

# 新建用户 user200

dn: uid=user200,ou=People,dc=hello,dc=com
uid: user200
cn: user200
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {CRYPT}-s2a6QekMTXp6   #这里填的是密文密码,用slappasswd -c -s  命令生成
shadowLastChange: 18171
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 504
gidNumber: 504
homeDirectory: /home/user200

 

NOTE:虽然可以填明文密码,也可以填密文密码,但是如果想要结果linux 登陆,就必须填slappasswd -c -s 生成的密码,这个命令生成crypt(3) 加密的格式,linux 可以识别,网上虽然说可以用明文,但是我反正没有尝试成功。

技术分享图片

 

# 启动ldap 客户端

/etc/init.d/nslcd start

 

配置完成,可以进行ssh 远程连接了

 

 技术分享图片

 

 

############################## 配置用户sudo

##### 服务器配置

 1.可以通过本地sudo文件,也可以通过ldap server 端配置sudo,这里利用ldap server端来配置

# 拷贝sudo schema 

 cp /usr/share/doc/sudo-1.8.6p3/schema.OpenLDAP /etc/openldap/schema/sudo.schema

# 编辑/etc/slapd.conf ,增加下面配置:

include /etc/openldap/schema/sudo.schema

# 生成新的数据库配置:

rm -rf /etc/openldap/slapd.d/*
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
chown -R ldap.ldap /etc/openldap/slapd.d/   #赋权,不然启动sladp 会报错
/etc/init.d/sladp restart    #重启服务让配置生效

 

# 最好装好phpldapadmin,这个web界面可以让我们图形化操作ldap,具体安装过程可以google,这里省略,还有需要注意的一点是如果用yum 安装的 phpldapadmin可能始终会提示密码错误,具体原因没有去研究,到网上下载源码自己安装下就好了,不必去纠结

 

# 新建 sudoers Ou:

dn: ou=sudoers,dc=hello,dc=com
ou: sudoers
objectClass: top
objectClass: organizationalUnit

# 新建组admin:

dn: cn=admin,ou=group,dc=hello,dc=com
cn: admin
gidNumber: 505
objectClass: posixGroup
objectClass: top

  

# 新建sudo 规则:

dn: cn=%admin,ou=sudoers,dc=hello,dc=com
objectClass: sudoRole
cn: %admin
sudoUser: %admin
sudoHost: ALL
sudoRunAsUser: root
sudoOption: !authenticate
sudoCommand: /bin/bash
EOF

# 将用户加入admin组,这个这个用户就有了sudo 到root 的权限

cat >> modify_gid.ldif << EOF

dn: uid=user200,ou=People,dc=hello,dc=com
changetype: modify
replace: gidNumber
gidNumber: 505

EOF


ldapmodify -x -W -D "cn=admin,dc=hello,dc=com" -f modify_gid.ldif

 

### 客户端配置:

cat >> /etc/nsswitch.conf << EOF
sudoers:    ldap    files
EOF

 

 

 

########################################## 配置ssh 秘钥登陆

# 拷贝 schema

cp /usr/share/doc/openssh-ldap-5.3p1/openssh-lpk-openldap.schema /etc/openldap/schema/

#  /etc/openldap/sladp.conf 增加ssh schema

include /etc/openldap/schema/openssh-lpk-openldap.schema

# 重新生成新的配置文件:

rm -rf /etc/openldap/slapd.d/*
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
chown -R ldap.ldap /etc/openldap/slapd.d/ #赋权,不然启动sladp 会报错
/etc/init.d/sladp restart #重启服务让配置生效

# 配置sshldap 配置文件  (我的环境没有配置设个配置文件也没有出问题,还不知道什么时候会用这个配置,但是还是配上吧,保险起见)

cp /usr/share/doc/openssh-ldap-5.3p1/ldap.conf /etc/ssh/

# 增加下面配置文件到/etc/ssh/ldap.conf

uri ldap://192.168.85.137/
base dc=hello,dc=com
ssl no

 

# 配置 /etc/ssh/sshd_config

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysCommand /usr/bin/get_pubkey   #这个命令可以自己实现,只要最终能获取pubkey就行了,切结配置末尾不要有空格,否则会报错。
AuthorizedKeysCommandRunAs nobody

 

# get_pubkey 内容(其实就是连接ldap 服务器然后把key 取回来):

#!/bin/sh -e
ldapsearch -x -D cn=admin,dc=hello,dc=com -w 123qaz\! -b ou=People,dc=hello,dc=com -H ldap://192.168.85.137 ‘(&(objectClass=posixAccount)(uid=‘"$1"‘))‘ \
sshPublicKey | sed -n /^ /{H;d};/sshPublicKey:/x;$g;s/\n *//g;s/sshPublicKey: //gp

 

# user200增加新的属性以支持pubkey:

cat >> add_objectclass.ldif << EOF
dn: uid=user200,ou=People,dc=hello,dc=com changetype: modify add: objectclass objectClass: ldapPublicKey - add: sshPublicKey sshPublicKey: ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAxKFoN4eC4bkKYDjK7YoivzGz2tpHbL2Gu4fyEIHrVDuxFwBHt2sKNG/Y56xDIwaMczeLgJkymjzfq7bZTJxZHAKN4x3qvzBA0UYSjnbr3YM9yMKqCllEWMjhVCchDI7vclO/VhsZRB/rSsGivIQjPEzwnn7qcnPhkqte6pa5i5C71NlcFf2Bz3HIE6zpcRFKEYrQgEcJa2fNFDUuY9PN5O1KRahSIPmg2mvWrr7DgTzI+TjCtlxrZuWXJPmJUuV2CWl9J4xcq5KV8Pf8LwlTvIuLx1hnYhojelM7LE4jh2mXweWl4My8xoeOw5hhJ9ekGTQgi1EeooVexguDHo/pnQ== root@node
EOF

 

# 向ldap server提交user200属性的的修改

 ldapadd -x -w 123qaz\! -D "cn=admin,dc=hello,dc=com" -f add_objectclass.ldif

 

###########################################

linux 利用LDAP身份集中认证

原文:https://www.cnblogs.com/dufeixiang/p/11624210.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!