docker 部署 openldap
docker-compose.yml 示例:
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
| version: '3.7'
services:
ldap:
# openldap 服务器
image: osixia/openldap:latest
restart: always
volumes:
- ldap_config:/etc/ldap/slapd.d
- ldap_data:/var/lib/ldap
# - ldap_certs:/container/service/slapd/assets/certs
ports:
# port 636 for TLS
- "389:389"
# - "636:636"
environment:
- TZ=Asia/Shanghai
- LDAP_DOMAIN=example.org
- LDAP_ORGANISATION=Example Inc.
- LDAP_ADMIN_PASSWORD=admin
- LDAP_CONFIG_PASSWORD=config
- LDAP_READONLY_USER=true
- LDAP_READONLY_USER_USERNAME=readonly
- LDAP_READONLY_USER_PASSWORD=readonly
- LDAP_TLS=false
# - LDAP_TLS_CRT_FILENAME=ldap.crt
# - LDAP_TLS_KEY_FILENAME=ldap.key
# - LDAP_TLS_DH_PARAM_FILENAME=dhparam.pem
# - LDAP_TLS_CA_CRT_FILENAME=ca.crt
# lam:
# # 账号管理(管理员使用)
# image: ldapaccountmanager/lam:latest
# # restart: always
# ports:
# - "8100:80"
# environment:
# - TZ=Asia/Shanghai
ldapadmin:
# 另一个账号管理的工具
image: osixia/phpldapadmin:latest
# restart: always
ports:
- "8443:443"
environment:
- TZ=Asia/Shanghai
- PHPLDAPADMIN_LDAP_HOSTS=ldap
volumes:
- ldapadmin_data:/var/www/phpldapadmin
ssp:
# 自助密码服务(普通用户使用)
image: tiredofit/self-service-password:latest
restart: always
ports:
- "8200:80"
environment:
- TZ=Asia/Shanghai
- LDAP_SERVER=ldap://ldap
- LDAP_STARTTLS=false
- LDAP_BINDDN=cn=admin,dc=example,dc=org
- LDAP_BINDPASS=admin
- LDAP_BASE_SEARCH=dc=example,dc=org
- LDAP_LOGIN_ATTRIBUTE=uid
- LDAP_FULLNAME_ATTRIBUTE=cn
volumes:
ldap_config:
ldap_data:
#ldap_certs:
ldapadmin_data:
|
1. 服务可用性验证
管理员使用 ldapsearch 验证(需要安装 ldap-utils 包)
1
2
3
4
5
6
7
8
9
10
| ldapsearch -x -LLL -H ldap:/// -b dc=example,dc=org -D cn=admin,dc=example,dc=org -W dn
# -x: 使用简单认证方式
# -H: ldap url
# -b: searchbase 搜索路径
# -D: binddn ,可以理解为有权限的用户
# -W: 使用交互的方式输入密码。非交互方式使用 -w <password>
# 最后的 dn 表示只搜索(过滤) dn 属性
ldapsearch -x -LLL -H ldap:/// -b cn=config -D cn=admin,cn=config -W dn
# 参数解释同上。-b cn=config 表示搜索 config 的内容。config admin 的密码见 LDAP_CONFIG_PASSWORD 。
|
普通用户验证密码
1
2
3
4
5
| ldapsearch -x -LLL -H ldap:/// -b cn=test,dc=example,dc=org -D cn=test,dc=example,dc=org -W
# 参数解释同上。由于普通用户权限有限,所以 -b 只能看他自己,-b 范围太大时,会提供找不到对象。
ldapwhoami -x -H ldap:/// -D cn=test,dc=example,dc=org -W
# 另一个验证密码的方式。此命令不需要指定 searchbase ,更快捷,不过能获取的信息较少。
|
2. phpldapadmin 个性化配置
通过调整 phpldapadmin 的配置,可以做自定义设定。 参考
https://phpldapadmin.sourceforge.net/wiki/index.php/Config.php
修改 /var/www/phpldapadmin/config/config.php 文件
1
2
3
4
| # 先修改文件属性为可读写。每次容器启动之后,该文件都会被重置为只读。
chmod 600 /var/www/phpldapadmin/config/config.php
vi /var/www/phpldapadmin/config/config.php
|
自定义树的显示方式 : 在配置文件的末尾添加下列配置项
1
2
| // 数组里的显示方式列表,如果前一种方式里指定的属性不存在,则会尝试使用下一种显示方式。 原始默认值为 '%rdn'
$config->custom->appearance['tree_display_format'] = array('%uidNumber - %displayName (%rdn)', '%displayName (%rdn)', '%rdn');
|
自定义 uidNumber 的初始值 : 在配置文件的末尾添加下列配置项
1
2
| // uidNumber 从 10001 开始递增。 原始默认值为 1000 。
$servers->setValue('auto_number', 'min', array('uidNumber'=>10001, 'gidNumber'=>1000));
|