如何保护 LDAP

如何保护 LDAP

不确定这是否更多地属于 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 来保护通信渠道。

相关内容