不确定这是否更多地属于 serverfault......
背景:
我在我的服务器(webmail 等)上使用 openldap 和 pam/nss/ldap 进行身份验证。
我的文件运行良好:
/etc/openldap/slapd.conf:
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
allow bind_v2
pidfile /var/run/slapd/slapd.pid
argsfile /var/run/slapd.args
loglevel 0
access to attrs=userPassword,shadowLastChange
by dn="cn=Admin,dc=MYDOMAIN,dc=com" write
by anonymous auth
by self write
by * none
access to *
by dn="cn=Admin,dc=MYDOMAIN,dc=com" write
by * read
database bdb
suffix dc=MYDOMAIN,dc=com
rootdn cn=Manager,dc=MYDOMAIN,dc=com
directory /var/lib/ldap
index objectClass eq,pres
index ou,cn,mail,surname,givenname eq,pres,sub
index uidNumber,gidNumber,loginShell eq,pres
index uid,memberUid eq,pres,sub
index nisMapName,nisMapEntry eq,pres,sub
但是当我将访问权限更改为:
access to *
by self write
by users read
by anonymous auth
access to attrs=userPassword
by self write
by anonymous auth
by * none
我无法再登录了。我该如何编写代码才能让我仍然可以登录,但世界上的每个人都没有读写权限?
答案1
我认为如果你这样做:
access to attrs=userPassword,shadowLastChange
by dn="cn=Admin,dc=MYDOMAIN,dc=com" write
by anonymous auth
by self write
by * none
access to *
by dn="cn=Admin,dc=MYDOMAIN,dc=com" write
by self write
by anonymous auth
by users read
by * none
你会得到你想要的。
答案2
我发现至少对于 Debian 上的 Samba,你必须授予 * 对登录帐户的几个属性的读取权限:
access to attrs=userPassword
by anonymous auth
by * none
access to dn.subtree="ou=People,dc=MYDOMAIN,dc=com"
attrs=dc,cn,uid,gecos,entry
by * read
access to *
by dn="cn=admin,dc=MYDOMAIN,dc=com" write
by peername.ip=127.0.0.1 read
by * none
dn.subtree="ou=..." 增加了额外的安全性,因此您只会向匿名者公开真正不可避免的内容。这意味着匿名者无法搜索/浏览此子树,顺便说一句,他/她只能“猜测”正确的 dc、cn,无论您的应用/服务需要什么。
如果您制作所有使用管理员帐户登录的应用程序/服务,或者您希望应用程序具有只读访问权限,则可以为其创建一个特殊的 dn,则应该可以避免 peername.ip=127...,然后您可以跳过 peername.ip 节。
答案3
您的问题可能出在顺序上。您似乎把综合条目放在了顶部,而不是它应该在的底部。
此外,如果您对安全性感兴趣,您将需要使用 TLS 或 SSL 来保护通信渠道。