翻译自How to Configure OpenLDAP server in Red Hat Enterprise Linux 7 using cn=config method ?
环境
问题
- 使用slapd工具在CentOS上安装与配置OpenLDAP Server
- 使用olc方式如何配置OpenLDAP Server
操作
- 安装openldap包
1
| yum install -y openldap openldap-clients openldap-servers
|
LDAP默认的配置目录是/etc/openldap/slapd.d
1 2 3 4 5 6 7 8 9 10 11 12
| [root@rhel7 ~]# cd /etc/openldap/slapd.d/ [root@rhel7 slapd.d]# ls -l drwxr-x---. 4 ldap ldap 4096 Aug 3 22:49 cn=config -rw-------. 1 ldap ldap 589 Aug 2 23:39 cn=config.ldif [root@rhel7 slapd.d]# cd cn\=config [root@rhel7 cn=config]# ls -l drwxr-x---. 2 ldap ldap 4096 Aug 3 22:11 cn=schema -rw-------. 1 ldap ldap 378 Aug 2 22:21 cn=schema.ldif -rw-------. 1 ldap ldap 552 Aug 3 20:42 olcDatabase={0}config.ldif -rw-------. 1 ldap ldap 443 Aug 2 22:21 olcDatabase={-1}frontend.ldif -rw-------. 1 ldap ldap 562 Aug 2 22:21 olcDatabase={1}monitor.ldif drwxr-x---. 2 ldap ldap 65 Aug 3 22:53 olcDatabase={2}hdb.ldif
|
- 设置olcSuffix,设置domain。只需要更新下文件olcDatabase={2}hdb.ldif中的olcSuffix
1 2
| [root@rhel7 cn=config]# vi /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif olcSuffix: dc=example,dc=com
|
- 推荐先创建一个专用的具有所有权限的账号,用它来更新LDAP的数据库。需要更新文件olcDatabase={2}hdb.ldif中的olcRootDN和olcRootPW
1 2 3
| [root@rhel7 cn=config]# vi /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif olcRootDN: cn=Manager,dc=example,dc=com olcRootPW: redhat
|
- 同时设置config数据库的管理员账号
这里设置的密码很简单,请在生产环境下将密码设置复杂些
1 2 3
| [root@rhel7 cn=config]# vi olcDatabase\=\{0\}config.ldif olcRootDN: cn=config olcRootPW: secret
|
- 使用slaptest命令去验证配置
1 2
| [root@rhel7 cn=config]# slaptest -u config file testing succeeded
|
如果报ldif_read_file: checksum error这样的错误,是因为计算文件的CRC32码来自动校验(文件中前两行中带有校验码),需要更新校验码
- 删除掉报错的文件的前两行
1 2
| # AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. # CRC32 3e515b74
|
- 安装crc32工具(perl-Archive-Zip)
1
| [root@rhel7 cn=config]# yum install perl-Archive-Zip -y
|
- 计算新文件的CRC32码
1 2
| [root@rhel7 cn=config]# crc32 <(cat olcDatabase\=\{2\}hdb.ldif) 509f92c7
|
- 将计算的CRC32码更新到文件中,添加到文件的前两行
1 2
| # AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. # CRC32 509f92c7
|
- 如果配置验证成功,启动openldap server
- 创建ldap server的基础结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| $ cat base.ldif dn: dc=example,dc=com objectClass: dcObject objectClass: organization o: example.com
dn: ou=users,dc=example,dc=com objectClass: organizationalUnit objectClass: top ou: users
dn: ou=groups,dc=example,dc=com objectClass: organizationalUnit objectClass: top ou: groups
|
- 使用ldapadd命令向LDAP目录导入基础结构
1 2 3 4
| $ ldapadd -x -D "cn=Manager,dc=example,dc=com" -w redhat -f base.ldif adding new entry "dc=example,dc=com" adding new entry "ou=users,dc=example,dc=com" adding new entry "ou=groups,dc=example,dc=com"
|
- 使用ldapsearch命令验证基础结构是否成功导入
1
| $ ldapsearch -x -D 'cn=Manager,dc=example,dc=com' -b dc=example,dc=com -w redhat
|
- 在向ldap结构中添加users和groups之前,先使用ldapadd导入schema,以免出现“object class not defined”的报错
1 2 3
| $ ldapadd -Y EXTERNAL -H ldapi:// -f /etc/openldap/schema/cosine.ldif $ ldapadd -Y EXTERNAL -H ldapi:// -f /etc/openldap/schema/nis.ldif $ ldapadd -Y EXTERNAL -H ldapi:// -f /etc/openldap/schema/inetorgperson.ldif
|
- 向ldap结构中添加users和groups
- Users
- 使用slappasswd命令获取需要的密码
1 2
| # slappasswd -s test {SSHA}5rMM/3f8Ki13IyarGTtwzieoTu7KMgwc
|
- 使用ldif文件和上面的hashed密码创建users.ldif
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| $ cat users.ldif dn: uid=testuser,ou=users,dc=example,dc=com uid: testuser cn: testuser objectClass: shadowAccount objectClass: top objectClass: person objectClass: inetOrgPerson objectClass: posixAccount userPassword: {SSHA}5rMM/3f8Ki13IyarGTtwzieoTu7KMgwc shadowLastChange: 17016 shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 1000 gidNumber: 1000 homeDirectory: /home/testuser sn: testuser mail: testuser@example.com
dn: uid=testuser1,ou=users,dc=example,dc=com uid: testuser1 cn: testuser1 objectClass: shadowAccount objectClass: top objectClass: person objectClass: inetOrgPerson objectClass: posixAccount userPassword: {SSHA}5rMM/3f8Ki13IyarGTtwzieoTu7KMgwc shadowLastChange: 17016 shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 1001 gidNumber: 1001 homeDirectory: /home/testuser1 sn: testuser1 mail: testuser1@example.com
|
- Groups
创建groups.ldif1 2 3 4 5 6 7 8 9 10 11 12 13 14
| $ cat groups.ldif dn: cn=testuser,ou=groups,dc=example,dc=com objectClass: posixGroup objectClass: top cn: testuser userPassword: {crypt}x gidNumber: 1000
dn: cn=testuser1,ou=groups,dc=example,dc=com objectClass: posixGroup objectClass: top cn: testuser1 userPassword: {crypt}x gidNumber: 1001
|
- 使用ldapadd命令添加users和groups
1 2
| $ ldapadd -x -D cn=Manager,dc=example,dc=com -f users.ldif -w redhat $ ldapadd -x -D cn=Manager,dc=example,dc=com -f groups.ldif -w redhat
|
- 使用ldapsearch命令来验证users和groups创建是否成功
1
| $ ldapsearch -x -D cn=Manager,dc=example,dc=com -b dc=example,dc=com -w redhat
|
OpenLDAP的操作
- 添加数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| $ cat user3.ldif dn: uid=testuser3,ou=users,dc=example,dc=com uid: testuser3 cn: testuser3 objectClass: shadowAccount objectClass: top objectClass: person objectClass: inetOrgPerson objectClass: posixAccount userPassword: {SSHA}5rMM/3f8Ki13IyarGTtwzieoTu7KMgwc shadowLastChange: 17016 shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 1000 gidNumber: 1000 homeDirectory: /home/testuser sn: testuser3 mail: testuser@example.com $ ldapadd -x -D 'cn=Manager,dc=example,dc=com' -w redhat -f user3.ldif
|
- 查询数据
1 2
| $ ldapsearch -x -b 'dc=example,dc=com' $ ldapsearch -x -b 'dc=example,dc=com' 'sn=testuser3'
|
- 修改数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| # 方法一:交互式 $ ldapmodify -x -D 'cn=Manager,dc=example,dc=com' -w redhat dn: uid=testuser3,ou=users,dc=example,dc=com changetype: modify replace: sn sn: Test User 3 - add: description description: add attribute
# 方法二:配置文件式 $ cat modify.ldif dn: uid=testuser3,ou=users,dc=example,dc=com changetype: modify replace: sn sn: Test User 3 - delete: description $ ldapmodify -x -D 'cn=Manager,dc=example,dc=com' -w redhat -f modify.ldif
|
- 删除数据
1
| $ ldapdelete -x -D 'cn=Manager,dc=example,dc=com' -w redhat uid=testuser3,ou=users,dc=example,dc=com
|
- 数据导出
1 2 3 4
| # 方法一:用查询导出 $ ldapsearch -x -b 'dc=example,dc=com' > export.ldif # 方法二:导出命令 $ slapcat -l export.ldif
|
打开OpenLDAP日志
- 更新日志级别
1 2 3 4 5 6 7 8
| $ cat loglevel.ldif dn: cn=config changetype: modify replace: olcLogLevel olcLogLevel: stats
$ ldapmodify -Y EXTERNAL -H ldapi:/// -f loglevel.ldif $ systemctl restart slapd
|
- 修改rsyslog配置文件
1 2 3
| $ touch /var/log/slapd.log $ echo local4.* /var/log/slapd.log >> /etc/rsyslog.conf $ systemctl restart rsyslog
|
- 查看openldap日志
1
| $ tail -f /var/log/slapd.log
|
容器化部署
1 2
| $ docker run --name ldap_core -p 389:389 -p 636:636 --env LDAP_ORGANISATION="example.com" --env LDAP_DOMAIN="example.com" --env LDAP_ADMIN_PASSWORD="redhat" --detach osixia/openldap $ docker run --name ldap_web -p 80:80 -p 443:443 --link ldap_core:ldap_core --env PHPLDAPADMIN_LDAP_HOSTS=ldap_core --detach osixia/phpldapadmin
|
同时还有Openshift的openldap容器openshift/openldap-2441-centos7
工具
- 浏览ldap目录列表的工具ldapbrowser
- LDAPSearch命令参数详情