1. 获取镜像

  1. # 查看可用的稳定版本
  2. sudo docker search openldap
  3. sudo docker pull osixia/openldap:1.3.0
  4. # LDAP客户端工具(LDAP Account Manager)
  5. sudo docker pull ldapaccountmanager/lam:7.2.RC1
  6. # LDAP客户端工具(phpLDAPadmin)
  7. sudo docker pull osixia/phpldapadmin
  8. sudo docker image ls |grep -E 'openldap|lam|phpldapadmin'

2. 创建数据卷

  1. sudo mkdir -p /data/ldap/data
  2. sudo mkdir -p /data/ldap/conf
  3. sudo chown -R 1000:1000 /data/ldap

3. 启动容器

1. OpenLDAP

LDAP

  1. # 636:加密端口(不可用);389:非加密端口
  2. sudo docker run -p 389:389 -p 636:636 --restart=always \
  3. --name openldap \
  4. --env LDAP_TLS=false \
  5. --env LDAP_TLS_VERIFY_CLIENT="never" \
  6. --env LDAP_ORGANISATION="bankcomm" \
  7. --env LDAP_DOMAIN="bankcomm.local" \
  8. --env LDAP_ADMIN_PASSWORD="123456" \
  9. --env LDAP_CONFIG_PASSWORD="123456" \
  10. -v /data/ldap/data:/var/lib/ldap \
  11. -v /data/ldap/conf:/etc/ldap/slapd.d \
  12. --detach osixia/openldap:1.3.0
  13. sudo docker start openldap
  14. sudo docker restart openldap
  15. sudo docker stop openldap
  16. sudo docker rm openldap
  • 参数说明

    • 端口:默认服务端口使用389端口。
    • LDAP_ORGANISATION:机构组织。
    • LDAP_DOMAIN:域。
    • LDAP_ADMIN_PASSWORD:管理员 (admin) 密码。
    • LDAP_CONFIG_PASSWORD:配置管理密码。
    • /etc/ldap/slapd.d:配置文件。
    • /var/lib/ldap:后端数据,默认为mdb。

      LDAPS

  • 目录准备 ```bash

    ldap数据及配置存储卷

    mkdir -p /data/ldap/data mkdir -p /data/ldap/conf

ldap证书

mkdir -p /data/ldap/certifates

CA证书

mkdir -p /etc/pki/CA mkdir -p /etc/pki/CA/newcerts

  1. - **证书准备(自签)**
  2. - **准备工作**
  3. ```bash
  4. cd /etc/pki/CA
  5. # 清理
  6. rm -rf /etc/pki/CA/*.*
  7. rm -rf /etc/pki/CA/*/*
  8. touch index.txt
  9. echo "01" > serial
  • tls配置更新

    1. vi /etc/pki/tls/openssl.cnf

    配置如下:

    1. [ policy_match ]
    2. countryName = optional
    3. stateOrProvinceName = optional
    4. organizationName = optional
  • 证书生成 ```bash

    生成自签名CA证书私钥

    openssl genrsa -out ca.key 2048

    生成自签名CA证书申请文件

    openssl req -new -subj “/C=CN/ST=GD/L=SZ/CN=bankcomm.local” -key ca.key -out ca.csr

    生成自签名CA证书

    openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt

生成自签证书私钥

openssl genrsa -out ldap.key 1024

生成自签证书申请文件(注意这里的Common Name必须要主机名或者ip)

openssl req -new -subj “/C=CN/ST=GD/L=SZ/CN=bankcomm.local” -key ldap.key -out ldap.csr

使用CA签名,生成自签证书文件

openssl ca -in ldap.csr -out ldap.crt -cert ca.crt -keyfile ca.key

  1. - **证书验证**
  2. ```bash
  3. # 验证自签证书文件
  4. openssl verify -CAfile ca.crt ldap.crt
  • 证书拷贝
    1. rm -rf /data/ldap/certifates/*
    2. cp /etc/pki/CA/ldap.crt /data/ldap/certifates/
    3. cp /etc/pki/CA/ldap.key /data/ldap/certifates/
    4. cp /etc/pki/CA/ca.crt /data/ldap/certifates/
  • 容器创建 ```bash

    目录清理

    rm -rf /data/ldap/data/ rm -rf /data/ldap/conf/

636:加密端口;389:非加密端口(不可用)

sudo docker run -p 389:389 -p 636:636 —restart=always \ —name openldap \ —hostname bankcomm.local \ —env LDAP_TLS_CRT_FILENAME=”ldap.crt” \ —env LDAP_TLS_KEY_FILENAME=”ldap.key” \ —env LDAP_TLS_CA_CRT_FILENAME=”ca.crt” \ —env LDAP_TLS_ENFORCE=”true” \ —env LDAP_TLS_VERIFY_CLIENT=”try” \ —env LDAP_ORGANISATION=”bankcomm” \ —env LDAP_DOMAIN=”bankcomm.local” \ —env LDAP_ADMIN_PASSWORD=”123456” \ —env LDAP_CONFIG_PASSWORD=”123456” \ -v /data/ldap/data:/var/lib/ldap \ -v /data/ldap/conf:/etc/ldap/slapd.d \ -v /data/ldap/certifates:/container/service/slapd/assets/certs \ —detach osixia/openldap:1.3.0 —copy-service —loglevel debug

sudo docker start openldap sudo docker restart openldap sudo docker stop openldap sudo docker rm openldap

  1. <a name="C2b0T"></a>
  2. ## 2. LDAP Account Manager
  3. ```bash
  4. sudo docker run -d --restart=always --name ldapaccountmanager -p 9880:80 \
  5. --link openldap:openldap \
  6. --env LDAP_DOMAIN=bankcomm.local \
  7. --env LAM_LANG=zh_CN \
  8. --env LDAP_SERVER=ldap://openldap:389 \
  9. --env LAM_PASSWORD=123456 \
  10. --detach ldapaccountmanager/lam:7.2.RC1
  11. sudo docker start ldapaccountmanager
  12. sudo docker restart ldapaccountmanager
  13. sudo docker stop ldapaccountmanager
  14. sudo docker rm ldapaccountmanager
  • 参数说明
    • LAM_LANG:语言。
    • LDAP_SERVER:Ldap服务器。
    • LAM_PASSWORD:lam密码,默认用户名lam,默认密码:lam。

      3. phpLDAPadmin

      ```bash sudo docker run -d —restart=always —name phpldapadmin -p 19999:80 \ —link openldap:openldap \ —name phpldapadmin \ —env PHPLDAPADMIN_HTTPS=false \ —env PHPLDAPADMIN_LDAP_HOSTS=openldap \ —detach osixia/phpldapadmin

sudo docker start phpldapadmin sudo docker restart phpldapadmin sudo docker stop phpldapadmin sudo docker rm phpldapadmin


- **参数说明**
   - **PHPLDAPADMIN_LDAP_HOSTS**:配置的Ldap地址,容器IP地址可通过“docker inspect -f "{{ .NetworkSettings.IPAddress }}" ${容器名称或ID}”获取。
   - **PHPLDAPADMIN_HTTPS**:false-配置不开启HTTPS,默认是true,如果开启HTTPS,需要配置443端口映射:-p 8443:443,并采用https访问。
<a name="sQFzy"></a>
# 4. 设置

- **防火墙开放端口(若防火墙关闭则无需下述操作)**
```bash
# 查看firewall的状态
sudo firewall-cmd --state
# 查看防火墙状态(RedHat7之前的版本,防火墙默认采用firewall)
sudo service iptables status
# 查看firewall服务状态
sudo systemctl status firewalld

# 开放端口(根据需要放行端口:389、636、9880、19999)
sudo firewall-cmd --zone=public --permanent --add-port=389/tcp
sudo firewall-cmd --zone=public --permanent --add-port=636/tcp
# 关闭端口
sudo firewall-cmd --remove-port=389/tcp --permanent
sudo firewall-cmd --remove-port=636/tcp --permanent
# 重新加载防火墙
sudo firewall-cmd --reload
# 查看防火墙端口开放情况
sudo firewall-cmd --list-all

5. 验证

  • LDAP账户信息说明

    • o:organization(组织 - 公司)。
    • ou:organization unit(组织单元 - 部门)。
    • c:countryName(国家)。
    • dc:domainComponent(域名)。
    • sn:suer name(真实名称)。
    • cn:common name(常用名称)。

      1. 容器验证

      # 进入终端
      sudo docker exec -it openldap /bin/bash
      sudo docker exec -it ldapaccountmanager /bin/bash
      sudo docker exec -it phpldapadmin /bin/bash
      # 查看日志
      sudo docker logs openldap
      sudo docker logs -f -t --tail=50 openldap
      sudo docker logs ldapaccountmanager
      sudo docker logs -f -t --tail=50 ldapaccountmanager
      sudo docker logs phpldapadmin
      sudo docker logs -f -t --tail=50 phpldapadmin
      # 查看LDAP目录信息
      docker exec openldap ldapwhoami -v -x -Z
      docker exec openldap ldapsearch -x -H ldap://bankcomm.local -b dc=bankcomm,dc=local -D "cn=admin,dc=bankcomm,dc=local" -w 123456 -ZZ
      docker exec openldap ldapsearch -x -H ldap://bankcomm.local:389 -b dc=bankcomm,dc=local -D "cn=admin,dc=bankcomm,dc=local" -w 123456 -ZZ
      docker exec openldap ldapsearch -x -H ldaps://bankcomm.local -b dc=bankcomm,dc=local -D "cn=admin,dc=bankcomm,dc=local" -w 123456 memberOf
      

      2. Web UI验证

  • LDAP Account Managerhttp://bankcomm.local:9880 (admin/${LDAP_ADMIN_PASSWORD})

  • phpLDAPadminhttp://bankcomm.local:19999 (cn=admin,dc=bankcomm,dc=local/${LDAP_ADMIN_PASSWORD})

    3. 客户端验证

    Ldap Admin是一个用于LDAP目录管理的免费客户端和管理工具。允许用户在LDAP服务器上浏览,搜索,修改,创建和删除对象。它还支持更复杂的操作,例如目录复制和在远程服务器之间移动,并扩展常用编辑功能以支持特定对象类型(例如组和帐户)。支持系统:Winndows&Linux,官网:http://www.ldapadmin.org。入口:LdapAdmin.exe(cn=admin,dc=bankcomm,dc=local/${LDAP_ADMIN_PASSWORD})。

    6. 测试账户准备

    以客户端工具为例(LdapAdmin.exe):
  1. 创建组织(OU:PeopleGroups)。
  2. 创建用户(People:gerrit001 ~ gerrit010)。
  3. 给用户设置密码(与用户名相同)。
  4. 给用户设置邮箱(${username}@bankcomm.local)。
    ########################### Create User ###########################
    # Account
    First name:gerrit
    Initials:
    Second name:001 ~ 010
    Display name:gerrit001 ~ gerrit010
    Username:gerrit001 ~ gerrit010
    Login shell:/bin/bash
    Home Directory:/home/users/gerrit001 ~ gerrit010
    
  • 权限分配 | 组名 | 角色 | 用户 | | —- | —- | —- | | pm组 | 项目经理 | gerrit001(Gerrit管理员)、gerrit002 | | dev组 | 开发人员 | gerrit003、gerrit004 | | cr组 | 代码审核人员 | gerrit001、gerrit005 | | cm组 | 配置管理人员 | gerrit006(Jenkins集成用户)、gerrit007 |

附录

LDAP: error code

错误码 描述
525 用户不存在
52e 密码或凭证无效
530 此时不允许登录
531 在此工作站上不允许登录
532 密码过期
533 账户禁用
701 账户过期
773 用户必须重置密码
775 用户账户锁定

参考

博客:利用Docker为自己打造一套OpenLDAP认证系统
https://www.jakehu.me/2020/ldap-docker/
博客园:CentOS7安装OpenLDAP服务配置SSL证书
https://www.cnblogs.com/alickblogers/p/14097530.html