Note:

1:生成管理员密码时,要用数字,不要用字母,不然后期会出错,我也不知道原因;

2:.ldif文件内,中间空行的那一行不要有空格;

3:运行base.ldif时,要输入之前所设定的数字密码,而不是生成的SSHA那一串。

参考链接

https://blog.csdn.net/weixin_41004350/article/details/89521170

https://cloud.tencent.com/developer/article/149085(access重要)

1. 安装openldap

  1. # yum 安装相关包
  2. yum install -y openldap openldap-clients openldap-servers
  3. # 复制一个默认配置到指定目录下,并授权,这一步一定要做,然后再启动服务,不然生产密码时会报错
  4. cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
  5. # 授权给ldap用户,此用户yum安装时便会自动创建
  6. chown -R ldap. /var/lib/ldap/DB_CONFIG
  7. # 启动服务,先启动服务,配置后面再进行修改
  8. systemctl start slapd
  9. systemctl enable slapd
  10. # 查看状态,正常启动则ok
  11. systemctl status slapd

2. 修改openldap配置

  1. # 生成管理员密码,记录下这个密码,后面需要用到
  2. slappasswd -s 123456
  3. {SSHA}60Ses6pBE9WnViLDcLK/ILYlkv4TdLfI

2.1 修改密码

1-changepwd.ldif

  1. dn: olcDatabase={0}config,cn=config
  2. changetype: modify
  3. add: olcRootPW
  4. olcRootPW: {SSHA}60Ses6pBE9WnViLDcLK/ILYlkv4TdLfI
  1. ldapadd -Y EXTERNAL -H ldapi:/// -f 1-changepwd.ldif

2.2 导入一些基本的 Schema
  1. ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
  2. ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
  3. ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
  4. ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/collective.ldif
  5. ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/corba.ldif
  6. ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/duaconf.ldif
  7. ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/dyngroup.ldif
  8. ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/java.ldif
  9. ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/misc.ldif
  10. ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/openldap.ldif
  11. ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/pmi.ldif
  12. ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/ppolicy.ldif

2.3 修改domain

2-changedomain.ldif

  1. dn: olcDatabase={1}monitor,cn=config
  2. changetype: modify
  3. replace: olcAccess
  4. olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=admin,dc=demo,dc=com" read by * none
  5. dn: olcDatabase={2}hdb,cn=config
  6. changetype: modify
  7. replace: olcSuffix
  8. olcSuffix: dc=demo,dc=com
  9. dn: olcDatabase={2}hdb,cn=config
  10. changetype: modify
  11. replace: olcRootDN
  12. olcRootDN: cn=admin,dc=demo,dc=com
  13. dn: olcDatabase={2}hdb,cn=config
  14. changetype: modify
  15. replace: olcRootPW
  16. olcRootPW: {SSHA}60Ses6pBE9WnViLDcLK/ILYlkv4TdLfI
  17. dn: olcDatabase={2}hdb,cn=config
  18. changetype: modify
  19. add: olcAccess
  20. olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=demo,dc=com" write by anonymous auth by self write by * none
  21. olcAccess: {1}to dn.base="" by * read
  22. olcAccess: {2}to * by dn="cn=admin,dc=demo,dc=com" write by * read
  1. ldapmodify -Y EXTERNAL -H ldapi:/// -f 2-changedomain.ldif

2.4 验证

可以通过 search语法来确定账号密码是否正确

  • ldapsearch 查询语法, -H指定host, -D指定admin的账号,即rootdn, -w指定密码, -x启用认证
  1. ldapsearch -H ldapi:/// -D "cn=admin,dc=demo,dc=com" -w 123456

2.5 创建base组织

3-base.ldif

  1. dn: dc=demo,dc=com
  2. objectClass: top
  3. objectClass: dcObject
  4. objectClass: organization
  5. o: Demo Company
  6. dc: demo
  7. dn: cn=admin,dc=demo,dc=com
  8. objectClass: organizationalRole
  9. cn: admin
  10. dn: ou=People,dc=demo,dc=com
  11. objectClass: organizationalUnit
  12. ou: People
  13. dn: ou=Group,dc=demo,dc=com
  14. objectClass: organizationalRole
  15. cn: Group
  1. 3-base.ldif

3. 安装phpldapadmin

3.1 安装

安装时可能会提示“No package phpldapadmin available”,则

  1. yum install -y php-ldap php-mbstring php-pear php-xml
  2. yum install -y epel-release
  3. yum install -y phpldapadmin

3.2 修改配置

修改apache的phpldapadmin配置文件

  1. vim /etc/httpd/conf.d/phpldapadmin.conf
  1. <IfModule mod_authz_core.c>
  2. # Apache 2.4
  3. Require all granted
  4. </IfModule>

修改配置用DN登录ldap

  1. vim /etc/phpldapadmin/config.php
  1. # 398行,默认是使用uid进行登录,我这里改为cn,也就是用户名
  2. $servers->setValue('login','attr','cn');
  3. # 460行,关闭匿名登录,否则任何人都可以直接匿名登录查看所有人的信息
  4. $servers->setValue('login','anon_bind',false);
  5. # 519行,设置用户属性的唯一性,这里我将cn,sn加上了,以确保用户名的唯一性
  6. $servers->setValue('unique','attrs',array('mail','uid','uidNumber','cn','sn'));

3.3 启动apache
  1. systemctl start httpd
  2. systemctl enable httpd

404失败的原因

可能会访问 http://10.64.166.78/phpldapadmin/失败,404,是防火墙的原因

关闭防火墙

  1. systemctl stop firewalld.service #停止防火墙服务
  2. systemctl disable firewalld.service #禁用防火墙开机启动服务

或者添加防火墙允许

  1. #添加389允许
  2. firewall-cmd --add-service=ldap --permanent
  3. firewall-cmd --reload
  4. # 添加80允许
  5. firewall-cmd --zone=public --add-port=80/tcp --permanent

出现success表明添加成功

3.4 登录phpldapadmin界面

http://10.64.165.70/phpldapadmin/

4. 新增user,用户等

4.1 启用memberof功能

4-add_module_group.ldif

  1. dn: cn=module,cn=config
  2. cn: module
  3. objectClass: olcModuleList
  4. olcModulePath: /usr/lib64/openldap
  5. dn: cn=module{0},cn=config
  6. changetype: modify
  7. add: olcModuleLoad
  8. olcModuleLoad: memberof.la
  1. ldapadd -Q -Y EXTERNAL -H ldapi:/// -f 4-add_module_group.ldif

5-add_group_objectClass.ldif

  1. dn: olcOverlay=memberof,olcDatabase={2}hdb,cn=config
  2. objectClass: olcConfig
  3. objectClass: olcMemberOf
  4. objectClass: olcOverlayConfig
  5. objectClass: top
  6. olcOverlay: memberof
  7. olcMemberOfDangling: ignore
  8. olcMemberOfRefInt: TRUE
  9. olcMemberOfGroupOC: groupOfNames
  10. olcMemberOfMemberAD: member
  11. olcMemberOfMemberOfAD: memberOf
  1. ldapadd -Q -Y EXTERNAL -H ldapi:/// -f 5-add_group_objectClass.ldif

(6,7 optional)

6-refint1.ldif

  1. dn: cn=module{0},cn=config
  2. add: olcmoduleload
  3. olcmoduleload: refint

7-refint2.ldif

  1. dn: olcOverlay=refint,olcDatabase={2}hdb,cn=config
  2. objectClass: olcConfig
  3. objectClass: olcOverlayConfig
  4. objectClass: olcRefintConfig
  5. objectClass: top
  6. olcOverlay: refint
  7. olcRefintAttribute: memberof uniqueMember manager owner
  1. ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f 6-refint1.ldif
  2. ldapadd -Q -Y EXTERNAL -H ldapi:/// -f 7-refint2.ldif

4.2 新增user

4.2.1 批量增加

8-adduser.ldif

  1. dn: ou=研发部门,ou=People,dc=demo,dc=com
  2. changetype: add
  3. objectClass: organizationalUnit
  4. ou: 研发部门
  5. dn: ou=后台组,ou=研发部门,ou=People,dc=demo,dc=com
  6. changetype: add
  7. objectClass: organizationalUnit
  8. ou: 后台组
  9. dn: cn=ryan.miao,ou=后台组,ou=研发部门,ou=People,dc=demo,dc=com
  10. changetype: add
  11. objectClass: inetOrgPerson
  12. cn: ryan.miao
  13. departmentNumber: 1
  14. sn: Miao
  15. title: 大牛
  16. mail: ryan.miao@demo.com
  17. uid: 10000
  18. displayName: 中文名
  19. dn: cn=someone,ou=后台组,ou=研发部门,ou=People,dc=demo,dc=com
  20. changetype: add
  21. objectClass: inetOrgPerson
  22. cn: someone
  23. departmentNumber: 1
  24. sn: someone
  25. title: Java工程师
  26. mail: someone@demo.com
  27. uid: 10001
  28. displayName: 某人
  29. dn: ou=测试组,ou=研发部门,ou=People,dc=demo,dc=com
  30. changetype: add
  31. objectClass: organizationalUnit
  32. ou: 测试组
  33. dn: cn=tester.miao,ou=测试组,ou=研发部门,ou=People,dc=demo,dc=com
  34. changetype: add
  35. objectClass: inetOrgPerson
  36. cn: tester.miao
  37. departmentNumber: 2
  38. sn: Miao
  39. title: 测试工程师
  40. mail: tester@demo.com
  41. uid: 10002
  42. displayName: 测试某人
  43. dn: ou=HR,ou=People,dc=demo,dc=com
  44. changetype: add
  45. objectClass: organizationalUnit
  46. ou: HR
  47. dn: cn=fang.huang,ou=HR,ou=People,dc=demo,dc=com
  48. changetype: add
  49. objectClass: inetOrgPerson
  50. cn: fang.huang
  51. departmentNumber: 3
  52. sn: Huang
  53. title: HRBP
  54. mail: fang.huang@demo.com
  55. uid: 10003
  56. displayName: 黄芳
  1. ldapadd -x -D cn=admin,dc=demo,dc=com -w 123456 -f 8-adduser.ldif

4.2.2 添加 Account 时指定密码

9-addone.ldif

  1. dn: cn=hr-ryan,ou=HR,ou=People,dc=demo,dc=com
  2. changetype: add
  3. objectClass: inetOrgPerson
  4. cn: hr-ryan
  5. userPassword: 123456
  6. departmentNumber: 3
  7. sn: hr-ryan
  8. title: HRBP
  9. mail: hr-ryan@demo.com
  10. uid: 10004
  11. displayName: 我是猎头
  1. ldapadd -x -D cn=admin,dc=demo,dc=com -w 123456 -f 9-addone.ldif

4.3 新增group

10-addgroup.ldif

  1. dn: cn=g-admin,ou=Group,dc=demo,dc=com
  2. objectClass: groupOfNames
  3. cn: g-admin
  4. member: cn=ryan.miao,ou=后台组,ou=研发部门,ou=People,dc=demo,dc=com
  5. member: cn=hr-ryan,ou=HR,ou=People,dc=demo,dc=com
  1. ldapadd -x -D cn=admin,dc=demo,dc=com -w 123456 -f 10-addgroup.ldif

5. phpldapadmin添加account

https://www.cnblogs.com/xiaomifeng0510/p/9564688.html

6. 导入linux操作系统中的用户和组到openldap中

6.1 创建账号

以备客户端测试登陆

  1. useradd ldaptest01
  2. passwd ldaptest01
  3. useradd ldaptest02
  4. passwd ldaptest02
  5. useradd ldaptest03
  6. passwd ldaptest03

至此,这些用户仅仅是系统上存在的用户(存储在/etc/passwd和/etc/shadow上),并没有在LDAP数据库里,所以要把这些用户导入到LDAP里面去。但LDAP只能识别特定格式的文件 即后缀为ldif的文件(也是文本文件),所以不能直接使用/etc/passwd和/etc/shadow。 需要migrationtools这个工具把这两个文件转变成LDAP能识别的文件。

6.2 安装配置migrationtools
  1. yum install migrationtools -y

6.3 进入migrationtool配置目录
  1. # cd /usr/share/migrationtools/
  2. 首先编辑migrate_common.ph
  3. # vim migrate_common.ph
  4. ...
  5. # Default DNS domain
  6. $DEFAULT_MAIL_DOMAIN = "demo.com";
  7. # Default base
  8. $DEFAULT_BASE = "dc=demo,dc=com";
  9. .......
  10. 保存退出。:-)

6.4 生成ldif文件

下面利用pl脚本将/etc/passwd 和/etc/shadow生成LDAP能读懂的文件格式,保存在/tmp/下

  1. ./migrate_base.pl > /home/chenxin/base.ldif
  2. ./migrate_passwd.pl /etc/passwd > /home/chenxin/passwd.ldif
  3. ./migrate_group.pl /etc/group > /home/chenxin/group.ldif

6.5 导入openldap
  1. ldapadd -x -D "cn=admin,dc=demo,dc=com" -W -f /home/chenxin/base.ldif
  2. ldapadd -x -D "cn=admin,dc=demo,dc=com" -W -f /home/chenxin/passwd.ldif
  3. ldapadd -x -D "cn=admin,dc=demo,dc=com" -W -f /home/chenxin/group.ldif

过程若无报错,则LDAP服务端配置完毕

6.6 重启slapd完成配置
  1. service slapd restart

6.7 现安装NFS,并把chenxin的家目录做NFS共享
  1. # yum install nfs* -y
  2. 配置NFS共享:
  3. # vi /etc/exports
  4. --------------
  5. /home/ldapuser1 *(rw,no_root_squash)
  6. --------------
  7. 重启nfs服务:
  8. # service rpcbind restart
  9. # service nfs restart

PS.本地需要做ldap控制的账号都要导入到LDAP DB中,否则客户端配置无法正常识别登录。

7. ppolicy overlay

OpenLDAP Pasword policy (ppolicy)&section-id={BA89410E-4210-CC46-AF38-1DDE2E891324}&page-id={E76AE8A2-15FD-FC44-A943-891ED1613017}&end&base-path=https://d.docs.live.net/97e2ff3f4f2555a1/Documents/STUDY/LDAP.one)

8. schema增加intlMailAddr

  1. vim /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{0\}config.ldif
  2. # 增加olcRootDN
  3. olcRootDN: cn=admin,cn=config

11-intlMailAddr.ldif

  1. dn: cn=mailboxrelatedobject,cn=schema,cn=config
  2. objectClass: olcSchemaConfig
  3. cn: mailboxrelatedobject
  4. olcAttributeTypes: ( 1.3.6.1.4.1.5427.1.389.4.18
  5. NAME 'intlMailAddr'
  6. DESC 'Internationalized Email Address'
  7. EQUALITY caseIgnoreMatch
  8. SUBSTR caseIgnoreSubstringsMatch
  9. SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
  10. olcObjectClasses: ( 1.3.6.1.4.1.5427.1.389.6.9
  11. NAME 'mailboxRelatedObject'
  12. DESC 'Associated RFC 5321 mailbox for any entry'
  13. AUXILIARY
  14. MAY ( displayName $ mail $ intlMailAddr ) )
  1. ldapadd -x -D cn=admin,cn=config -W -f 11-intlMailAddr.ldif