OpenLDAP
- openldap/openldap
- 支持 SQL 后端 - PostgreSQL
- 使用场景 - 用户联邦, 数据存储
- Linux PAM
- SSH PAM
- Keycloak user federation
- Kerberos database
- PowerDNS database
- Serive user - Gitea, Gitlab, Nextcloud
- 参考
- 文档
- archlinux OpenLDAP
- leenooks/phpLDAPadmin
- OpenLDAP multi-tenant like ACL
- osixia/docker-openldap
- jp-gouin/helm-openldap
- ltb-project/self-service-password
- GPLv3, PHP
- change and reset password in an LDAP
警告
- sql backend 需要自行维护 表 与 ObjectClass 的关系
- 并不是直接可用 - 初期有一定工作量
- 不支持 reload - 直接重启
# macOS
/usr/libexec/slapd -VVV # 自带 v2.4
brew install openldap
export PATH="/usr/local/opt/openldap/bin:$PATH"
export PATH="/usr/local/opt/openldap/sbin:$PATH"
/usr/local/opt/openldap/libexec/slapd -VVV # 最新版 v2.6
# AlpineLinux
apk add openldap
# 添加后端 - 生产用 sql 测试用 mdb
apk add openldap-back-sql openldap-back-mdb
# 添加 overlay - openldap-overlay-all 为所有
apk add openldap-overlay-{accesslog,memberof,otp}
apk add openldap-passwd-{pbkdf2,argon2,sha2}
# /etc/openldap/slapd.conf
service slapd checkconfig
Note
- overlay
- 前后端之间的中间层
- 作为扩展添加其他功能
- 配置
- /etc/openldap/slapd.conf
- /etc/openldap/slapd.ldif
- 后端 - bdb, dnssrv, hdb, ldap, mdb, meta, monitor, null, passwd, relay, shell, sock, sql
cli | desc |
---|---|
SBIN | |
slapacl | 校验 slapd 目录权限 |
slapadd | |
slapauth | |
slapcat | |
slapd | 独立 LDAP 守护进程 |
slapdn | |
slapindex | |
slappasswd | |
slapschema | |
slaptest | |
slapmodify | |
BIN | |
ldapadd | |
ldapdelete | |
ldapmodify | |
ldappasswd | |
ldapurl | |
ldapwhoami | |
ldapcompare | |
ldapexop | |
ldapmodrdn | |
ldapsearch | |
ldapvc | |
MISC | |
lloadd | 负载均衡代理服务 |
slapd | for |
---|---|
-h URLs | 监听 |
-u user | |
-g group | |
-r dir | chroot |
-c cookie | cookie for syncrepl |
-o option=value | |
-d debug-level | |
-f slapd.conf | |
-F slapd.d | ldif 配置目录 |
-T | 工具 |
- -T - acl, a/add, auth, c/cat, d/dn, i/index, p/passwd, s/schema, t/test
- -h
ldap:/// ldaps:/// ldapi:///
- ldap - 默认 389
- ldaps - 默认 636 - LDAP over TLS
- ldapi - LDAP over IPC
- x-mod 可指定权限
- PLDAP, PLDAPS - HAProxy proxy protocol version 2
- -c cookie
- rid, sid, csn
- -o option
- slp
slapd -d ? # 显示所有的 debug level
slapd -Tt -f slapd.conf # 校验配置 - slaptest
slapd -f slapd.conf -d 255 # 启动
chown -R ldap:ldap slapd.d # 确保权限正确
# 存在 slapd.d/cn=config.ldif
slapd -F slapd.d -u ldap -g ldap # 推荐使用 ldif 配置
# 配置转换
slaptest -f slapd.conf -F slapd.d
slapcat -F /usr/local/etc/openldap/slapd.d -n0 -l extracted_config.ldif
slapadd -F /usr/local/etc/openldap/slapd.d -l updated_config.ldif
# -b DN
# -U authcID
# [attr[/access][:value]]
# 检测 wener 用户是否能读取 dc=wener,dc=me 的 name 属性
slapacl -f slapd.conf -v -U wener -b "dc=wener,dc=me" "name/read:wener"