- 一 、OpenLDAP简介与安装
- 1.1、OpenLDAP安装
- 1.2、配置OpenLDAP
- 1.2.1 配置OpenLDAP管理员密码
- 1.2.2 修改olcDatabase={2}hdb.ldif文件
- 1.2.3 修改olcDatabase={1}monitor.ldif文件
- 1.2.4 验证OpenLDAP的基本配置
- 1.2.5 启动OpenLDAP服务
- 1.2.6 配置OpenLDAP数据库
- 1.2.7 导入基本Schema
- 1.2.8 修改migrate_common.ph文件
- 1.2.9 添加OpenLADP用户及用户组
- 1.2.10 导入用户及用户组到OpenLDAP数据库
- 1.2.11 把OpenLDAP用户加入到用户组
- 1.2.12 查询OpenLDAP的相关信息
- 1.2.13 开启OpenLDAP日志访问功能
- 1.2.14 快速操作步骤
- 1.3、LDAP Admin(可选)
- 1.4、Self Service Password安装(可选)
- 二、**phpldapadmin**安装
- 三、phpldapadmin**访问**
- 四、phpldapadmin域名访问
- 五、openldap禁止匿名访问
- 六、Openldap应用集成
- 七、容器化部署
- 八、参考文档
一 、OpenLDAP简介与安装
LDAP是一款轻量级目录访问协议(Lightweight Directory Access Protocol,简称LDAP),属于开源集中账号管理架构的实现
LDAP提供并实现目录服务的信息服务,目录服务是一种特殊的数据库系统,对于数据的读取、浏览、搜索有很好的效果,目录服务一般用来包含基于属性的描述性信息并支持精细复杂的过滤功能,但OpenLDAP目录服务不支持通用数据库的大量更新操作所需要的复杂的事务管理或回滚策略等
OpenLDAP默认以Berkeley DB作为后端数据库,BerkeleyDB数据库主要以散列的数据类型进行数据存储,如以键值对的方式进行存储
BerkeleyDB是一类特殊的面向查询进行优化、面向读取进行优化的数据库,主要用于搜索、浏览、更新查询操作,一般对于一次写入数据、多次查询和搜索有很好的效果,BerkeleyDB不支持事务型数据库(MySQL、MariDB、Oracle等)所支持的高并发的吞吐量以及复杂的事务操作
统一身份认证、单点登录
1.1、OpenLDAP安装
yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel migrationtools
查看OpenLDAP版本
slapd -VV
1.2、配置OpenLDAP
从OpenLDAP2.4.23版本开始所有配置数据都保存在/etc/openldap/slapd.d/中,建议不再使用slapd.conf作为配置文件
1.2.1 配置OpenLDAP管理员密码
生成加密字段、加密后的字段保存下来修改配置文件需要使用
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
vim /etc/openldap/slapd.d/cn=config/olcDatabase\=\{2\}hdb.ldif
olcSuffix: dc=ilanni,dc=com
olcRootDN: cn=root,dc=ilanni,dc=com
olcRootPW: {SSHA}dXgO/Ipy5SQiKFZ0u7m79Xo7uzKIr038
其中cn=root中的root表示OpenLDAP管理员的用户名,而olcRootPW表示OpenLDAP管理员的密码
1.2.3 修改olcDatabase={1}monitor.ldif文件
vim /etc/openldap/slapd.d/cn=config/olcDatabase\=\{1\}monitor.ldif
olcAccess: {0}to * by dn.base=”gidNumber=0+uidNumber=0,cn=peercred,cn=extern
al,cn=auth” read by dn.base=”cn=root,dc=ilanni,dc=com” read by * none
dn.base**是修改OpenLDAP的管理员的相关信息**
1.2.4 验证OpenLDAP的基本配置
slaptest -u
1.2.5 启动OpenLDAP服务
systemctl enable slapd
systemctl start slapd
systemctl status slapd
OpenLDAP默认监听的端口是389
检查监听端口
netstat -antup | grep 389
1.2.6 配置OpenLDAP数据库
OpenLDAP默认使用的数据库是BerkeleyDB,配置OpenLDAP数据库
/var/lib/ldap/就是**BerkeleyDB**数据库默认存储的路径
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap:ldap -R /var/lib/ldap
chmod 700 -R /var/lib/ldap
ll /var/lib/ldap/
1.2.7 导入基本Schema
导入基本Schema,使用如下命令
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
1.2.8 修改migrate_common.ph文件
migrate_common.ph文件主要是用于生成ldif文件使用
vim /usr/share/migrationtools/migrate_common.ph +71
$DEFAULT_MAIL_DOMAIN = “ilanni.com”;
$DEFAULT_BASE = “dc=ilanni,dc=com”;
$EXTENDED_SCHEMA = 1;
1.2.9 添加OpenLADP用户及用户组
默认情况下OpenLDAP是没有普通用户的,只有一个管理员root
现在我们把操作系统中的用户添加到OpenLDAP中,为了进行区分,我们现在新加两个用户ldapuser1和ldapuser2和两个用户组ldapgroup1和ldapgroup2
添加用户组
groupadd ldapgroup1
groupadd ldapgroup2
添加系统用户并设置密码
useradd -g ldapgroup1 ldapuser1
useradd -g ldapgroup2 ldapuser2
echo ‘123456’ | passwd –stdin ldapuser1
echo ‘123456’ | passwd –stdin ldapuser2
把添加的用户和用户组提取出来,包括该用户的密码和其他相关属性
grep “:10[0-9][0-9]” /etc/passwd > /root/users
grep “:10[0-9][0-9]” /etc/group > /root/groups
cat users
cat groups
根据上述生成的用户和用户组属性,使用migrate_passwd.pl文件生成要添加用户和用户组的ldif
/usr/share/migrationtools/migrate_passwd.pl /root/users > /root/users.ldif
/usr/share/migrationtools/migrate_group.pl /root/groups > /root/groups.ldif
cat users.ldif
cat groups.ldif
后续如果要新加用户到OpenLDAP中的话,我们可以直接修改**users.ldif**文件即可
**
1.2.10 导入用户及用户组到OpenLDAP数据库
配置openldap基础的数据库
cat > /root/base.ldif << EOF
dn: dc=ilanni,dc=com
o: ilanni com
dc: ilanni
objectClass: top
objectClass: dcObject
objectclass: organization
dn: cn=root,dc=ilanni,dc=com
cn: root
objectClass: organizationalRole
description: Directory Manager
dn: ou=People,dc=ilanni,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
dn: ou=Group,dc=ilanni,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
EOF
导入基础数据库
ldapadd -x -w “123456” -D “cn=root,dc=ilanni,dc=com” -f /root/base.ldif
导入用户到数据库
ldapadd -x -w “123456” -D “cn=root,dc=ilanni,dc=com” -f /root/users.ldif
导入用户组到数据库
ldapadd -x -w “123456” -D “cn=root,dc=ilanni,dc=com” -f /root/groups.ldif
查看BerkeleyDB数据库文件
ll /var/lib/ldap/
BerkeleyDB数据库文件中多出新添加的cn.bdb、sn.bdb、ou.bdb等数据库文件
1.2.11 把OpenLDAP用户加入到用户组
用户和用户组信息已导入到OpenLDAP数据库中,但实际上目前OpenLDAP用户和用户组之间是没有任何关联的
要把OpenLDAP数据库中的用户和用户组关联起来的话,我们还需要做另外单独的配置
把ldapuser1用户加入到ldapgroup1用户组,需要新建添加用户到用户组的ldif文件
cat > add_user_to_groups.ldif << “EOF”
dn: cn=ldapgroup1,ou=Group,dc=ilanni,dc=com
changetype: modify
add: memberuid
memberuid: ldapuser1
EOF
关联操作命令
ldapadd -x -w “123456” -D “cn=root,dc=ilanni,dc=com” -f /root/add_user_to_groups.ldif
验证查询添加的OpenLDAP用户组信息
ldapsearch -LLL -x -D ‘cn=root,dc=ilanni,dc=com’ -w “123456” -b ‘dc=ilanni,dc=com’ ‘cn=ldapgroup1’
1.2.12 查询OpenLDAP的相关信息
查询OpenLDAP全部信息
ldapsearch -x -b “dc=ilanni,dc=com” -H ldap://127.0.0.1
查询添加的OpenLDAP用户信息
ldapsearch -LLL -x -D ‘cn=root,dc=ilanni,dc=com’ -w “123456” -b ‘dc=ilanni,dc=com’ ‘uid=ldapuser1’
查询添加的OpenLDAP用户组信息
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文件
cat > /root/loglevel.ldif << “EOF”
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats
EOF
导入到OpenLDAP中,并重启OpenLDAP服务
ldapmodify -Y EXTERNAL -H ldapi:/// -f /root/loglevel.ldif
systemctl restart slapd
修改rsyslog配置文件,并重启rsyslog服务
cat >> /etc/rsyslog.conf << “EOF”
local4.* /var/log/slapd.log
EOF
systemctl restart rsyslog
查看OpenLDAP日志
tail -f /var/log/slapd.log
1.2.14 快速操作步骤
yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel migrationtools
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap:ldap -R /var/lib/ldap
chmod 700 -R /var/lib/ldap
ll /var/lib/ldap/
systemctl enable slapd
systemctl start slapd
systemctl status slapd
cat >/root/chrootpw.ldif << "EOF"
#specify the password generated above for "olcRootPW" section
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}FC/YWM2DGSuhn5vuKaK92pF1EwGVdznj
EOF
ldapadd -Y EXTERNAL -H ldapi:/// -f /root/chrootpw.ldif
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
cat >/root/chdomain.ldif << "EOF"
#replace to your own domain name for "dc=***,dc=***" section
#specify the password generated above for "olcRootPW" section
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=root,dc=ilanni,dc=com" read by * none
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=ilanni,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=root,dc=ilanni,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}FC/YWM2DGSuhn5vuKaK92pF1EwGVdznj
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
dn="cn=root,dc=ilanni,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=root,dc=ilanni,dc=com" write by * read
EOF
ldapmodify -Y EXTERNAL -H ldapi:/// -f /root/chdomain.ldif
cat >/root/basedomain.ldif << "EOF"
#replace to your own domain name for "dc=***,dc=***" section
dn: dc=ilanni,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: Server cn
dc: ilanni
dn: cn=root,dc=ilanni,dc=com
objectClass: organizationalRole
cn: root
description: Directory root
dn: ou=People,dc=ilanni,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=ilanni,dc=com
objectClass: organizationalUnit
ou: Group
EOF
ldapadd -x -D cn=root,dc=ilanni,dc=com -w "ilanni" -f /root/basedomain.ldif
cat > /root/users.ldif << "EOF"
dn: uid=ldapuser1,ou=People,dc=ilanni,dc=com
uid: ldapuser1
cn: 测试用户1
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$6$pmVuchTg$kLzWnW0J1CS3LTWrzMu4PVnjROjXaoVUlr8Em3HzIH6wAK74Gzor7yiuRbrOoYCRGHmSNhAGBxMTNEcTkfpUt1
shadowLastChange: 17642
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/ldapuser1
dn: uid=ldapuser2,ou=People,dc=ilanni,dc=com
uid: ldapuser2
cn: 测试用户2
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$6$NC7BvWQW$b.ceEn5zl7tOf0upfR3E5057um5ovIDo4Xf5sCOZVhwrr01nOfPmqXB0pNBtQCjzahP1lW3DLW5WKBp.qddeT0
shadowLastChange: 17642
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/ldapuser2
EOF
ldapadd -x -w "ilanni" -D "cn=root,dc=ilanni,dc=com" -f /root/users.ldif
cat > /root/groups.ldif << "EOF"
dn: cn=ldapgroup1,ou=Group,dc=ilanni,dc=com
objectClass: posixGroup
objectClass: top
cn: ldapgroup1
userPassword: {crypt}x
gidNumber: 1000
dn: cn=ldapgroup2,ou=Group,dc=ilanni,dc=com
objectClass: posixGroup
objectClass: top
cn: ldapgroup2
userPassword: {crypt}x
gidNumber: 1001
EOF
ldapadd -x -w "ilanni" -D "cn=root,dc=ilanni,dc=com" -f /root/groups.ldif
cat > /root/add_user_to_groups.ldif << "EOF"
dn: cn=ldapgroup1,ou=Group,dc=ilanni,dc=com
changetype: modify
add: memberuid
memberuid: ldapuser1
dn: cn=ldapgroup2,ou=Group,dc=ilanni,dc=com
changetype: modify
add: memberuid
memberuid: ldapuser2
EOF
ldapadd -x -w "ilanni" -D "cn=root,dc=ilanni,dc=com" -f /root/add_user_to_groups.ldif
cat > /root/loglevel.ldif << "EOF"
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats
EOF
ldapmodify -Y EXTERNAL -H ldapi:/// -f /root/loglevel.ldif
systemctl restart slapd
cat >> /etc/rsyslog.conf << "EOF"
local4.* /var/log/slapd.log
EOF
systemctl restart rsyslog
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软件界面
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安装
依赖部署
yum -y install httpd php php-ldap php-gd php-mbstring php-pear php-bcmath php-xml
软件部署
yum –enablerepo=epel -y install phpldapadmin
2.2 添加httpd配置文件
添加httpd与phpldapadmin集成的配置文件,内容如下:
cat > /etc/httpd/conf.d/phpldapadmin.conf << “EOF”
Alias /phpldapadmin /usr/share/phpldapadmin/htdocs
Alias /ldapadmin /usr/share/phpldapadmin/htdocs
<Directory /usr/share/phpldapadmin/htdocs>
<IfModule mod_authz_core.c>
# Apache 2.4
Require all granted
</IfModule>
<IfModule !mod_authz_core.c>
# Apache 2.2
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
Allow from ::1
</IfModule>
</Directory>
EOF
2.3 修改phpldapadmin配置文件
该配置文件中,除了常规的有关openldap的配置之外,还有几个点需要注意的:
login登录方式,在此我们使用的是dn方式进行登录,phpldapadmin默认使用的是uid方式进行登录
cat > /etc/phpldapadmin/config.php << “EOF”
<?php
$config->custom->session[‘blowfish’] = ‘7faa00f2d9b61272f8d339c5a01a5cc0’;
$config->custom->appearance[‘hide_template_warning’] = true;
$config->custom->appearance[‘minimalMode’] = true;
$config->custom->appearance[‘friendly_attrs’] = array(
‘facsimileTelephoneNumber’ => ‘Fax’,
‘gid’ => ‘Group’,
‘mail’ => ‘Email’,
‘telephoneNumber’ => ‘Telephone’,
‘uid’ => ‘User Name’,
‘userPassword’ => ‘Password’
);
$servers = new Datastore();
$servers->newServer(‘ldap_pla’);
$servers->setValue(‘server’,’name’,’Ilanni LDAP Server’);
$servers->setValue(‘appearance’,’password_hash’,”);
$servers->setValue(‘login’,’attr’,’dn’);
$servers->setValue(‘server’,’host’,’192.168.123.8′);
$servers->setValue(‘server’,’port’,389);
$servers->setValue(‘server’,’base’,array(‘dc=ilanni,dc=com’));
$servers->setValue(‘login’,’auth_type’,’session’);
$servers->setValue(‘server’,’tls’,false);
$servers->setValue(‘unique’,’attrs’,array(‘uid’,’sn’));
?>
EOF
2.4 启动httpd
systemctl start httpd
systemctl enable httpd
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
cat > /etc/httpd/conf.d/ldapadmin.conf << “EOF”
NameVirtualHost *:8080
<VirtualHost *:8080>
DocumentRoot /usr/share/phpldapadmin/htdocs
DirectoryIndex index.php
AddDefaultCharset UTF-8
Alias /phpldapadmin /usr/share/phpldapadmin/htdocs
Alias /ldapadmin /usr/share/phpldapadmin/htdocs
<Directory /usr/share/phpldapadmin/htdocs>
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
<IfModule !mod_authz_core.c>
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
Allow from ::1
</IfModule>
</Directory>
LogLevel warn
ErrorLog /var/log/httpd/ldapadmin_error_log
CustomLog /var/log/httpd/ldapadmin_access_log combined
</VirtualHost>
EOF
4.2 修改httpd的相关配置后重启服务
systemctl restart httpd
4.3 nginx的相关配置
cat > /etc/nginx/conf.d/default.conf << “EOF”
server {
listen 80;
server_name ldapadmin.ilanni.com;
access_log /var/log/nginx/ldapadmin-access.log main;
location / {
proxy_pass http://192.168.123.6:8282;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
EOF
4.4 修改Nginx的相关配置后重启服务
systemctl restart nginx
4.5 域名访问phpldapadmin
httpd与nginx相关的配置修改完毕后,我们来使用域名访问phpldapadmin
http://ldapadmin.ilanni.com
五、openldap禁止匿名访问
5.1 查看openldap是否可以匿名访问
5.2 禁止openldap匿名访问
cat > /root/disable_anon.ldif << “EOF”
dn: cn=config
changetype: modify
add: olcDisallows
olcDisallows: bind_anon
dn: cn=config
changetype: modify
add: olcRequires
olcRequires: authc
dn: olcDatabase={-1}frontend,cn=config
changetype: modify
add: olcRequires
olcRequires: authc
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模块配置上
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源码
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
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
git clone https://gitee.com/ilanni/ngx-fancyindex.git /tmp/ngx-fancyindex
6.1.5 编译安装nginx
tar -xf nginx-1.15.4.tar.gz
cd nginx-1.15.4
./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
make && make install
测试nginx
/usr/local/nginx/sbin/nginx -t
6.1.6 添加系统systemd服务
nginx编译安装完毕后,把nginx加入系统服务,可以使用systemctl命令管理
cat > /usr/lib/systemd/system/nginx.service << “EOF”
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
systemctl enable nginx
systemctl start nginx
systemctl status nginx
添加nginx的系统全局环境变量
cat >> /etc/profile << “EOF”
export PATH=$PATH:/usr/local/nginx/sbin/
EOF
source /etc/profile
nginx -t
6.1.7 nginx与openldap集成
cat > /usr/local/nginx/conf/nginx.conf << “EOF”
user ftp;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format htlog ‘[$time_local] [FROM:$remote_addr][TO:$scheme://$server_name][FORWARD:$upstream_addr] $status’
‘”$request” $body_bytes_sent’ ‘ Bytes, ‘
‘”request_uri”: “$request_uri”, ‘
‘”http_cookie”: “$http_cookie”, ‘
‘”remote_user”: “$remote_user”, ‘
‘”request_time”: “$request_time”, ‘
‘”$http_referer” “$http_user_agent” “$http_x_forwarded_for”‘;
sendfile on;
keepalive_timeout 65;
gzip on;
ldap_server ilannildap_yunweizu {
auth_ldap_cache_enabled on;
auth_ldap_cache_expiration_time 10000;
auth_ldap_cache_size 1000;
connect_timeout 5s;
bind_timeout 5s;
request_timeout 5s;
satisfy any;
url ldap://192.168.123.8:389/dc=ilanni,dc=com?uid?sub;
binddn “cn=root,dc=ilanni,dc=com”;
binddn_passwd ilanni;
group_attribute uniquemember;
group_attribute_is_dn on;
require group “cn=yunweizu,ou=Group,dc=ilanni,dc=com”;
}
server {
listen 80;
server_name yunweizu.ilanni.com;
access_log /var/log/nginx/yunweizu.ilanni.com-access.log htlog;
error_log /var/log/nginx/yunweizu.ilanni.com-error.log;
charset utf-8,gbk;
location / {
root /opt/yunweizu/;
fancyindex on;
fancyindex_exact_size off;
fancyindex_localtime on;
fancyindex_default_sort name_desc;
fancyindex_time_format “%Y-%m-%d %H:%M”;
add_header ‘Cache-Control’ ‘no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0’;
expires -1;
auth_ldap “Forbidden”;
auth_ldap_servers ilannildap_yunweizu;
}
}
}
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及管理客户端
#!/bin/bash -e
docker run -p 389:389 -p 636:636 --name ldap-service --hostname ldap-service --detach osixia/openldap:1.3.0
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
#PHPLDAP_IP=$(docker inspect -f "{{ .NetworkSettings.IPAddress }}" phpldapadmin-service)
PHPLDAP_IP=$(ip addr | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}')
echo "choose hostip Go to: https://$PHPLDAP_IP:6443"
echo "Login DN: cn=admin,dc=example,dc=org"
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