我需要绑定到 OpenLDAP 服务器来验证用户身份,但我不希望这个低权限或“委派管理员”能够看到比严格必要的更多的属性。
如何使用白名单减少绑定用户可以看到的属性?哪些属性对于验证用户身份是必需的?
例如,这个特定的绑定用户不需要查看NTPassword
,我认为其他属性如主目录等。
这是我目前所做的:
我已禁用匿名绑定:
# disable anon bind dn: cn=config changetype: modify add: olcDisallows olcDisallows: bind_anon dn: cn=config changetype: modify add: olcRequires olcRequires: authc dn: olcDatabase={-1}frontend,cn=config changetype: modify add: olcRequires olcRequires: authc
我创建了一个“应用程序”OU 和一个“gitlab”用户:
# file: applications.ldif dn: ou=Applications,dc=example,dc=com objectclass: top objectClass: organizationalunit ou: Applications dn: cn=gitlab,ou=Applications,dc=example,dc=com cn: gitlab objectClass: simpleSecurityObject objectClass: organizationalRole userPassword: {CRYPT}.....
为了创建用户,我使用了 LDAP 管理员用户:
ldapadd -xvvv -f applications.ldif -D 'cn=admin,dc=example,dc=com' -W
为了限制“gitlab”权限,我尝试这样做:
# file: give-applications-access.ldif dn: cn=config changetype: modify # allow Applications (e.g. GitLab) access to userPassword access to dn.chidren="ou=People,dc=example,dc=com" attrs=userPassword by dn.exact="ou=Applications,dc=eaxmple,dc=com" read
然后我习惯
ldapmodify
应用以前的 LDIF:ldapmodify -xvvv -D 'cn=admin,dc=example,dc=com' -W -f give-applications-access.ldif
现在我可以成功地ou=People
从 gitlab验证用户身份。但是,如果我使用例如jxplorer
或用户ldapsearch
凭据gitlab
,我可以看到所有用户属性除了用户密码:
ldapsearch -h ldaps://ldap.example.com -p 636 -LLL -D 'cn=gitlab,ou=Applications,dc=example,dc=com' -s base -b "ou=People,dc=example,dc=com" -s sub -W "(objectclass=*)" | grep -i userpassword | wc -l
0
这是怎么回事?我猜 gitlab 正在使用它sambaNTPassword
进行身份验证。但我认为attrs=userPassword
它是只读的,现在它甚至不在属性中。
抱歉粘贴了所有命令 - 我将它们留在这里,希望其他人会觉得这很有用。我发现的大多数文档都描述了每个可用选项,但没有提供任何适用于最新版本的 OpenLDAP 的好示例;并且大多数可用示例涉及编辑 slapd.conf,而不是“新”数据库(cn=config)类型,因此很难理解什么是相关的。
更新-当前 ACL 是:
olcAccess: {0}to attrs=userPassword by self write by anonymous auth by * none
olcAccess: {1}to attrs=shadowLastChange by self write by * read
olcAccess: {2}to * by * read
我已经关注这个答案读取我例子中的 ACL {0}mdb
:ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config 'olcDatabase={1}mdb'