我正在尝试遵循几个关于设置根 LDAP 密码的教程(我们以前的系统管理员离开了......突然),它们都或多或少地说了同样的事情:
...但在第一步卡住了。这似乎很糟糕:
# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
No such object (32)
Run Code Online (Sandbox Code Playgroud)
到目前为止我尝试过的:
我可以通过从 slapd-config 文件中挖掘数据来定位查询要检索的数据:
# find /etc/ldap/slapd.d -type f -exec grep Root {} +
/etc/ldap/slapd.d/cn=config/olcDatabase={0}config.ldif:olcRootDN: cn=admin,cn=config
/etc/ldap/slapd.d/cn=config/olcDatabase={0}config.ldif:olcRootPW: {SSHA}[xxxxxx hash redacted xxxxxx]
/etc/ldap/slapd.d/cn=config/olcDatabase={1}hdb.ldif:olcRootDN: cn=admin,dc=example,dc=com
/etc/ldap/slapd.d/cn=config/olcDatabase={1}hdb.ldif:olcRootPW: {SSHA}[xxxxxx hash redacted xxxxxx]
Run Code Online (Sandbox Code Playgroud)
并确认 slapd 理论上设置为从这些文件中读取:
# ps -ef | grep slapd
openldap 2244 1 0 Oct26 ? 00:00:16 /usr/sbin/slapd -h ldap:/// ldapi:/// ldaps:/// -g openldap -u openldap -F /etc/ldap/slapd.d
Run Code Online (Sandbox Code Playgroud)
当我打开 ACL 日志记录(并从命令行运行;从 init.d 打开日志记录会使 slapd 在启动时挂起)我得到这个:
5bdb2ef2 => access_allowed: search access to "cn=config" "entry" requested
5bdb2ef2 => acl_get: [1] attr entry
5bdb2ef2 => acl_mask: access to entry "cn=config", attr "entry" requested
5bdb2ef2 => acl_mask: to all values by "gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth", (=0)
5bdb2ef2 <= check a_dn_pat: *
5bdb2ef2 <= acl_mask: [1] applying none(=0) (stop)
5bdb2ef2 <= acl_mask: [1] mask: none(=0)
5bdb2ef2 => slap_access_allowed: search access denied by none(=0)
5bdb2ef2 => access_allowed: no more rules
Run Code Online (Sandbox Code Playgroud)
想法?
我自己偶然发现了这个问题,但对接受的答案并不满意,因为它指出了问题的原因,但在提供有关如何解决它的实际说明方面非常有限。所以我一直在寻找并偶然发现这个问题。
我喜欢使用这种 SASL/EXTERNAL 方法,因为我正在尝试创建一个 docker 容器,正确设置 slapd 是我意图的一部分。问题是:如何在cn=config. cn=config当cn=config使用 option 选择的配置文件夹中不存在时,容器在第一次启动时将一些初始 slapd.conf 文件转换为-F。因此,必须有某种方法可以根据需要cn=config设置权限。
使用rootDN似乎很奇怪,因为它是在不同数据库的范围内配置的,并且根据之前的结果cn=config配置仍然绑定到不同的数据库。
此外cn=config配置为向none访问数据库中任何内容的每个人授予权限cn=config。检查文件/your/config/dir/cn=config/olcDatabase={0}config.ldif:
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 e01f7658
dn: olcDatabase={0}config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to * by * none
olcAddContentAcl: TRUE
olcLastMod: TRUE
olcMaxDerefDepth: 15
olcReadOnly: FALSE
olcRootDN: cn=config
olcSyncUseSubentry: FALSE
olcMonitoring: FALSE
structuralObjectClass: olcDatabaseConfig
entryUUID: a85462ad-0102-456d-a2d7-e6d082b7e613
creatorsName: cn=config
createTimestamp: 20190429143842Z
entryCSN: 20190429143842.339724Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20190429143842Z
Run Code Online (Sandbox Code Playgroud)
它清楚地说明了olcAccess: {0}to * by * none所以我很确定使用rootDN也无济于事。
在现有的 LDAP 服务器中,应用了不同的访问规则:
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external
,cn=auth manage by * break
Run Code Online (Sandbox Code Playgroud)
所以,这就是我需要的!
从 slapd.conf 转换为cn=configslapd 时,其工具接受生成的数据库的部分配置。olcDatabase={0}config是名为 的数据库的结果 DN config。因此,在您的文件中为该数据库添加配置。附加到我的 slapd.conf 文件末尾的以下摘录取自之前链接的问题:
database config
access to *
by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
by * read
Run Code Online (Sandbox Code Playgroud)
不要错过删除任何现有配置文件夹,以便更新后的 slapd.conf 文件将cn=config再次转换为。
在许多现代 Linux 系统上,当安装 openldap-server/slapd 时,由SASL/EXTERNALas标识的 rootgidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth要么是rootDN要么具有权限。manager
对于您现有的安装,目前情况并非如此。
如果您知道各个 rootDN 的密码,请使用这些密码。否则,请将您的 rootDN(或其密码)替换为您可以使用的内容。您必须在 LDAP 之外通过编辑/etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif或等效内容并重新启动 slapd 来完成此操作。
| 归档时间: |
|
| 查看次数: |
3515 次 |
| 最近记录: |