Я использую openldap 2.4.40 и применил следующий ACL:
olcAccess: {0}to * by self write by dn="cn=Manager,dc=sample,dc=com" write by * read olcAccess: {1}to dn.children="ou=sysUsers,dc=sample,dc=com" attrs=userPassword,shadowLastChange,description,sshPublicKey by self write by dn="cn=Manager,dc=sample,dc=com" write by anonymous auth by * none
Я хочу изменить userPassword, shadowLastChange, description, sshPublicKey пользователем (sysUsers). Но это дает мне ошибку разрешения, не разрешает запись.
# slapacl -D '' -b 'uid=user1,ou=sysUsers,dc=sample,dc=com' authcDN: "" entry: read(=rscxd) children: read(=rscxd) gidNumber=1000: read(=rscxd) homeDirectory=/home/user1: read(=rscxd) : cn=user1: read(=rscxd) sshPublicKey=ssh-rsa AAAAB3Nza…cGWliPbw== root@sample.com: read(=rscxd) userPassword=****: read(=rscxd) description=test user1: read(=rscxd) : modifyTimestamp=20161025074434Z: read(=rscxd)
LDAP reponse: Insufficient access error number: 0x32 (LDAP_INSUFFICIENT_ACCESS) description: You do not have sufficient permissions to perform that operation.
Я попытался изменить описание пользователем uid = user1, ou = sysUsers, dc = sample, dc = com, но не смог.
uid = Manager, ou = sysUsers, dc = sample, dc = com может изменять.
Что я делаю не так? Я подозреваю, что проблема с ACL?
olcAccess: {0}to * by self write by dn="cn=Manager,dc=sample,dc=com" write by * read olcAccess: {1}to dn.children="ou=sysUsers,dc=sample,dc=com" attrs=userPassword,shadowLastChange,description,sshPublicKey by self write by dn="cn=Manager,dc=sample,dc=com" write by anonymous auth by * none
Прежде всего, последовательность ACL, которую вы указали, неверна. В этом случае все будет соответствовать первой директиве, поскольку в ней есть "*", что соответствует всему, и она никогда не перейдет ко второму правилу ACL.
Во-вторых, команда, которую вы использовали для проверки разрешений ACL, неверна. Вы использовали:
slapacl -D '' -b 'uid=user1,ou=sysUsers,dc=sample,dc=com'
Что неверно -D - это DN чья разрешения должны быть проверены, а -b - это baseDN к какие разрешения нужно проверить.
Итак, правильная команда должна проверять собственные разрешения:
slapacl -D 'uid=user1,ou=sysUsers,dc=sample,dc=com' -b 'uid=user1,ou=sysUsers,dc=sample,dc=com'
ИЗМЕНИТЬ ПОСЛЕ ВЫВОДА: ACL, который вы подали, был для dn: olcDatabase = {0} config, cn = config тогда как его следует применять для DN базы данных dn: olcDatabase = {2} bdb, cn = config
Я почти уверен, что вы пытаетесь изменить описание DN: "uid = Manager, ou = sysUsers, dc = sample, dc = com", что, конечно, согласно ACL, не сможет сделать ни один другой, кроме DN. : "uid = Manager, ou = sysUsers, dc = sample, dc = com" или DN: "cn = Manager, dc = sample, dc = com".
Надеюсь это поможет! Подтвердите ответ, отметив его как "помогший" или ответив, если да.
к. Анирудх Малхотра ответил спасибо.
Я попытался изменить ALC.
[root@evolable-ldap-01 cn=config]# cat olcDatabase\=\{0\}config.ldif # AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. # CRC32 57182ee5 dn: olcDatabase={0}config objectClass: olcDatabaseConfig olcDatabase: {0}config olcAddContentAcl: TRUE olcLastMod: TRUE olcMaxDerefDepth: 15 olcReadOnly: FALSE olcRootDN: cn=config olcSyncUseSubentry: FALSE olcMonitoring: FALSE structuralObjectClass: olcDatabaseConfig entryUUID: af419f18-0036-1035-8ba5-452a6aebab7f creatorsName: cn=config createTimestamp: 20151006052730Z olcAccess: {0}to dn.children="ou=sysUsers,dc=evolableasia,dc=net" attrs=userPassword,shadowLastChange,description,sshPublicKey by dn="uid=user1,ou=sysUsers,dc=sample,dc=com" write by self write by dn="cn=Manager,dc=sample,dc=com" write by * none olcAccess: {1}to * by self write by dn="cn=Manager,dc=sample,dc=com" write by anonymous auth by * read entryCSN: 20161026004145.362887Z#000000#000#000000 modifiersName: cn=manager,dc=sample,dc=com modifyTimestamp: 20161026004145Z
Но slapacl не изменился.
# slapacl -D '' -b 'uid=user1,ou=sysUsers,dc=sample,dc=com' authcDN: "uid=user1,ou=sysusers,dc=sample,dc=com" entry: read(=rscxd) children: read(=rscxd) gidNumber=1000: read(=rscxd) homeDirectory=/home/user1: read(=rscxd) : cn=user1: read(=rscxd) sshPublicKey=ssh-rsa AAAAB3Nza…cGWliPbw== root@sample.com: read(=rscxd) userPassword=****: read(=rscxd) description=test user1: read(=rscxd) : modifyTimestamp=20161025074434Z: read(=rscxd)