1. 获取镜像
# 查看可用的稳定版本
sudo docker search openldap
sudo docker pull osixia/openldap:1.3.0
# LDAP客户端工具(LDAP Account Manager)
sudo docker pull ldapaccountmanager/lam:7.2.RC1
# LDAP客户端工具(phpLDAPadmin)
sudo docker pull osixia/phpldapadmin
sudo docker image ls |grep -E 'openldap|lam|phpldapadmin'
2. 创建数据卷
sudo mkdir -p /data/ldap/data
sudo mkdir -p /data/ldap/conf
sudo chown -R 1000:1000 /data/ldap
3. 启动容器
1. OpenLDAP
LDAP
# 636:加密端口(不可用);389:非加密端口
sudo docker run -p 389:389 -p 636:636 --restart=always \
--name openldap \
--env LDAP_TLS=false \
--env LDAP_TLS_VERIFY_CLIENT="never" \
--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 \
--detach osixia/openldap:1.3.0
sudo docker start openldap
sudo docker restart openldap
sudo docker stop openldap
sudo docker rm openldap
ldap证书
mkdir -p /data/ldap/certifates
CA证书
mkdir -p /etc/pki/CA mkdir -p /etc/pki/CA/newcerts
- **证书准备(自签)**
- **准备工作**
```bash
cd /etc/pki/CA
# 清理
rm -rf /etc/pki/CA/*.*
rm -rf /etc/pki/CA/*/*
touch index.txt
echo "01" > serial
tls配置更新
vi /etc/pki/tls/openssl.cnf
配置如下:
[ policy_match ]
countryName = optional
stateOrProvinceName = optional
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
- **证书验证**
```bash
# 验证自签证书文件
openssl verify -CAfile ca.crt ldap.crt
- 证书拷贝
rm -rf /data/ldap/certifates/*
cp /etc/pki/CA/ldap.crt /data/ldap/certifates/
cp /etc/pki/CA/ldap.key /data/ldap/certifates/
cp /etc/pki/CA/ca.crt /data/ldap/certifates/
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
<a name="C2b0T"></a>
## 2. LDAP Account Manager
```bash
sudo docker run -d --restart=always --name ldapaccountmanager -p 9880:80 \
--link openldap:openldap \
--env LDAP_DOMAIN=bankcomm.local \
--env LAM_LANG=zh_CN \
--env LDAP_SERVER=ldap://openldap:389 \
--env LAM_PASSWORD=123456 \
--detach ldapaccountmanager/lam:7.2.RC1
sudo docker start ldapaccountmanager
sudo docker restart ldapaccountmanager
sudo docker stop ldapaccountmanager
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 Manager:http://bankcomm.local:9880 (admin/${LDAP_ADMIN_PASSWORD})
- phpLDAPadmin:http://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):
- 创建组织(OU:People、Groups)。
- 创建用户(People:gerrit001 ~ gerrit010)。
- 给用户设置密码(与用户名相同)。
- 给用户设置邮箱(${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