docker 部署 openldap
- docker-compose.yml
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
包)
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 。
普通用户验证密码
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 文件
# 先修改文件属性为可读写。每次容器启动之后,该文件都会被重置为只读。 chmod 600 /var/www/phpldapadmin/config/config.php vi /var/www/phpldapadmin/config/config.php
自定义树的显示方式 : 在配置文件的末尾添加下列配置项
// 数组里的显示方式列表,如果前一种方式里指定的属性不存在,则会尝试使用下一种显示方式。 原始默认值为 '%rdn' $config->custom->appearance['tree_display_format'] = array('%uidNumber - %displayName (%rdn)', '%displayName (%rdn)', '%rdn');
自定义 uidNumber 的初始值 : 在配置文件的末尾添加下列配置项
// uidNumber 从 10001 开始递增。 原始默认值为 1000 。 $servers->setValue('auto_number', 'min', array('uidNumber'=>10001, 'gidNumber'=>1000));