目的:使用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
②安装openldap
服务相关的软件包,生成密钥文件,将主机与IP地址的解析记录写入/etc/hosts
文件中。
yum install -y openldap openldap-servers openldap-clients migrationtools
slappasswd -s abong -n > /etc/openldap/passwd
密钥:{SSHA}Dxx/kRKeCx98w6Srxz9IIi10bxSTLdt/
echo "192.168.10.10 linuxfwd" >> /etc/hosts
③在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
④证书存放在目录/etc/openldap/certs/
下,将所有者和所属组改为ldap
,并将priv.pem
的权限设置为600
⑤复制一份LDAP数据库模板
存放到/var/lib/ldap/
目录下,改名为DB_CONFIG
,LDAP数据库模板路径为/usr/share/openldap-servers/DB_CONFIG.example
。然后使用命令slaptest
在/var/lib/ldap目录
下生成数据库文件,最后修改LDAP数据库的属主和属组。
⑥重启slapd服务
,并添加到开机自启中,可以看到slapd服务
已经正常开启。
⑦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]#
添加cosine
和nis
模块到slapd服务程序中
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f nis.ldif
创建/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
创建/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
⑧创建用户ldapuser
,用于测试。设置账户的迁移。将当前系统的用户和用户组迁移到目录服务中【用户迁移到passwd文件中
、使用passwd文件生成ldif文件、将ldif文件添加到slapd服务程序中】【用户组迁移到group文件中
、使用group文件生成ldif文件、将ldif文件添加到slapd服务程序中】
useradd -d /home/ldap ldapuser
修改文件/usr/share/migrationtools/migrate_common.ph
,如下:
迁移用户,并生成user.ldif
文件,将user.ldif
文件添加到slapd服务程序中
迁移用户组,并生成group.ldif
文件,将group.ldif
文件添加到slapd服务程序中
⑨测试用户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
服务。
部署OpenLDAP客户端
①将服务器的IP地址和主机名的解析记录写入到客户端的/etc/hosts
文件中
②安装客户端的相关软件包
yum install -y openldap-clients nss-pam-ldapd authconfig-gtk pam_krb5
③运行系统认证工具,并填写LDAP服务信息
system-config-authentication
服务器主机名:
linuxfwd
证书URL(u):
http://192.168.10.10/cert.pem
http://linuxfwd/cert.pem
我这里是已经挂载了家目录,如果没挂载的可使用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
③重启rpcbind
和nfs-server
服务程序,并添加到开机自启中
④清空防火墙,并保存当前防火墙策略
⑤在客户端查看共享信息
showmount -e 192.168.10.10
⑥将家目录/home/ldap
作为一个nfs文件系统挂载到客户端
⑦将挂载信息写入文件/etc/fstab
,以实现永久挂载。
echo "192.168.10.10:/home/ldap /home/ldap nfs defaults 0 0" >> /etc/fstab
通过以上配置,我们可以在LDAP服务器上集中管理账户信息,无需在客户端上管理账户,提高了客户端的使用效能。