ldapmodify 访问权限不足 (50)

ldapmodify 访问权限不足 (50)

我正在尝试在 openldap (slapd) 服务器中启用日志记录。因此我尝试执行:

$ ldapmodify -D cn=admin,dc=domain,dc=tld -W -H ldap:/// <<EOF
  > dn: cn=config
  > changetype:modify
  > replace: olcLogLevel
  > olcLogLevel: any
  > EOF
modifying entry "cn=config"
ldap_modify: Insufficient access (50)

这是我的 slapcat -n0 输出:

dn: cn=config
objectClass: olcGlobal
cn: config
olcArgsFile: /var/run/slapd/slapd.args
olcLogLevel: none
olcPidFile: /var/run/slapd/slapd.pid
olcToolThreads: 1
structuralObjectClass: olcGlobal
entryUUID: f2abd5ee-adb8-103b-8c18-6da3f145a1c2
creatorsName: cn=config
createTimestamp: 20210919171535Z
entryCSN: 20210919171535.786316Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20210919171535Z

dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_mdb
structuralObjectClass: olcModuleList
entryUUID: f2aca6cc-adb8-103b-8c20-6da3f145a1c2
creatorsName: cn=config
createTimestamp: 20210919171535Z
entryCSN: 20210919171535.791752Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20210919171535Z

dn: cn=schema,cn=config
objectClass: olcSchemaConfig
cn: schema
structuralObjectClass: olcSchemaConfig
entryUUID: f2abf484-adb8-103b-8c1b-6da3f145a1c2
creatorsName: cn=config
createTimestamp: 20210919171535Z
entryCSN: 20210919171535.787189Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20210919171535Z

dn: olcDatabase={-1}frontend,cn=config
objectClass: olcDatabaseConfig
objectClass: olcFrontendConfig
olcDatabase: {-1}frontend
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=extern
 al,cn=auth manage by * break
olcAccess: {1}to dn.exact="" by * read
olcAccess: {2}to dn.base="cn=Subschema" by * read
olcSizeLimit: 500
structuralObjectClass: olcDatabaseConfig
entryUUID: f2abdfee-adb8-103b-8c19-6da3f145a1c2
creatorsName: cn=config
createTimestamp: 20210919171535Z
entryCSN: 20210919171535.786661Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20210919171535Z

dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=extern
 al,cn=auth manage by * break
structuralObjectClass: olcDatabaseConfig
entryUUID: f2abede0-adb8-103b-8c1a-6da3f145a1c2
creatorsName: cn=config
createTimestamp: 20210919171535Z
entryCSN: 20210919171535.787019Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20210919171535Z

dn: olcDatabase={1}mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: {1}mdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=domain,dc=tld
olcAccess: {0}to attrs=userPassword by self write by anonymous auth by * non
 e
olcAccess: {1}to attrs=shadowLastChange by self write by * read
olcAccess: {2}to * by * read
olcLastMod: TRUE
olcRootDN: cn=admin,dc=domain,dc=tld
olcRootPW:: SOME_HASH_VALUE
olcDbCheckpoint: 512 30
olcDbIndex: objectClass eq
olcDbIndex: cn,uid eq
olcDbIndex: uidNumber,gidNumber eq
olcDbIndex: member,memberUid eq
olcDbMaxSize: 1073741824
structuralObjectClass: olcMdbConfig
entryUUID: f2accdf0-adb8-103b-8c21-6da3f145a1c2
creatorsName: cn=config
createTimestamp: 20210919171535Z
entryCSN: 20210919171535.792748Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20210919171535Z

我不知道问题出在哪里。帐户“admin”定义为 olcRootDN cn=admin,dc=domain,dc=tld。为什么我无法更改配置?

答案1

它被定义为 rootDN用于dc=domain,dc=tld数据库。但这不是您要修改的数据库 – 一个数据库的 rootDN 对其他数据库没有特殊权限。

您正在尝试更改cn=config数据库 - 它没有指定自定义 rootDN,因此“cn = config”将是默认的 rootDN ...但是既没有允许直接对 rootDN 进行身份验证的 olcRootPW,也没有任何允许不同 DN 对其进行授权的身份验证策略。

但是,那访问列表cn=config 数据库的 (olcAccess) 授予对 DN 的完全不受限制的访问权限gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth,该 DN 是用于以下客户端的特殊 DN:1) 通过 Unix 套接字连接和 2) 使用 SASL EXTERNAL 身份验证。

简而言之,没有 rootDN,但配置授予本地 uid 0 完全访问权限。

要实际使用此访问权限,您需要以 root 身份运行 ldapmodify,然后指定ldapi:///URL 和-Y EXTERNAL身份验证方法:

$ sudo ldapmodify -H ldapi:/// -Y EXTERNAL <<EOF
dn: cn=config
replace: olcLogLevel
olcLogLevel: any
EOF

(这有点像 MariaDB 现在没有 root 密码,而是允许sudo mariadb无需密码连接。)

您还可以使用它来向您喜欢的任何其他 DN 授予 cn=config 修改权限(通过相应地编辑 {0}config 数据库的 olcAccess)。

相关内容