目录

docker应用-容器化部署openldap

Docker composer 容器化部署 openldap.

动机

我们目前还没有统一的账号认证系统,目前先用openldap搭建一套,后面如果需要用oauth2或者oidc认证再考虑去怎么替换,先把认证体系搭起来先。

部署步骤

创建以下目录

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# docker compose 文件目录
/data/servers/openldap
 
#持久化数据
/data1/storage/openldap/ldap
 
/data1/storage/openldap/slapd.d
 
# ssl证书,目前没用到
/data1/storage/openldap/certs

docker-compose.yml

openldap 就是服务主体

phpldapadmin ui管理界面

self-service-password 自助改密

 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
services:
  openldap:
    image: 192.168.2.221:80/devops/openldap:1.5.0
    container_name: openldap
    restart: always
    environment:
      LDAP_LOG_LEVEL: "256"
      LDAP_ORGANISATION: "yourorg"  
      LDAP_DOMAIN: "yourorg.com.cn"    
      LDAP_BASE_DN: "dc=yourorg,dc=com,dc=cn"   
      LDAP_ADMIN_PASSWORD: "xxx"  
      LDAP_CONFIG_PASSWORD: "xxx"
      LDAP_READONLY_USER: "false"
      LDAP_RFC2307BIS_SCHEMA: "false"
      LDAP_BACKEND: "mdb"
      LDAP_REPLICATION: "false"
      KEEP_EXISTING_CONFIG: "false"
      LDAP_REMOVE_CONFIG_AFTER_SETUP: "true"
    tty: true
    stdin_open: true
    volumes:
      - /data1/storage/openldap/ldap:/var/lib/ldap
      - /data1/storage/openldap/slapd.d:/etc/ldap/slapd.d
      - /data1/storage/openldap/certs:/container/service/lapd/assets/certs
    ports:
      - "389:389"
      - "636:636"
    hostname: "ldap-server"
  phpldapadmin:
    image: 192.168.2.221:80/devops/phpldapadmin:latest
    container_name: phpldapadmin
    restart: always
    environment:
      PHPLDAPADMIN_LDAP_HOSTS: "192.168.2.205" 
      PHPLDAPADMIN_HTTPS: "false"
    ports:
      - "50081:80"
    depends_on:
      - openldap
  self-service-password:
    container_name: self-service-password
    image: tiredofit/self-service-password:latest
    restart: always
    ports:
      - "50080:80"
    environment:
      - LDAP_SERVER=ldap://openldap:389
      - LDAP_BINDDN=cn=admin,dc=yourorg,dc=com,dc=cn 
      - LDAP_BINDPASS=xxx
      - LDAP_BASE_SEARCH=dc=yourorg,dc=com,dc=cn
      - MAIL_FROM=smtp.163.com
      - MAIL_FROM_NAME=账号自助服务平台
      - SMTP_DEBUG=0
      - SMTP_HOST=smtp.163.com
      - SMTP_USER=[email protected]
      - SMTP_PASS=xxx
      - SMTP_PORT=465
      - SMTP_SECURE_TYPE=ssl
      - SMTP_AUTH_ON=true
      - NOTIFY_ON_CHANGE=true
    volumes:
      - /etc/localtime:/etc/localtime
      - /data1/storage/self-service-password/htdocs:/www/ssp
      - /data1/storage/self-service-password/logs:/www/logs

ldap管理

创建用户组有2种方式:

  • Posixgroup用户组

  • GroupOfUniqueNames用户组

第一种比较简单,比较适合一些轻量的配置,能满足大部分场景。

第二种相对复杂一点,对于 jira、confluence 或者 rancher 等这种就不太适合用第一种。

登录 phpldapadmin

用户:cn=admin,dc=yourorg,dc=com,dc=cn

为了方便以后的管理,目录树结构我设置为如下,groups 和 users ,匹配用户和组的查询语句直接就去对应的 ou 里面去查找,方便快捷。

/docker%E5%BA%94%E7%94%A8-%E5%AE%B9%E5%99%A8%E5%8C%96%E9%83%A8%E7%BD%B2openldap/webui-1.png
目录结构

PosixGroup

在对应的目录下,选择 Create a child entry –> Generic: Posix Group –> 填写组的名字,提交即可 。

选择该组,点击 Add new attribute 添加属性,选择 memberUid ,将用户加入到 memberUid ,这种用户组,能满足大部分场景。

GroupOfUniqueNames

在对应的目录下,选择 Create a child entry –> Default –> 选 groupOfUniqueNames –> 如下,只填前面 3 项,其他默认即可 。

/docker%E5%BA%94%E7%94%A8-%E5%AE%B9%E5%99%A8%E5%8C%96%E9%83%A8%E7%BD%B2openldap/group-1.png
创建组

如果想添加新的成员,如下即可。

/docker%E5%BA%94%E7%94%A8-%E5%AE%B9%E5%99%A8%E5%8C%96%E9%83%A8%E7%BD%B2openldap/group-2.png
添加成员

最后

为什么记录这个,是因为我之前没有完整部署过一套ldap,很多东西都不知道,比如上面的2种组,在对接 rancher 和 confluence 的时候,就经常各种问题,经查资料后得知是使用 GroupOfUniqueNames 这种方式后,很快就把问题解决了。

参考文档:

https://blog.csdn.net/weixin_44729138/article/details/135174020

https://cloud.tencent.com/developer/article/2303220