目的:使用OpenLDAP目录服务管理用户账户信息,实现快速查询、更改、删除用户信息。

意义:在一台ldap服务器上进行账号的集中管理,在ldap客户端上使用这些账号,而无需再管理账户。

OpenLDAP目录服务

1、目录数据库:主要用于存储较小的信息【多查少改的信息】,同时具有很好的读性能,但在写性能方面比较差,所以不适合存放那些需要经常修改的数据。
2、目录服务是由目录数据库一套能够访问和处理数据库信息的协议组成的服务协议,用于集中的管理主机帐号密码,员工名字等数据,大大的提升了管理工作效率。
3、轻量级目录访问协议LDAP(Lightweight Directory Access Protocol)是在目录访问协议X.500的基础上研发的。
4、LDAP采用树状结构存储数据,条目是LDAP协议中最基本的元素。
5、树状结构目录,从上到下,层层递进,直到找到相应的条目【类似数据库中的记录】
6、dc根节点、ou子树、cn叶子节点、dn条目路径【自下往上,条目的唯一标识符】
7、OpenLdap是基于LDAP协议的开源程序,它的程序名称叫做slapd
yum install -y openldap openldap-clients openldap-servers migrationtools

部署OpenLDAP服务端

①配置LDAP服务端IP:192.168.10.10

LDAP任意用户名空密码 ldap用户管理_linux


②安装openldap服务相关的软件包,生成密钥文件,将主机与IP地址的解析记录写入/etc/hosts文件中。

yum install -y openldap openldap-servers openldap-clients migrationtools

LDAP任意用户名空密码 ldap用户管理_LDAP任意用户名空密码_02


LDAP任意用户名空密码 ldap用户管理_运维_03


slappasswd -s abong -n > /etc/openldap/passwd

密钥:{SSHA}Dxx/kRKeCx98w6Srxz9IIi10bxSTLdt/

LDAP任意用户名空密码 ldap用户管理_linux_04


echo "192.168.10.10 linuxfwd" >> /etc/hosts

LDAP任意用户名空密码 ldap用户管理_运维_05


③在LDAP目录服务中采用TLS加密机制传输数据,使用openssl工具生成x509格式的证书文件,有效期为365天。 【-out cert.pem -keyout priv.pem

openssl req -new -x509 -nodes -out /etc/openldap/certs/cert.pem -keyout /etc/openldap/certs/priv.pem -days 365

LDAP任意用户名空密码 ldap用户管理_openssl_06


④证书存放在目录/etc/openldap/certs/下,将所有者和所属组改为ldap,并将priv.pem的权限设置为600

LDAP任意用户名空密码 ldap用户管理_openssl_07


⑤复制一份LDAP数据库模板存放到/var/lib/ldap/目录下,改名为DB_CONFIG,LDAP数据库模板路径为/usr/share/openldap-servers/DB_CONFIG.example。然后使用命令slaptest/var/lib/ldap目录下生成数据库文件,最后修改LDAP数据库的属主和属组。

LDAP任意用户名空密码 ldap用户管理_LDAP任意用户名空密码_08


⑥重启slapd服务,并添加到开机自启中,可以看到slapd服务已经正常开启。

LDAP任意用户名空密码 ldap用户管理_openssl_09


⑦LDAP服务中使用LDIF(LDAP Interchange Format)格式来保存条目。LDIF是一种标准的文本文件,可随意的导出导入。LDIF格式的数据条目是在schema数据模型的基础上创建出来的。类似对象与类之间的关系。【条目数据保存在.ldif文件中】【模板文件保存在.schema文件中】

#该目录下存放着类及其对象
[root@linuxfwd ~]# cd /etc/openldap/schema/
[root@linuxfwd schema]# ls
collective.ldif    cosine.schema         java.ldif      openldap.schema
collective.schema  duaconf.ldif          java.schema    pmi.ldif
corba.ldif         duaconf.schema        misc.ldif      pmi.schema
corba.schema       dyngroup.ldif         misc.schema    ppolicy.ldif
core.ldif          dyngroup.schema       nis.ldif       ppolicy.schema
core.schema        inetorgperson.ldif    nis.schema
cosine.ldif        inetorgperson.schema  openldap.ldif
[root@linuxfwd schema]#

添加cosinenis模块到slapd服务程序中

ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f cosine.ldifldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f nis.ldif

LDAP任意用户名空密码 ldap用户管理_LDAP任意用户名空密码_10


创建/etc/openldap/changes.ldif文件,并复制以下内容进去

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=abong,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=abong,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW:{SSHA}Dxx/kRKeCx98w6Srxz9IIi10bxSTLdt/

dn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/cert.pem

dn: cn=config
changetype: modify
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/priv.pem

dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: -1

dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=Manager,dc=abong,dc=com" read by * none

将新的配置文件/etc/openldap/changes.ldif更新到slapd服务程序中

ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/changes.ldif

LDAP任意用户名空密码 ldap用户管理_openssl_11


创建/etc/openldap/base.ldif文件,并复制以下内容进去

dn: dc=abong,dc=com
dc: abong
objectClass: top
objectClass: domain

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

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

将新的配置文件/etc/openldap/base.ldif添加到slapd服务程序中

ldapadd -x -w abong -D cn=Manager,dc=abong,dc=com -f /etc/openldap/base.ldif

LDAP任意用户名空密码 ldap用户管理_服务器_12


⑧创建用户ldapuser,用于测试。设置账户的迁移。将当前系统的用户和用户组迁移到目录服务中【用户迁移到passwd文件中、使用passwd文件生成ldif文件、将ldif文件添加到slapd服务程序中】【用户组迁移到group文件中、使用group文件生成ldif文件、将ldif文件添加到slapd服务程序中】

useradd -d /home/ldap ldapuser

修改文件/usr/share/migrationtools/migrate_common.ph,如下:

LDAP任意用户名空密码 ldap用户管理_LDAP任意用户名空密码_13


迁移用户,并生成user.ldif文件,将user.ldif文件添加到slapd服务程序中

LDAP任意用户名空密码 ldap用户管理_LDAP任意用户名空密码_14


LDAP任意用户名空密码 ldap用户管理_openssl_15


迁移用户组,并生成group.ldif文件,将group.ldif文件添加到slapd服务程序中

LDAP任意用户名空密码 ldap用户管理_openssl_16


⑨测试用户ldapuser的配置文件是否正常,可以看到,用户ldapuser的条目数据是存在的。

[root@linuxfwd ~]# ldapsearch -x cn=ldapuser -b dc=abong,dc=com
# extended LDIF
#
# LDAPv3
# base <dc=abong,dc=com> with scope subtree
# filter: cn=ldapuser
# requesting: ALL
#

# ldapuser, People, abong.com
dn: uid=ldapuser,ou=People,dc=abong,dc=com
uid: ldapuser
cn: ldapuser
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSEh
shadowLastChange: 18358
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/ldap

# ldapuser, Group, abong.com
dn: cn=ldapuser,ou=Group,dc=abong,dc=com
objectClass: posixGroup
objectClass: top
cn: ldapuser
userPassword:: e2NyeXB0fXg=
gidNumber: 1001

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 2
[root@linuxfwd ~]#

⑩安装httpd服务程序,将密钥文件/etc/openldap/certs/cert.pem复制到/var/www/html。然后重启httpd服务,并添加到开机自启中。然后清空防火墙并保存当前防火墙。最后,修改rsyslog服务的配置文件,追加echo "local4.* /var/log/ldap.log" >> /etc/rsyslog.conf,重启rsyslog服务。

LDAP任意用户名空密码 ldap用户管理_openssl_17

部署OpenLDAP客户端

①将服务器的IP地址和主机名的解析记录写入到客户端的/etc/hosts文件中

LDAP任意用户名空密码 ldap用户管理_openssl_18


②安装客户端的相关软件包

yum install -y openldap-clients nss-pam-ldapd authconfig-gtk pam_krb5

LDAP任意用户名空密码 ldap用户管理_linux_19


③运行系统认证工具,并填写LDAP服务信息

system-config-authentication

服务器主机名:

linuxfwd证书URL(u):

http://192.168.10.10/cert.pemhttp://linuxfwd/cert.pem

LDAP任意用户名空密码 ldap用户管理_openssl_20


我这里是已经挂载了家目录,如果没挂载的可使用NFS进行挂载。

自动挂载用户的家目录

在客户端进行LDAP验证后,从客户端登录用户ldapuser时,是无法同步用户家目录的,即在客户端并不存在用户ldapuser的家目录。可以使用NFS(网络文件系统)将家目录自动挂载在客户端上。【即将服务器上的家目录作为一个共享资源,挂载在客户端】

①在ldap服务器上安装nfs-utils服务程序

yum install -y nfs-utils②修改NFS的主配置文件/etc/exports

echo "/home/ldap 192.168.10.*(rw,sync,root_squash)" >> /etc/exports

③重启rpcbindnfs-server服务程序,并添加到开机自启中

LDAP任意用户名空密码 ldap用户管理_运维_21


④清空防火墙,并保存当前防火墙策略

LDAP任意用户名空密码 ldap用户管理_linux_22


⑤在客户端查看共享信息

showmount -e 192.168.10.10

LDAP任意用户名空密码 ldap用户管理_运维_23


⑥将家目录/home/ldap作为一个nfs文件系统挂载到客户端

LDAP任意用户名空密码 ldap用户管理_服务器_24


⑦将挂载信息写入文件/etc/fstab,以实现永久挂载。

echo "192.168.10.10:/home/ldap /home/ldap nfs defaults 0 0" >> /etc/fstab

通过以上配置,我们可以在LDAP服务器上集中管理账户信息,无需在客户端上管理账户,提高了客户端的使用效能。