一 、OpenLDAP简介与安装

LDAP是一款轻量级目录访问协议(Lightweight Directory Access Protocol,简称LDAP),属于开源集中账号管理架构的实现
LDAP提供并实现目录服务的信息服务,目录服务是一种特殊的数据库系统,对于数据的读取、浏览、搜索有很好的效果,目录服务一般用来包含基于属性的描述性信息并支持精细复杂的过滤功能,但OpenLDAP目录服务不支持通用数据库的大量更新操作所需要的复杂的事务管理或回滚策略等
OpenLDAP默认以Berkeley DB作为后端数据库,BerkeleyDB数据库主要以散列的数据类型进行数据存储,如以键值对的方式进行存储
BerkeleyDB是一类特殊的面向查询进行优化、面向读取进行优化的数据库,主要用于搜索、浏览、更新查询操作,一般对于一次写入数据、多次查询和搜索有很好的效果,BerkeleyDB不支持事务型数据库(MySQL、MariDB、Oracle等)所支持的高并发的吞吐量以及复杂的事务操作
统一身份认证、单点登录

1.1、OpenLDAP安装

  1. yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel migrationtools

查看OpenLDAP版本

  1. slapd -VV

1.2、配置OpenLDAP

从OpenLDAP2.4.23版本开始所有配置数据都保存在/etc/openldap/slapd.d/中,建议不再使用slapd.conf作为配置文件

1.2.1 配置OpenLDAP管理员密码

生成加密字段、加密后的字段保存下来修改配置文件需要使用

  1. slappasswd -s 123456

1.2.2 修改olcDatabase={2}hdb.ldif文件

修改olcDatabase={2}hdb.ldif文件
对于该文件增加一行
olcRootPW: {SSHA}dXgO/Ipy5SQiKFZ0u7m79Xo7uzKIr038
然后修改域信息:
olcSuffix: dc=ilanni,dc=com
olcRootDN: cn=root,dc=ilanni,dc=com

  1. vim /etc/openldap/slapd.d/cn=config/olcDatabase\=\{2\}hdb.ldif
  2. olcSuffix: dc=ilanni,dc=com
  3. olcRootDN: cn=root,dc=ilanni,dc=com
  4. olcRootPW: {SSHA}dXgO/Ipy5SQiKFZ0u7m79Xo7uzKIr038

其中cn=root中的root表示OpenLDAP管理员的用户名,而olcRootPW表示OpenLDAP管理员的密码

1.2.3 修改olcDatabase={1}monitor.ldif文件

  1. vim /etc/openldap/slapd.d/cn=config/olcDatabase\=\{1\}monitor.ldif
  2. olcAccess: {0}to * by dn.base=”gidNumber=0+uidNumber=0,cn=peercred,cn=extern
  3. al,cn=auth read by dn.base=”cn=root,dc=ilanni,dc=com read by * none

dn.base**是修改OpenLDAP的管理员的相关信息**

1.2.4 验证OpenLDAP的基本配置

  1. slaptest -u

1.2.5 启动OpenLDAP服务

  1. systemctl enable slapd
  2. systemctl start slapd
  3. systemctl status slapd

OpenLDAP默认监听的端口是389
检查监听端口

  1. netstat -antup | grep 389

1.2.6 配置OpenLDAP数据库

OpenLDAP默认使用的数据库是BerkeleyDB,配置OpenLDAP数据库
/var/lib/ldap/就是**BerkeleyDB**数据库默认存储的路径

  1. cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
  2. chown ldap:ldap -R /var/lib/ldap
  3. chmod 700 -R /var/lib/ldap
  4. ll /var/lib/ldap/

1.2.7 导入基本Schema

导入基本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

1.2.8 修改migrate_common.ph文件

migrate_common.ph文件主要是用于生成ldif文件使用

  1. vim /usr/share/migrationtools/migrate_common.ph +71
  2. $DEFAULT_MAIL_DOMAIN = ilanni.com”;
  3. $DEFAULT_BASE = dc=ilanni,dc=com”;
  4. $EXTENDED_SCHEMA = 1;

1.2.9 添加OpenLADP用户及用户组

默认情况下OpenLDAP是没有普通用户的,只有一个管理员root
现在我们把操作系统中的用户添加到OpenLDAP中,为了进行区分,我们现在新加两个用户ldapuser1和ldapuser2和两个用户组ldapgroup1和ldapgroup2

  1. 添加用户组
  2. groupadd ldapgroup1
  3. groupadd ldapgroup2
  4. 添加系统用户并设置密码
  5. useradd -g ldapgroup1 ldapuser1
  6. useradd -g ldapgroup2 ldapuser2
  7. echo 123456 | passwd stdin ldapuser1
  8. echo 123456 | passwd stdin ldapuser2

把添加的用户和用户组提取出来,包括该用户的密码和其他相关属性

  1. grep “:10[0-9][0-9]” /etc/passwd > /root/users
  2. grep “:10[0-9][0-9]” /etc/group > /root/groups
  3. cat users
  4. cat groups

根据上述生成的用户和用户组属性,使用migrate_passwd.pl文件生成要添加用户和用户组的ldif

  1. /usr/share/migrationtools/migrate_passwd.pl /root/users > /root/users.ldif
  2. /usr/share/migrationtools/migrate_group.pl /root/groups > /root/groups.ldif
  3. cat users.ldif
  4. cat groups.ldif

后续如果要新加用户到OpenLDAP中的话,我们可以直接修改**users.ldif**文件即可
**

1.2.10 导入用户及用户组到OpenLDAP数据库

配置openldap基础的数据库

  1. cat > /root/base.ldif << EOF
  2. dn: dc=ilanni,dc=com
  3. o: ilanni com
  4. dc: ilanni
  5. objectClass: top
  6. objectClass: dcObject
  7. objectclass: organization
  8. dn: cn=root,dc=ilanni,dc=com
  9. cn: root
  10. objectClass: organizationalRole
  11. description: Directory Manager
  12. dn: ou=People,dc=ilanni,dc=com
  13. ou: People
  14. objectClass: top
  15. objectClass: organizationalUnit
  16. dn: ou=Group,dc=ilanni,dc=com
  17. ou: Group
  18. objectClass: top
  19. objectClass: organizationalUnit
  20. EOF

导入基础数据库

  1. ldapadd -x -w 123456 -D cn=root,dc=ilanni,dc=com -f /root/base.ldif

导入用户到数据库

  1. ldapadd -x -w 123456 -D cn=root,dc=ilanni,dc=com -f /root/users.ldif

导入用户组到数据库

  1. ldapadd -x -w 123456 -D cn=root,dc=ilanni,dc=com -f /root/groups.ldif

查看BerkeleyDB数据库文件

  1. ll /var/lib/ldap/

BerkeleyDB数据库文件中多出新添加的cn.bdb、sn.bdb、ou.bdb等数据库文件

1.2.11 把OpenLDAP用户加入到用户组

用户和用户组信息已导入到OpenLDAP数据库中,但实际上目前OpenLDAP用户和用户组之间是没有任何关联的
要把OpenLDAP数据库中的用户和用户组关联起来的话,我们还需要做另外单独的配置

把ldapuser1用户加入到ldapgroup1用户组,需要新建添加用户到用户组的ldif文件

  1. cat > add_user_to_groups.ldif << EOF
  2. dn: cn=ldapgroup1,ou=Group,dc=ilanni,dc=com
  3. changetype: modify
  4. add: memberuid
  5. memberuid: ldapuser1
  6. EOF

关联操作命令

  1. ldapadd -x -w 123456 -D cn=root,dc=ilanni,dc=com -f /root/add_user_to_groups.ldif

验证查询添加的OpenLDAP用户组信息

  1. ldapsearch -LLL -x -D cn=root,dc=ilanni,dc=com -w 123456 -b dc=ilanni,dc=com cn=ldapgroup1

1.2.12 查询OpenLDAP的相关信息

查询OpenLDAP全部信息

  1. ldapsearch -x -b dc=ilanni,dc=com -H ldap://127.0.0.1

查询添加的OpenLDAP用户信息

  1. ldapsearch -LLL -x -D cn=root,dc=ilanni,dc=com -w 123456 -b dc=ilanni,dc=com uid=ldapuser1

查询添加的OpenLDAP用户组信息

  1. ldapsearch -LLL -x -D cn=root,dc=ilanni,dc=com -w 123456 -b dc=ilanni,dc=com cn=ldapgroup1

1.2.13 开启OpenLDAP日志访问功能

默认情况下OpenLDAP是没有启用日志记录功能
开启并配置系统服务rsyslog,新建日志配置ldif文件

  1. cat > /root/loglevel.ldif << EOF
  2. dn: cn=config
  3. changetype: modify
  4. replace: olcLogLevel
  5. olcLogLevel: stats
  6. EOF

导入到OpenLDAP中,并重启OpenLDAP服务

  1. ldapmodify -Y EXTERNAL -H ldapi:/// -f /root/loglevel.ldif
  2. systemctl restart slapd

修改rsyslog配置文件,并重启rsyslog服务

  1. cat >> /etc/rsyslog.conf << EOF
  2. local4.* /var/log/slapd.log
  3. EOF
  4. systemctl restart rsyslog

查看OpenLDAP日志

  1. tail -f /var/log/slapd.log

1.2.14 快速操作步骤

  1. yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel migrationtools
  2. cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
  3. chown ldap:ldap -R /var/lib/ldap
  4. chmod 700 -R /var/lib/ldap
  5. ll /var/lib/ldap/
  6. systemctl enable slapd
  7. systemctl start slapd
  8. systemctl status slapd
  9. cat >/root/chrootpw.ldif << "EOF"
  10. #specify the password generated above for "olcRootPW" section
  11. dn: olcDatabase={0}config,cn=config
  12. changetype: modify
  13. add: olcRootPW
  14. olcRootPW: {SSHA}FC/YWM2DGSuhn5vuKaK92pF1EwGVdznj
  15. EOF
  16. ldapadd -Y EXTERNAL -H ldapi:/// -f /root/chrootpw.ldif
  17. ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
  18. ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
  19. ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
  20. cat >/root/chdomain.ldif << "EOF"
  21. #replace to your own domain name for "dc=***,dc=***" section
  22. #specify the password generated above for "olcRootPW" section
  23. dn: olcDatabase={1}monitor,cn=config
  24. changetype: modify
  25. replace: olcAccess
  26. olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
  27. read by dn.base="cn=root,dc=ilanni,dc=com" read by * none
  28. dn: olcDatabase={2}hdb,cn=config
  29. changetype: modify
  30. replace: olcSuffix
  31. olcSuffix: dc=ilanni,dc=com
  32. dn: olcDatabase={2}hdb,cn=config
  33. changetype: modify
  34. replace: olcRootDN
  35. olcRootDN: cn=root,dc=ilanni,dc=com
  36. dn: olcDatabase={2}hdb,cn=config
  37. changetype: modify
  38. add: olcRootPW
  39. olcRootPW: {SSHA}FC/YWM2DGSuhn5vuKaK92pF1EwGVdznj
  40. dn: olcDatabase={2}hdb,cn=config
  41. changetype: modify
  42. add: olcAccess
  43. olcAccess: {0}to attrs=userPassword,shadowLastChange by
  44. dn="cn=root,dc=ilanni,dc=com" write by anonymous auth by self write by * none
  45. olcAccess: {1}to dn.base="" by * read
  46. olcAccess: {2}to * by dn="cn=root,dc=ilanni,dc=com" write by * read
  47. EOF
  48. ldapmodify -Y EXTERNAL -H ldapi:/// -f /root/chdomain.ldif
  49. cat >/root/basedomain.ldif << "EOF"
  50. #replace to your own domain name for "dc=***,dc=***" section
  51. dn: dc=ilanni,dc=com
  52. objectClass: top
  53. objectClass: dcObject
  54. objectclass: organization
  55. o: Server cn
  56. dc: ilanni
  57. dn: cn=root,dc=ilanni,dc=com
  58. objectClass: organizationalRole
  59. cn: root
  60. description: Directory root
  61. dn: ou=People,dc=ilanni,dc=com
  62. objectClass: organizationalUnit
  63. ou: People
  64. dn: ou=Group,dc=ilanni,dc=com
  65. objectClass: organizationalUnit
  66. ou: Group
  67. EOF
  68. ldapadd -x -D cn=root,dc=ilanni,dc=com -w "ilanni" -f /root/basedomain.ldif
  69. cat > /root/users.ldif << "EOF"
  70. dn: uid=ldapuser1,ou=People,dc=ilanni,dc=com
  71. uid: ldapuser1
  72. cn: 测试用户1
  73. objectClass: account
  74. objectClass: posixAccount
  75. objectClass: top
  76. objectClass: shadowAccount
  77. userPassword: {crypt}$6$pmVuchTg$kLzWnW0J1CS3LTWrzMu4PVnjROjXaoVUlr8Em3HzIH6wAK74Gzor7yiuRbrOoYCRGHmSNhAGBxMTNEcTkfpUt1
  78. shadowLastChange: 17642
  79. shadowMin: 0
  80. shadowMax: 99999
  81. shadowWarning: 7
  82. loginShell: /bin/bash
  83. uidNumber: 1000
  84. gidNumber: 1000
  85. homeDirectory: /home/ldapuser1
  86. dn: uid=ldapuser2,ou=People,dc=ilanni,dc=com
  87. uid: ldapuser2
  88. cn: 测试用户2
  89. objectClass: account
  90. objectClass: posixAccount
  91. objectClass: top
  92. objectClass: shadowAccount
  93. userPassword: {crypt}$6$NC7BvWQW$b.ceEn5zl7tOf0upfR3E5057um5ovIDo4Xf5sCOZVhwrr01nOfPmqXB0pNBtQCjzahP1lW3DLW5WKBp.qddeT0
  94. shadowLastChange: 17642
  95. shadowMin: 0
  96. shadowMax: 99999
  97. shadowWarning: 7
  98. loginShell: /bin/bash
  99. uidNumber: 1001
  100. gidNumber: 1001
  101. homeDirectory: /home/ldapuser2
  102. EOF
  103. ldapadd -x -w "ilanni" -D "cn=root,dc=ilanni,dc=com" -f /root/users.ldif
  104. cat > /root/groups.ldif << "EOF"
  105. dn: cn=ldapgroup1,ou=Group,dc=ilanni,dc=com
  106. objectClass: posixGroup
  107. objectClass: top
  108. cn: ldapgroup1
  109. userPassword: {crypt}x
  110. gidNumber: 1000
  111. dn: cn=ldapgroup2,ou=Group,dc=ilanni,dc=com
  112. objectClass: posixGroup
  113. objectClass: top
  114. cn: ldapgroup2
  115. userPassword: {crypt}x
  116. gidNumber: 1001
  117. EOF
  118. ldapadd -x -w "ilanni" -D "cn=root,dc=ilanni,dc=com" -f /root/groups.ldif
  119. cat > /root/add_user_to_groups.ldif << "EOF"
  120. dn: cn=ldapgroup1,ou=Group,dc=ilanni,dc=com
  121. changetype: modify
  122. add: memberuid
  123. memberuid: ldapuser1
  124. dn: cn=ldapgroup2,ou=Group,dc=ilanni,dc=com
  125. changetype: modify
  126. add: memberuid
  127. memberuid: ldapuser2
  128. EOF
  129. ldapadd -x -w "ilanni" -D "cn=root,dc=ilanni,dc=com" -f /root/add_user_to_groups.ldif
  130. cat > /root/loglevel.ldif << "EOF"
  131. dn: cn=config
  132. changetype: modify
  133. replace: olcLogLevel
  134. olcLogLevel: stats
  135. EOF
  136. ldapmodify -Y EXTERNAL -H ldapi:/// -f /root/loglevel.ldif
  137. systemctl restart slapd
  138. cat >> /etc/rsyslog.conf << "EOF"
  139. local4.* /var/log/slapd.log
  140. EOF
  141. systemctl restart rsyslog
  142. tail -f /var/log/slapd.log

1.3、LDAP Admin(可选)

在Windows下对OpenLDAP的操作进行需要连接OpenLDAP的客户端工具
使用最多的是ldapadmin http://www.ldapadmin.org
软件下载地址:http://www.ldapadmin.org/download/index.html

1.3.1 ldapadmin软件界面

image.png

1.4、Self Service Password安装(可选)

Self Service Password是一个Web应用,可以让用户自行更新、修改和重置LDAP中的用户密码

1.4.1 Self Service Password安装

二、**phpldapadmin**安装

通过web方式管理openldap的软件phpldapadmin
phpldapadmin是基于php语言开发的,并且也提供了epel源

2.1、phpldapadmin安装

依赖部署

  1. yum -y install httpd php php-ldap php-gd php-mbstring php-pear php-bcmath php-xml

软件部署

  1. yum enablerepo=epel -y install phpldapadmin

2.2 添加httpd配置文件

添加httpd与phpldapadmin集成的配置文件,内容如下:

  1. cat > /etc/httpd/conf.d/phpldapadmin.conf << EOF
  2. Alias /phpldapadmin /usr/share/phpldapadmin/htdocs
  3. Alias /ldapadmin /usr/share/phpldapadmin/htdocs
  4. <Directory /usr/share/phpldapadmin/htdocs>
  5. <IfModule mod_authz_core.c>
  6. # Apache 2.4
  7. Require all granted
  8. </IfModule>
  9. <IfModule !mod_authz_core.c>
  10. # Apache 2.2
  11. Order Deny,Allow
  12. Deny from all
  13. Allow from 127.0.0.1
  14. Allow from ::1
  15. </IfModule>
  16. </Directory>
  17. EOF

2.3 修改phpldapadmin配置文件

该配置文件中,除了常规的有关openldap的配置之外,还有几个点需要注意的:
login登录方式,在此我们使用的是dn方式进行登录,phpldapadmin默认使用的是uid方式进行登录

  1. cat > /etc/phpldapadmin/config.php << EOF
  2. <?php
  3. $config->custom->session[‘blowfish’] = 7faa00f2d9b61272f8d339c5a01a5cc0’;
  4. $config->custom->appearance[‘hide_template_warning’] = true;
  5. $config->custom->appearance[‘minimalMode’] = true;
  6. $config->custom->appearance[‘friendly_attrs’] = array(
  7. facsimileTelephoneNumber => Fax’,
  8. gid => Group’,
  9. mail => Email’,
  10. telephoneNumber => Telephone’,
  11. uid => User Name’,
  12. userPassword => Password
  13. );
  14. $servers = new Datastore();
  15. $servers->newServer(‘ldap_pla’);
  16. $servers->setValue(‘server’,’name’,’Ilanni LDAP Server’);
  17. $servers->setValue(‘appearance’,’password_hash’,”);
  18. $servers->setValue(‘login’,’attr’,’dn’);
  19. $servers->setValue(‘server’,’host’,’192.168.123.8′);
  20. $servers->setValue(‘server’,’port’,389);
  21. $servers->setValue(‘server’,’base’,array(‘dc=ilanni,dc=com’));
  22. $servers->setValue(‘login’,’auth_type’,’session’);
  23. $servers->setValue(‘server’,’tls’,false);
  24. $servers->setValue(‘unique’,’attrs’,array(‘uid’,’sn’));
  25. ?>
  26. EOF

2.4 启动httpd

  1. systemctl start httpd
  2. systemctl enable httpd
  3. systemctl status httpd

三、phpldapadmin**访问**

http://192.168.123.6/ldapadmin
如果是openldap管理员登录的话,使用cn=root,dc=ilanni,dc=com。如果是openldap普通用户登录的话,使用uid=ilanni,ou=People,dc=ilanni,dc=com

管理员root用户登录

四、phpldapadmin域名访问

使用nginx来通过域名访问phpldapadmin
4.1 修改httpd的相关配置
phpldapadmin与nginx进行集成,首先需要我们修改http的监听端口,把httpd的监听端口修改为8080、然后再修改phpldapadmin与httpd集成的配置文件
注意:上述使用的是apache的虚拟主机,监听的是8080端口。这个需要在httpd.conf启用listen

  1. cat > /etc/httpd/conf.d/ldapadmin.conf << EOF
  2. NameVirtualHost *:8080
  3. <VirtualHost *:8080>
  4. DocumentRoot /usr/share/phpldapadmin/htdocs
  5. DirectoryIndex index.php
  6. AddDefaultCharset UTF-8
  7. Alias /phpldapadmin /usr/share/phpldapadmin/htdocs
  8. Alias /ldapadmin /usr/share/phpldapadmin/htdocs
  9. <Directory /usr/share/phpldapadmin/htdocs>
  10. <IfModule mod_authz_core.c>
  11. Require all granted
  12. </IfModule>
  13. <IfModule !mod_authz_core.c>
  14. Order Deny,Allow
  15. Deny from all
  16. Allow from 127.0.0.1
  17. Allow from ::1
  18. </IfModule>
  19. </Directory>
  20. LogLevel warn
  21. ErrorLog /var/log/httpd/ldapadmin_error_log
  22. CustomLog /var/log/httpd/ldapadmin_access_log combined
  23. </VirtualHost>
  24. EOF

4.2 修改httpd的相关配置后重启服务

  1. systemctl restart httpd

4.3 nginx的相关配置

  1. cat > /etc/nginx/conf.d/default.conf << EOF
  2. server {
  3. listen 80;
  4. server_name ldapadmin.ilanni.com;
  5. access_log /var/log/nginx/ldapadmin-access.log main;
  6. location / {
  7. proxy_pass http://192.168.123.6:8282;
  8. proxy_set_header Host $host;
  9. proxy_set_header X-Real-IP $remote_addr;
  10. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  11. }
  12. }
  13. EOF

4.4 修改Nginx的相关配置后重启服务

  1. systemctl restart nginx

4.5 域名访问phpldapadmin

httpd与nginx相关的配置修改完毕后,我们来使用域名访问phpldapadmin
http://ldapadmin.ilanni.com

五、openldap禁止匿名访问

5.1 查看openldap是否可以匿名访问

5.2 禁止openldap匿名访问

  1. cat > /root/disable_anon.ldif << EOF
  2. dn: cn=config
  3. changetype: modify
  4. add: olcDisallows
  5. olcDisallows: bind_anon
  6. dn: cn=config
  7. changetype: modify
  8. add: olcRequires
  9. olcRequires: authc
  10. dn: olcDatabase={-1}frontend,cn=config
  11. changetype: modify
  12. add: olcRequires
  13. olcRequires: authc
  14. EOF

然后使用ldapadd命令导入到openldap中,如下:
ldapadd -Y EXTERNAL -H ldapi:/// -f /root/disable_anon.ldif

检查配置
cat /etc/openldap/slapd.d/cn\=config.ldif
cat /etc/openldap/slapd.d/cn\=config/olcDatabase\={-1}frontend.ldif

5.3 验证openldap匿名访问功能

通过ldapadmin工具,验证openldap是否还可以被匿名访问

六、Openldap应用集成

6.1 openldap与nginx集成

Nginx可以通过autoindex来对外提供目录索引的功能,也即是可以通过浏览器来查看并下载该目录下的所有文件,相当于一个文件服务器,默认情况下该目录下的所有文件对所有的用户都可以访问,如果希望只有具有指定的用户或者用户组可以访问,对于上述的需求可以使用apache的认证模块,但是该模块只能提供比较简单的认证,如果需要使用比较复杂的权限控制的话,该模块就无法满足要求了。
可通过nginx与openldap集成来实现上述要求,该方案中nginx提供目录索引功能,所有的认证通过nginx-auth-ldap模块实现,用户和用户组可以调用openldap,nginx必须使用源码编译安装。

6.1.1 nginx编译安装所需的基础依赖

默认情况下无论是yum安装的nginx,还是源码编译安装的nginx都没有包含ldap的认证模块,所以就需要我们在进行nginx源码编译安装时,把ldap模块配置上

  1. yum -y install git wget gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel openldap openldap-devel libxml2 libxml2-devel libxslt libxslt-devel gd gd-devel perl-devel perl-ExtUtils-Embed GeoIP GeoIP-devel gperftools

依赖安装完毕后,安装nginx的nginx-auth-ldap和ngx-fancyindex模块

6.1.2下载nginx源码

  1. wget http://nginx.org/download/nginx-1.15.4.tar.gz

6.1.3 下载nginx-auth-ldap模块

nginx官方默认是不支持openldap认证的,所以我们需要使用第三方认证模块nginx-auth-ldap
nginx-auth-ldap我们可以直接在github上获取源码
https://github.com/kvspb/nginx-auth-ldap
码云仓库
https://gitee.com/ilanni/nginx-auth-ldap.git

  1. git clone https://gitee.com/ilanni/nginx-auth-ldap.git /tmp/nginx-auth-ldap

6.1.4 下载ngx-fancyindex模块

nginx的目录索引功能,默认样式比较简单,所以在此我们使用第三方的样式美化模块ngx-fancyindex
githua
https://github.com/aperezdc/ngx-fancyindex
码云
https://gitee.com/ilanni/ngx-fancyindex.git

  1. git clone https://gitee.com/ilanni/ngx-fancyindex.git /tmp/ngx-fancyindex

6.1.5 编译安装nginx

  1. tar -xf nginx-1.15.4.tar.gz
  2. cd nginx-1.15.4
  1. ./configure –add-module=/tmp/ngx-fancyindex add-module=/tmp/nginx-auth-ldap with-threads with-file-aio with-http_auth_request_module with-http_ssl_module with-http_v2_module with-http_realip_module with-http_addition_module with-http_xslt_module=dynamic with-http_image_filter_module=dynamic with-http_geoip_module=dynamic with-http_sub_module with-http_dav_module with-http_flv_module with-http_mp4_module with-http_gunzip_module with-http_gzip_static_module with-http_random_index_module with-http_secure_link_module with-http_degradation_module with-http_slice_module with-http_stub_status_module with-http_perl_module=dynamic with-mail=dynamic with-mail_ssl_module without-mail_pop3_module without-mail_imap_module without-mail_smtp_module with-pcre with-pcre-jit with-stream with-stream=dynamic with-stream_ssl_module with-stream_ssl_preread_module with-google_perftools_module with-debug
  1. make && make install

测试nginx

  1. /usr/local/nginx/sbin/nginx -t

6.1.6 添加系统systemd服务

nginx编译安装完毕后,把nginx加入系统服务,可以使用systemctl命令管理

  1. cat > /usr/lib/systemd/system/nginx.service << EOF
  2. [Unit]
  3. Description=nginx
  4. After=network.target
  5. [Service]
  6. Type=forking
  7. PIDFile=/usr/local/nginx/logs/nginx.pid
  8. ExecStartPre=/usr/local/nginx/sbin/nginx -t
  9. ExecStart=/usr/local/nginx/sbin/nginx
  10. ExecReload=/usr/local/nginx/sbin/nginx -s reload
  11. ExecStop=/usr/local/nginx/sbin/nginx -s stop
  12. PrivateTmp=true
  13. [Install]
  14. WantedBy=multi-user.target
  15. EOF
  1. systemctl enable nginx
  2. systemctl start nginx
  3. systemctl status nginx

添加nginx的系统全局环境变量

  1. cat >> /etc/profile << EOF
  2. export PATH=$PATH:/usr/local/nginx/sbin/
  3. EOF
  4. source /etc/profile
  5. nginx -t

6.1.7 nginx与openldap集成

  1. cat > /usr/local/nginx/conf/nginx.conf << EOF
  2. user ftp;
  3. worker_processes 1;
  4. events {
  5. worker_connections 1024;
  6. }
  7. http {
  8. include mime.types;
  9. default_type application/octet-stream;
  10. log_format htlog ‘[$time_local] [FROM:$remote_addr][TO:$scheme://$server_name][FORWARD:$upstream_addr] $status’
  11. ‘”$request $body_bytes_sent Bytes,
  12. ‘”request_uri”: $request_uri”,
  13. ‘”http_cookie”: $http_cookie”,
  14. ‘”remote_user”: $remote_user”,
  15. ‘”request_time”: $request_time”,
  16. ‘”$http_referer $http_user_agent $http_x_forwarded_for”‘;
  17. sendfile on;
  18. keepalive_timeout 65;
  19. gzip on;
  20. ldap_server ilannildap_yunweizu {
  21. auth_ldap_cache_enabled on;
  22. auth_ldap_cache_expiration_time 10000;
  23. auth_ldap_cache_size 1000;
  24. connect_timeout 5s;
  25. bind_timeout 5s;
  26. request_timeout 5s;
  27. satisfy any;
  28. url ldap://192.168.123.8:389/dc=ilanni,dc=com?uid?sub;
  29. binddn cn=root,dc=ilanni,dc=com”;
  30. binddn_passwd ilanni;
  31. group_attribute uniquemember;
  32. group_attribute_is_dn on;
  33. require group cn=yunweizu,ou=Group,dc=ilanni,dc=com”;
  34. }
  35. server {
  36. listen 80;
  37. server_name yunweizu.ilanni.com;
  38. access_log /var/log/nginx/yunweizu.ilanni.com-access.log htlog;
  39. error_log /var/log/nginx/yunweizu.ilanni.com-error.log;
  40. charset utf-8,gbk;
  41. location / {
  42. root /opt/yunweizu/;
  43. fancyindex on;
  44. fancyindex_exact_size off;
  45. fancyindex_localtime on;
  46. fancyindex_default_sort name_desc;
  47. fancyindex_time_format “%Y-%m-%d %H:%M”;
  48. add_header Cache-Control no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0’;
  49. expires -1;
  50. auth_ldap Forbidden”;
  51. auth_ldap_servers ilannildap_yunweizu;
  52. }
  53. }
  54. }
  55. EOF

6.1.8 测试访问权限

6.2 openldap与gitlab集成

https://blog.csdn.net/fuchen91/article/details/101458703

6.3 openldap与nexus3集成

6.4 openldap与ssh服务集成

https://www.cnblogs.com/dmjx/p/9071068.html
https://blog.csdn.net/u011607971/article/details/86154096

6.5 openldap与Jenkins集成

https://blog.csdn.net/u011607971/article/details/86582378

6.6 openldap与svn集成

https://blog.ops-coffee.cn/s/nzv9uz-eyjt86uaxhapgtw
https://blog.csdn.net/w1213096890/article/details/79642948

七、容器化部署

docker 部署openldap及管理客户端

  1. #!/bin/bash -e
  2. docker run -p 389:389 -p 636:636 --name ldap-service --hostname ldap-service --detach osixia/openldap:1.3.0
  3. docker run -p 6443:443 --name phpldapadmin-service --hostname phpldapadmin-service --link ldap-service:ldap-host --env PHPLDAPADMIN_LDAP_HOSTS=ldap-host --detach osixia/phpldapadmin:0.9.0
  4. #PHPLDAP_IP=$(docker inspect -f "{{ .NetworkSettings.IPAddress }}" phpldapadmin-service)
  5. PHPLDAP_IP=$(ip addr | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}')
  6. echo "choose hostip Go to: https://$PHPLDAP_IP:6443"
  7. echo "Login DN: cn=admin,dc=example,dc=org"
  8. echo "Password: admin"

八、参考文档

http://www.ldap.org.cn/
https://www.ilanni.com/?p=13964
https://www.ibm.com/developerworks/cn/linux/l-openldap
https://edu.51cto.com/course/6267.html