带有 ldapmodify 和 .ldif 文件的 LDAP ACL 仅限大用户访问

带有 ldapmodify 和 .ldif 文件的 LDAP ACL 仅限大用户访问

我想更改设置,使我的新 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. 项目清单

答案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

相关内容