public:docker:app:openldap

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:

管理员使用 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 ,更快捷,不过能获取的信息较少。

通过调整 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));

  • 最后更改: 2023/08/15 01:16
  • 由 Jinkin Liu