Назад | Перейти на главную страницу

как самостоятельно изменить attrs в openldap

Я использую 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)