网上有很多Openldap安装部署的文章,往往这些文章都浓墨重彩的描述服务端(Server)的安装和部署,以及排错等过程及说明,但是作为一个C/S架构的软件,可能很多技术牛人认为客户端(Client)的安装就不过如此而已了(虽然有的博客贴出了在桌面环境下设置,不过我觉得生产服务器大部分都是没有桌面环境的),所以大多都寥寥几笔带过,于是就导致配置一个服务端可能有各种教程,反正轻易的就能完成,即使出错也有章可循,而客户端则恰恰相反。然而,配置Openldap的初衷就是用来管理客户端和用户、用户组,既然服务器端已经OK了,那么后续肯定要将众多的Linux服务器加入这个ldap域中来,从而实现统一身份认证,所以别的不多说,以CentOS 6.5为例配置Openldap的客户端。
1、准备工作
#停止iptables,并查看iptables状态 /etc/init.d/iptablesstop iptables-L-n #禁用SELinux,并查看SELinux状态 setenforce0 getenforce #编辑/etc/hosts,添加openldapserver的记录 echo"192.168.49.138ldapsrv01.contoso.com">>/etc/hosts #添加成功后,最好ping一下,看是否能解析正常
2、安装openldap客户端软件包
yum-yinstallnss-pam-ldapdpam_ldapopenldap-clients
3、配置/etc/sysconfig/authconfig
/etc/sysconfig/authconfig 文件由authconfig-5.3.21-3.e15RPM包生成系统默认安装。配置该文件用来跟踪LDAP身份认证机制是否正确启用。
cp/etc/sysconfig/authconfig/etc/sysconfig/authconfig.bak$(date+%F) sed-i'/USESYSNETAUTH/s/no/yes/'/etc/sysconfig/authconfig sed-i'/USELDAPAUTH/s/no/yes/'/etc/sysconfig/authconfig sed-i'/USEMKHOMEDIR/s/no/yes/'/etc/sysconfig/authconfig sed-i'/PASSWDALGORITHM/s/md5/yes/'/etc/sysconfig/authconfig sed-i'/USELDAP/s/no/yes/'/etc/sysconfig/authconfig
[root@ldapclient ~]# diff /etc/sysconfig/authconfig.bak2016-09-11 /etc/sysconfig/authconfig
2c2
< USEMKHOMEDIR=no
---
> USEMKHOMEDIR=yes
12,13c12,13
< PASSWDALGORITHM=md5
< USELDAPAUTH=no
---
> PASSWDALGORITHM=yes
> USELDAPAUTH=yes
21c21
< USELDAP=no
---
> USELDAP=yes
24c24
< USESYSNETAUTH=no
---
> USESYSNETAUTH=yes
补充一点,也可以用authconfig-tui命令打开一个图形化的界面来配置,但是不推荐使用,因为字符或语言的关系,你可能看到的是乱码的界面,当然字符和语言都能调整,问题是耗费了事假;另外就是,如果你自己已经配置过/etc/openldap/ldap.conf,再通过authconfig-tui图形界面配置ldapserver信息后,可能会造成你的/etc/openldap/ldap.conf文件多出一些字符,就是因为图形界面的一些空格或者其他看不到的字符造成的更改。
4、配置/etc/nsswith.conf
/etc/nsswith.conf文件由glibc-2.5-24生成,CentOS5.2中缺省安装。该文件用于名称转换服务。通常LINUX系统身份验证读取本地文件,要使身份验证查询通过LDAP服务器必须在该文件中找到passwd;shadow;group;三行在files后空格添加“ldap”
cp/etc/nsswitch.conf/etc/nsswitch.conf.bak$(date+%F) sed-i'/^passwd:/s/files/filesldap/'/etc/nsswitch.conf sed-i'/^shadow:/s/files/filesldap/'/etc/nsswitch.conf sed-i'/^group:/s/files/filesldap/'/etc/nsswitch.conf
[root@ldapclient ~]# egrep "^passwd|^shadow|^group" /etc/nsswitch.conf
passwd: files ldap
shadow: files ldap
group: files ldap
5、配置/etc/pam.d/system-auth
身份验证服务是实际向LDAP验证用户身份的服务。可插入身份验证模块(PAM)提供了本地Linux身份验证服务。pam_unix.so模块是通用模块,使PAM机制对本地的/etc/passwd文件检查用户帐号。PAMLDAP模块可以用来将身份验证重定向到LDAP目录上。身份验证本身是由PAM程序执行的,它从身份验证候选机制中获取用户名,将其绑定到openLDAP 服务器上。如果绑定成功,PAM会报告说这个用户已经成功通过了pam_ldap.so提供的身份验证测试。根据PAM的配置不同,在用户看到命令提示符之前可能会执行其它测试。
/etc/pam.d/system-auth文件是CentOS的系统认证PAM文件。在该文件的auth,account,password,session四段中pam_unix.so模块后添加pam_ldap.so模块使身份验证先对本地的/etc/passwd文件检查用户帐号,然后再对LDAP服务器进行检查。同时因为是LDAP认证需要为用户创建根目录,所以还必须在会话(SESSION)阶段增加pam_mkhomedir.so模块,为用户登录自动创建宿主目录。
[root@ldapclient sysconfig]# cat /etc/pam.d/system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth sufficient pam_fprintd.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
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 500 quiet
account [default=bad success=ok user_unknown=ignore] pam_ldap.so
account required pam_permit.so
password requisite pam_cracklib.so try_first_pass retry=3 type=
password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok
password sufficient pam_ldap.so use_authtok
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 use_uid
session required pam_unix.so
session required pam_mkhomedir.so skel=/etc/skel/ umask=0077
session optional pam_ldap.so
#蓝色部分为添加的配置
6、配置/etc/openldap/ldap.conf
cp/etc/openldap/ldap.conf/etc/openldap/ldap.conf.bak$(date+%F) echo"BASEdc=contoso,dc=com">>/etc/openldap/ldap.conf echo"URIldap://ldapsrv01.contoso.com">>/etc/openldap/ldap
[root@ldapclient ~]# tail -2 /etc/openldap/ldap.conf
BASE dc=contoso,dc=com
URI ldap://ldapsrv01.contoso.com
7、使用ldapsearch命令测试能否读取openldap server中的数据
[root@ldapclient ~]# ldapsearch -x -b "dc=contoso,dc=com"
# extended LDIF
#
# LDAPv3
# base <dc=contoso,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# contoso.com
dn: dc=contoso,dc=com
objectClass: organization
objectClass: dcObject
dc: contoso
o: contoso
# People,contoso.com
dn: ou=People,dc=contoso,dc=com
objectClass: organizationalUnit
ou: People
# group,contoso.com
dn: ou=group,dc=com
objectClass: organizationalUnit
ou: group
# machines,contoso.com
dn: ou=machines,dc=com
objectClass: organizationalUnit
ou: machines
# sudoers,group,contoso.com
dn: cn=sudoers,ou=group,dc=com
objectClass: posixGroup
description: sudoers
gidNumber: 10000
cn: sudoers
# charles lv,People,contoso.com
dn: cn=charles lv,ou=People,dc=com
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
homeDirectory: /home/charleslv
loginShell: /bin/bash
uid: charleslv
cn: charles lv
uidNumber: 10000
gidNumber: 10000
userPassword:: e1NTSEF9YW8wUkhDdElFYTh0Yy9RU3Q0QitXdDY4ckJsU2VGQm8=
description: charles lv
sn: lv
givenName: charles
initials: charles lv
# eric li,contoso.com
dn: cn=eric li,dc=com
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
homeDirectory: /home/ericli
loginShell: /bin/bash
uid: ericli
cn: eric li
uidNumber: 10001
gidNumber: 10000
userPassword:: e1NTSEF9eE00RFB0VkhmM2FGQnRpRUJUSTdHSnZ3S0kxdUxsSkU=
description: eric li
sn: li
givenName: eric
initials: eric li
# developers,contoso.com
dn: ou=developers,dc=com
ou: developers
objectClass: organizationalUnit
objectClass: top
# app,developers,contoso.com
dn: ou=app,ou=developers,dc=com
ou: app
objectClass: organizationalUnit
objectClass: top
# web,contoso.com
dn: ou=web,dc=com
ou: web
objectClass: organizationalUnit
objectClass: top
# java,contoso.com
dn: ou=java,dc=com
ou: java
objectClass: organizationalUnit
objectClass: top
# bryanz,sudoers,contoso.com
dn: cn=bryanz,cn=sudoers,dc=com
givenName: bryan
sn: zhao
uid: bryanz
userPassword:: e01ENX00UXJjT1VtNldhdStWdUJYOGcrSVBnPT0=
uidNumber: 1000
gidNumber: 10000
homeDirectory: /home/bryanz
loginShell: /bin/sh
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
cn: bryanz
# zhangs,contoso.com
dn: uid=zhangs,dc=com
objectClass: posixAccount
objectClass: top
objectClass: inetOrgPerson
gidNumber: 10000
givenName: zhang
sn: san
displayName: zhang san
uid: zhangs
homeDirectory: /home/zhangs
loginShell: /bin/bash
cn: zhang san
uidNumber: 47180
userPassword:: e1NTSEF9Nmk2cm1wbXpyK3JzVEwyZk0wanR6d2tKOFNWMk9FdEs=
# search result
search: 2
result: 0 Success
# numResponses: 14
# numEntries: 13
这里成功读取了ldap中的数据,网上给出的大部分教程,到此之后就直接service nscd restart,然后就可以使用getent测试获取ldap中的用户信息,我分别在CentOS 5.5和CentOS 6.5上做了测试,都无法获取,而且也无法使用id user这个命令查询ldap上用户的信息,所以该方法不可取,至少在CentOS 6上是不行的。
补充:如果出现“ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)”,那么解决该问题的方法是:
1)检查/etc/hosts文件,是否有ldapserver的记录,最好能ping一下,看能否解析成功
2)到openldap server上检查slapd服务是否正在运行,如果没有,启动slapd服务
3)检查/etc/openldap/ldap.conf文件,查看里面的BASE和URI是否正确,很有可能是在图形界面中的设置,导致配置文件多了一些字符,从而出错
8、使用authconfig命令启动nslcd
authconfig--enableldap--enableldapauth--ldapserver=ldapsrv01.contoso.com--ldapbasedn="dc=contoso,dc=com"--enablemkhomedir--update #该命令要包含ldapserver和basedn的信息
[root@ldapclient ~]# getent passwd|grep charleslv
charleslv:{SSHA}ao0RHCtIEa8tc/QSt4B+Wt68rBlSeFBo:10000:10000:charles lv:/home/charleslv:/bin/bash
[root@ldapclient ~]# id charleslv
uid=10000(charleslv) gid=10000(sudoers) groups=10000(sudoers)
[root@ldapclient ~]# id zhangs
uid=47180(zhangs) gid=10000(sudoers) groups=10000(sudoers)
[root@ldapclient ~]# id bryanz
uid=1000(bryanz) gid=10000(sudoers) groups=10000(sudoers)
[root@ldapclient ~]# id ericli
uid=10001(ericli) gid=10000(sudoers) groups=10000(sudoers)
[root@ldapclient ~]# su - zhangs
Creating directory '/home/zhangs'.
[zhangs@ldapclient ~]$ ll
total 0
[zhangs@ldapclient ~]$ pwd
/home/zhangs
到此,CentOS 6.5配置openldap客户端成功。
原文链接:https://www.f2er.com/centos/380753.html