我想更改设置,使我的新 LDAP 服务器仅允许服务器用户读取条目,而不允许匿名用户读取条目。目前我的 olcAccess 如下所示:
olcAccess: {0} to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn="cn=admin,dc=example,dc=com" write by * none
olcAccess: {1} to * by self write by dn="cn=admin,dc=example,dc=com" write by * read
我尝试像这样改变它:
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn="cn=admin,dc=example,dc=com" write by * none
olcAccess: {1} to * by self write by dn="cn=admin,dc=exampme,dc=com" write by users read
但这根本无法让我访问。有人能帮我吗?
谢谢
更新:这是 userxxx 提到的更改后读取的日志
Sep 30 10:47:21 j16354 slapd[11805]: conn=1437 fd=28 ACCEPT from IP=87.149.169.6:64121 (IP=0.0.0.0:389)
Sep 30 10:47:21 j16354 slapd[11805]: conn=1437 op=0 do_bind: invalid dn (pbrechler)
Sep 30 10:47:21 j16354 slapd[11805]: conn=1437 op=0 RESULT tag=97 err=34 text=invalid DN
Sep 30 10:47:21 j16354 slapd[11805]: conn=1437 op=1 UNBIND
Sep 30 10:47:21 j16354 slapd[11805]: conn=1437 fd=28 closed
Sep 30 10:47:21 j16354 slapd[11805]: conn=1438 fd=28 ACCEPT from IP=87.149.169.6:64122 (IP=0.0.0.0:389)
Sep 30 10:47:21 j16354 slapd[11805]: conn=1438 op=0 do_bind: invalid dn (pbrechler)
Sep 30 10:47:21 j16354 slapd[11805]: conn=1438 op=0 RESULT tag=97 err=34 text=invalid DN
Sep 30 10:47:21 j16354 slapd[11805]: conn=1438 op=1 UNBIND
Sep 30 10:47:21 j16354 slapd[11805]: conn=1438 fd=28 closed
pbrechler 应该是一个有效用户,但没有系统用户(我们不需要它)管理员也不起作用
- 项目清单
答案1
olcAccess:{0}to attrs=userPassword,shadowLastChange 由自己写入 由匿名身份验证者 dn="cn=admin,dc=example,dc=com" 写入 由 * 无
olcAccess:{1}to attrs=uid,uidNumber,gidNumber 由 dn="cn=admin,dc=example,dc=com" 写入 由 * 读取
olcAccess:{2}to * 由自己写入 由 dn="cn=admin,dc=example,dc=com" 写入 由用户写入 由匿名身份验证读取
olc{1} ... by * read
可能取决于客户端机器(而不是用户)by * auth
的配置以及客户端机器如何/是否进行自我验证。pam_ldap
编辑为回应:
有效的 DNS 看起来像uid=username,ou=users,dc=sub,dc=domain,dc=tld
。
username
不是有效的 DNS 语法,而且从来都不是。
olcAccess
无法更改这一点。
(SASL/olcAuthzRegexp 可以做各种有趣的事情,但是没有提供足够的细节来了解系统是否使用 SASL。)
如果这台机器只使用 ldap 与自身通信,您可以将其限制为 localhost(或套接字,又名 ldapi,如果您的客户端软件支持它)。dn 命名规则仍然适用。
此外,如果将 dn="cn=admin,dc=example,dc=com" 定义为数据库的 rootdn,则无需将其列在该数据库的 olcAccess 中。dn 始终对其作为 rootdn 的数据库中的所有属性具有写访问权限。
答案2
尝试这个:
access to attrs=userPassword,shadowLastChange
by self write
by anonymous auth
by dn="cn=admin,dc=example,dc=com" write
by users read
by * none
access to *
by self write
by dn="cn=admin,dc=example,dc=com" write
by * read
但是你可能要考虑 2 个安全风险:第一个风险意味着access to attrs=userPassword,shadowLastChange by users read
用户可以读取影子密码并使用工具破解。第二个风险意味着access to * by self write
用户可以更改uidNumber
和/或gidNumber
成为 root。
因此我建议使用以下 ACL:
access to attrs=userPassword,shadowLastChange
by self write
by anonymous auth
by dn="cn=admin,dc=example,dc=com" write
by users none
access to *
by dn="cn=admin,dc=example,dc=com" write
by * read