如何在 OpenLDAP 中设置访问控制列表 ACL

如何在 OpenLDAP 中设置访问控制列表 ACL

我正在使用 Debian Squeeze OpenLDAP。在哪里可以设置 ACL?是否可以执行对指令的访问ldapmodify? Debian 中没有slapd.conf文件,他们使用slapd.d文件夹

答案1

Debian 维基:

从版本 2.4.23-3 开始,OpenLDAP 的配置默认已更改为 /etc/ldap/slapd.d。

因此,OpenLDAP 允许通过以下方式动态配置自身'cn=配置'树。

您可以在中列出 DNcn=配置并看到这样的东西:

sudo ldapsearch  -Y EXTERNAL -H ldapi:/// -b cn=config dn
...
# {1}hdb, config
dn: olcDatabase={1}hdb,cn=config
...

sudo ldapsearch  -Y EXTERNAL -H ldapi:/// -b cn=config 'olcDatabase={1}hdb'

# {1}hdb, config
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=nodomain
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymou
 s auth by dn="cn=admin,dc=nodomain" write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by self write by dn="cn=admin,dc=nodomain" write by * read
olcLastMod: TRUE
olcRootDN: cn=admin,dc=nodomain
olcRootPW: {SSHA}_skip_
olcDbCheckpoint: 512 30
olcDbConfig: {0}set_cachesize 0 2097152 0
olcDbConfig: {1}set_lk_max_objects 1500
olcDbConfig: {2}set_lk_max_locks 1500
olcDbConfig: {3}set_lk_max_lockers 1500
olcDbIndex: objectClass eq

属性olc访问就是你所需要的。

让我们向数据库添加新的 ACL 规则dc=无域

创建 ldif 文件

dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {3}to dn.base="cn=test,dc=nodomain" by * read

申请:

sudo ldapmodify  -Y EXTERNAL -H ldapi:/// -f /tmp/test.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}hdb,cn=config"

瞧:

sudo ldapsearch  -Y EXTERNAL -H ldapi:/// -b cn=config 'olcDatabase={1}hdb'
...
olcAccess: {3}to dn.base="cn=test,dc=nodomain" by * read

答案2

程序与以下程序非常相似更改我在另一个问题中描述的密码

也有两种方法。

1) 编辑配置文件。您需要找到后端的配置文件。每个ACL 被定义为olcAccess属性的值。 ACL 的语法与“普通”slapd.conf 文件中的相同,但在每个 ACL 的开头,您必须插入定义 ACL 在 ACL 队列中的“位置”的数字以进行检查。

ACL 条目示例如下所示:

olcAccess: {0}to * by anonymous write

2)第二种方式:使用config数据库。如果config启用了数据库,您可以使用 LDAP 客户端绑定到它并编辑olcAccess每个后端的值。

答案3

的全部内容slapd.d在运行时连接在一起以生成一种伪slapd.conf文件(该描述并不完全准确,但我更试图理解这个概念)。这是 Debian 中的常见做法,而且我个人在很多情况下非常喜欢它。

slapd.d在named acl(或类似的,如果其他文件有的话,您将需要包含编号前缀)中创建一个新文件,并将您的ACL条目放入其中,然后重新启动slapd

应该可以了。* 但请注意,slapd 的 ACL 结构对于外行来说可能很困难。很容易做错误和/或无意的事情。

*前提是没有任何顺序限制(我不太了解 slapd,所以你只能靠自己了)。

答案4

创建任何你想要的用户:

# vim ro_user_desc.ldif

dn: cn=ro_admin,dc=example,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
userPassword: {SSHA}o3pSzVM3HXqUY6R2VHGJkJEWlwLOUH1N

userPassword您可以从 获取哈希值slappasswd -s your_plaintext_pass。创建该用户:

# ldapadd -x -W -D "cn=admin,dc=example,dc=com" -f ro_user_desc.ldif

为其分配所需的角色:

# vim ro_access.ldif

dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {3}to dn.base="dc=example,dc=com" by dn.exact="cn=ro_admin,dc=example,dc=com" read

dc=example,dc=com我们为上面创建的用户启用了对树完整树的列表(只读)访问。dn: olcDatabase={1}mdb,cn=config更好地找到使用的正确地址@sOliver 回答。但请记住,此示例针对 MDB OpenLdap 基础,在 HDB 等情况下可能会有所不同。

最后应用一下:

# ldapmodify -Y EXTERNAL -H ldapi:/// -f ro_access.ldif

相关内容