跳转至

LLDAP

项目 内容
部署位置 jp-2
依赖 DockerCaddy签发的 TLS 证书
使用方 SSSD

数据保存在 /srv/docker/lldap/data

搭建

准备目录和密钥

创建项目和数据目录,并安装初始化时使用的 LDAP 客户端:

1
2
3
4
sudo apt-get update
sudo apt-get install ldap-utils openssl
sudo install -d -o root -g root -m 0755 \
  /srv/docker/lldap /srv/docker/lldap/data

JWT secret、key seed 和管理员密码分别生成,不重复使用同一个值:

1
2
3
openssl rand -hex 32
openssl rand -hex 32
openssl rand -base64 32

将三次输出写入下面的环境文件,然后限制读取权限:

/srv/docker/lldap/lldap.env
1
2
3
4
5
6
7
UID=0
GID=0
TZ=Asia/Shanghai
LLDAP_JWT_SECRET=REPLACE_WITH_FIRST_RANDOM_HEX
LLDAP_KEY_SEED=REPLACE_WITH_SECOND_RANDOM_HEX
LLDAP_LDAP_BASE_DN=dc=lab,dc=tiankaima,dc=cn
LLDAP_LDAP_USER_PASS=REPLACE_WITH_RANDOM_PASSWORD
1
2
3
sudo chown root:root /srv/docker/lldap/lldap.env
sudo chmod 0600 /srv/docker/lldap/lldap.env
stat -c '%a %U:%G' /srv/docker/lldap/lldap.env

先启动 Caddy,再检查 LLDAP 使用的证书文件:

sudo test -r /srv/docker/caddy/data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/lldap.lab.tiankaima.cn/lldap.lab.tiankaima.cn.crt
sudo test -r /srv/docker/caddy/data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/lldap.lab.tiankaima.cn/lldap.lab.tiankaima.cn.key

启动 LLDAP

/srv/docker/lldap/docker-compose.yml
services:
  lldap:
    image: lldap/lldap:stable@sha256:9e605a66c02514bfcffd1b67cafb1e98d50992216bb2871d7ae44622047dd09d
    container_name: lldap
    restart: always
    env_file:
      - /srv/docker/lldap/lldap.env
    ports:
      - "0.0.0.0:636:6360"
      - "[::]:636:6360"
      - "127.0.0.1:17170:17170"
    volumes:
      - /srv/docker/lldap/data:/data
      - /srv/docker/caddy/data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/lldap.lab.tiankaima.cn:/certs:ro
    environment:
      - LLDAP_LDAPS_OPTIONS__ENABLED=true
      - LLDAP_LDAPS_OPTIONS__CERT_FILE=/certs/lldap.lab.tiankaima.cn.crt
      - LLDAP_LDAPS_OPTIONS__KEY_FILE=/certs/lldap.lab.tiankaima.cn.key

启动后检查 Compose、容器和 LDAPS:

1
2
3
4
5
6
7
cd /srv/docker/lldap
docker compose config --quiet
docker compose up -d
docker compose ps
openssl s_client -verify_return_error \
  -connect lldap.lab.tiankaima.cn:636 \
  -servername lldap.lab.tiankaima.cn </dev/null

初始化

创建 POSIX 用户时设置 uidNumbergidNumber、home、shell 和 SSH 公钥。创建 server_userserver_admin 组。UID/GID 在所有主机上保持一致。

初始化后查询目录中的用户和组:

1
2
3
4
5
ldapwhoami -x -H ldaps://lldap.lab.tiankaima.cn \
  -D READ_ONLY_BIND_DN -W
ldapsearch -x -H ldaps://lldap.lab.tiankaima.cn \
  -D READ_ONLY_BIND_DN -W \
  -b dc=lab,dc=tiankaima,dc=cn '(objectClass=*)' dn

维护

LLDAP 无法访问

LLDAP 故障会影响 SSSD 用户解析、新 SSH 会话和 sudo 组判断。维护前保留 root 公钥登录 会话,并检查各主机的 SSSD 缓存。

1
2
3
docker compose -f /srv/docker/lldap/docker-compose.yml ps
docker logs --tail=100 lldap
openssl s_client -connect lldap.lab.tiankaima.cn:636 </dev/null

UID、GID 或组权限错误

  • 已用于文件所有权的 UID/GID 保持不变
  • 删除用户前检查文件所有权、Slurm association 和运行中的作业
  • server_admin 只授予服务器管理员
  • 修改 SSH 公钥后,在 SSSD 客户端查询新公钥

升级或迁移 LLDAP

升级前停止写入,备份 /srv/docker/lldap/data 和环境文件,并记录镜像摘要。恢复测试 使用隔离网络。

评论