我正在使用 Debian Squeeze OpenLDAP。在哪里可以设置 ACL?是否可以执行对指令的访问ldapmodify
? Debian 中没有slapd.conf
文件,他们使用slapd.d
文件夹
答案1
从版本 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