背景
最近在做Ldap单点登录工作,使用osixia/openLdap镜像,将ldap服务跑起来。接着配置 ACL,于是我熟练地去改/etc/openldap/slapd.access.conf文件,但当我进入容器却发现并没有这个文件(黑人问号)。没做过多的考虑,使用slapd -f 指定配置文件,按下回车后发现未生效。带着疑惑仔细看了看readme文档,发现了这么一句话
也就是说编辑slapd.access.conf文件无效了,让使用ldapmodifty 来修改,关键是配置ACl的ldif文件不会写啊。
由于片刻后决定先看看他自己怎么写的再模仿着写吧。折腾半天终于在/container/service/slapd/assets/config/bootstrap/ldif/02-security.ldif发现蛛丝马迹,这个文件就是初始配置文件。那就好办了仿照着改一下吧但当我打开后又犯了难。
dn: olcDatabase={1}{{ LDAP_BACKEND }},cn=config
changetype: modify
delete: olcAccess
-
add: olcAccess
olcAccess: to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by * break
olcAccess: to attrs=userPassword,shadowLastChange by self write by dn="cn=admin,{{ LDAP_BASE_DN }}" write by anonymous auth by * none
olcAccess: to * by self read by dn="cn=admin,{{ LDAP_BASE_DN }}" write by * none
这里面有变量,LDAP_BASE_DN 变量可以自己写,但LDAP_BACKEND 必须要知道他的值,没办法再看看readme吧。果不其然又被我找到了。
于是稍作修改用于验证
dn: olcDatabase={1}mdb,cn=config
changetype: modify
delete: olcAccess
-
add: olcAccess
olcAccess: to * by * read
修改好后执行
ldapmodify -Wx -D "cn=admin,cn=config" -H ldap://127.0.0.1 -f test.ldif
然后使用用普通用户登录后,发现可以看到其他用户(默认没有read权限,上面测试写了任何用户都有读权限),那就说明生效了。
具体步骤
- 进入容器
- 新建ldif文件
dn: olcDatabase={1}mdb,cn=config
changetype: modify
delete: olcAccess
-
add: olcAccess
olcAccess: #填写自己的规则
- 执行
ldapmodify -Wx -D "cn=admin,cn=config" -H ldap://127.0.0.1 -f test.ldif