Автор Тема: Доступ к userpassword[РЕШЕНО]  (Прочитано 43076 раз)

andr

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Доступ к userpassword[РЕШЕНО]
« : 24 Июнь 2014, 18:26:06 »
Здравствуйте!
Хочу распределить доступ в дереве:
-пользователи могут менять свои пароли,
-админ контейнера может менять все в своем контейнере,
-группа админов может менять все во всем дереве.
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: to attrs=userPassword
    by self write
    by group.exact="cn=sadmins,ou=staff,o=lp" write
    by anonymous auth
    by * none
olcAccess: to dn.subtree="cn=ikni_staff,ou=staff,o=lp"
            by dn.base="cn=ikni_adm,cn=ikni_staff,ou=staff,o=lp" write
            by group.exact="cn=sadmins,ou=staff,o=lp" write
            by * read
olcAccess: to *
    by group.exact="cn=sadmins,ou=staff,o=lp" write
    by anonymous read
    by users read
    by * auth
Не знаю, как разрешить смену паролей для админа контейнера :(
« Последнее редактирование: 25 Июнь 2014, 18:18:17 от andr »

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: Доступ к userpassword
« Ответ #1 : 24 Июнь 2014, 23:13:45 »
Здравствуйте!

Не знаю, как разрешить смену паролей для админа контейнера :(
Да точно также, как и во втором ACL:
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: to attrs=userPassword
    by self write
    by dn.base="cn=ikni_adm,cn=ikni_staff,ou=staff,o=lp" write
    by group.exact="cn=sadmins,ou=staff,o=lp" write
    by anonymous auth
    by * none
olcAccess: to dn.subtree="cn=ikni_staff,ou=staff,o=lp"
    by dn.base="cn=ikni_adm,cn=ikni_staff,ou=staff,o=lp" write
    by group.exact="cn=sadmins,ou=staff,o=lp" write
    by * read
olcAccess: to *
    by group.exact="cn=sadmins,ou=staff,o=lp" write
    by * read

Я заодно укоротил третий ACL -- так он более прост и логичен.

Егор

andr

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Доступ к userpassword
« Ответ #2 : 25 Июнь 2014, 12:07:53 »
Хм, но cn=ikni_adm,cn=ikni_staff,ou=staff,o=lp  должен менять только в своем контейнере cn=ikni_staff,ou=staff,o=lp. А с такими правилами он может менять пароль во всем дереве :(

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: Доступ к userpassword
« Ответ #3 : 25 Июнь 2014, 15:43:57 »
Здравствуйте!

Хм, но cn=ikni_adm,cn=ikni_staff,ou=staff,o=lp  должен менять только в своем контейнере cn=ikni_staff,ou=staff,o=lp. А с такими правилами он может менять пароль во всем дереве :(

Согласен, я поторопился. Правильней будет так:
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: to to dn.subtree="cn=ikni_staff,ou=staff,o=lp" attrs=userPassword
    by self write
    by dn.base="cn=ikni_adm,cn=ikni_staff,ou=staff,o=lp" write
    by group.exact="cn=sadmins,ou=staff,o=lp" write
    by anonymous auth
    by * none
olcAccess: to attrs=userPassword
    by self write
    by group.exact="cn=sadmins,ou=staff,o=lp" write
    by anonymous auth
    by * none
olcAccess: to dn.subtree="cn=ikni_staff,ou=staff,o=lp"
    by dn.base="cn=ikni_adm,cn=ikni_staff,ou=staff,o=lp" write
    by group.exact="cn=sadmins,ou=staff,o=lp" write
    by * read
olcAccess: to *
    by group.exact="cn=sadmins,ou=staff,o=lp" write
    by * read

или так:
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: to to dn.subtree="cn=ikni_staff,ou=staff,o=lp" attrs=userPassword
    by dn.base="cn=ikni_adm,cn=ikni_staff,ou=staff,o=lp" write break
olcAccess: to attrs=userPassword
    by self write
    by group.exact="cn=sadmins,ou=staff,o=lp" write
    by anonymous auth
    by * none
olcAccess: to dn.subtree="cn=ikni_staff,ou=staff,o=lp"
    by dn.base="cn=ikni_adm,cn=ikni_staff,ou=staff,o=lp" write
    by group.exact="cn=sadmins,ou=staff,o=lp" write
    by * read
olcAccess: to *
    by group.exact="cn=sadmins,ou=staff,o=lp" write
    by * read

Егор

andr

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Доступ к userpassword
« Ответ #4 : 25 Июнь 2014, 18:14:58 »
Спасибо! Первый вариант сработал!

P.S. Странно, что через Self Service Password от ltb-project.org пользователю не удается изменить свой пароль... :( 
« Последнее редактирование: 25 Июнь 2014, 18:35:32 от andr »

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: Доступ к userpassword
« Ответ #5 : 25 Июнь 2014, 22:11:31 »
Здравствуйте!
P.S. Странно, что через Self Service Password от ltb-project.org пользователю не удается изменить свой пароль... :(

Вы проверяли через ldappasswd? Если с правами пользователя пароль меняется, значит ACL работает как положено. Нужно смотреть в сторону прохождения аутентификации в утилите, которую Вы используете. Можно повысить уровень логирования OpenLDAP, чтобы посмотреть, что происходит в каталоге при изменении пароля через утилиту.

Егор

andr

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Доступ к userpassword[РЕШЕНО]
« Ответ #6 : 26 Июнь 2014, 13:39:17 »
Здравствуйте!
Да, была проблема в настройках утилиты. Поправил и все работает.
Спасибо еще раз!

KTNJ

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Доступ к userpassword[РЕШЕНО]
« Ответ #7 : 14 Октябрь 2014, 09:36:45 »
Здравствуйте! У меня похожая задача. Требуется разрешить пользователям менять пароли, админу ветки разрешить создавать, удалять пользователей в своей ветке, менять им пароли. Структура дерева такая
dn: dc=energy,dc=kz
objectClass: top
objectClass: dcObject
objectclass: organization
o: energy
dc: energy

dn: cn=ldaproot,dc=energy,dc=kz
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: ldaproot
userPassword: xxxxxxxx

dn: ou=ellipseast,dc=energy,dc=kz
objectClass: organizationalUnit
ou: ellipseast

dn: ou=staff,ou=ellipseast,dc=energy,dc=kz
objectClass: organizationalUnit
ou: staff

dn: ou=ellipsepe,dc=energy,dc=kz
objectClass: organizationalUnit
ou: ellipseast

dn: ou=staff,ou=ellipsepe,dc=energy,dc=kz
objectClass: organizationalUnit
ou: staff

dn: ou=ellipseskz,dc=energy,dc=kz
objectClass: organizationalUnit
ou: ellipseskz

dn: ou=staff,ou=ellipseskz,dc=energy,dc=kz
objectClass: organizationalUnit
ou: staff

В каждой ветке есть админ, который должен иметь права на создание, удаление пользователей в своей ветви, смену их паролей
#dn: uid=ldapadminskz,ou=staff,ou=ellipseskz,dc=energy,dc=kz
objectClass: person
objectClass: uidObject
objectClass: simpleSecurityObject
objectClass: top
cn: ldapadminskz
sn: ldapadminskz
uid: ldapadminskz
userPassword: ххх

dn: uid=ldapadminast,ou=staff,ou=ellipseast,dc=energy,dc=kz
objectClass: person
objectClass: uidObject
objectClass: simpleSecurityObject
objectClass: top
cn: ldapadminast
sn: ldapadminast
uid: ldapadminast
userPassword: ххх

dn: uid=ldapadminpe,ou=staff,ou=ellipsepe,dc=energy,dc=kz
objectClass: person
objectClass: uidObject
objectClass: simpleSecurityObject
objectClass: top
cn: ldapadminpe
sn: ldapadminpe
uid: ldapadminpe
userPassword: ххх

Для начала я сделал ACL для одной ветки
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to to dn.subtree="ou=ellipseast,dc=energy,dc=kz" attrs=userPassword
    by self write
    by dn.base="uid=ldapadminast,ou=staff,ou=ellipseast,dc=energy,dc=kz" write
    by anonymous auth
    by * none
olcAccess: {1}to attrs=userPassword
    by self write
    by anonymous auth
    by * none
olcAccess: {2}to dn.subtree="ou=ellipseast,dc=energy,dc=kz"
    by dn.base="uid=ldapadminast,ou=staff,ou=ellipseast,dc=energy,dc=kz" write
    by * read
olcAccess: {3}to *
    by * read
Текущие ACL такие
# ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config '(olcAccess=*)' olcAccess olcSuffix
dn: olcDatabase={0}config,cn=config
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external
 ,cn=auth manage by * break

dn: olcDatabase={1}monitor,cn=config
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external
 ,cn=auth manage by * break

dn: olcDatabase={2}hdb,cn=config
olcSuffix: dc=energy,dc=kz
olcAccess: {0}to * by * read
Когда пытаюсь его загрузить получаю ошибку
# ldapmodify -Y EXTERNAL -H ldapi:/// -f ./2.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={2}hdb,cn=config"
ldap_modify: Other (e.g., implementation specific) error (80)
        additional info: <olcAccess> handler exited with 1
По ошибке нашёл следующее:
ldap_add: Other (e.g., implementation specific) error (80)
additional info: <olcModuleLoad> handler exited with 1

You are trying to load the same module twice, e.g. you already ran ldapadd on db.ldif once and now you're doing it again.

Я ни как не могу понять, что я гружу дважды. Помогите пожалуйста!

Да, и ещё я не могу понять смысла этого выражения:
olcAccess: to to dn.subtree
Директива to повторяется 2 раза. Это ошибка или нет?
« Последнее редактирование: 14 Октябрь 2014, 10:01:07 от KTNJ »

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: Доступ к userpassword[РЕШЕНО]
« Ответ #8 : 14 Октябрь 2014, 10:29:43 »
Здравствуйте! Теоретически, ACL должны заменяться. Может быть Вы напутали с пробелами, как здесь?
Егор

KTNJ

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Доступ к userpassword[РЕШЕНО]
« Ответ #9 : 14 Октябрь 2014, 12:39:31 »
Спасибо, вроде помогло.

KTNJ

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Доступ к userpassword[РЕШЕНО]
« Ответ #10 : 14 Октябрь 2014, 15:42:42 »
Сделал такой ACL
ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config '(olcAccess=*)' olcAccess olcSuffix
dn: olcDatabase={0}config,cn=config
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external
 ,cn=auth manage by * break

dn: olcDatabase={1}monitor,cn=config
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external
 ,cn=auth manage by * break

dn: olcDatabase={2}hdb,cn=config
olcSuffix: dc=energy,dc=kz
olcAccess: {0}to attrs=userPassword by self write by * auth
olcAccess: {1}to dn.subtree="ou=ellipseast,dc=energy,dc=kz" attrs=userPassword
  by self write by dn.base="uid=ldapadminast,ou=staff,ou=ellipseast,dc=energy,
 dc=kz" write by anonymous auth by * none
olcAccess: {2}to dn.subtree="ou=ellipseast,dc=energy,dc=kz" by dn.base="uid=ld
 apadminast,ou=staff,ou=ellipseast,dc=energy,dc=kz" write by * read
olcAccess: {3}to dn.subtree="ou=ellipseskz,dc=energy,dc=kz" attrs=userPassword
  by self write by dn.base="uid=ldapadminskz,ou=staff,ou=ellipseskz,dc=energy,
 dc=kz" write by anonymous auth by * none
olcAccess: {4}to dn.subtree="ou=ellipseskz,dc=energy,dc=kz" by dn.base="uid=ld
 apadminskz,ou=staff,ou=ellipseskz,dc=energy,dc=kz" write by * read
olcAccess: {5}to dn.subtree="ou=ellipsepe,dc=energy,dc=kz" attrs=userPassword
 by self write by dn.base="uid=ldapadminpe,ou=staff,ou=ellipsepe,dc=energy,dc=
 kz" write by anonymous auth by * none
olcAccess: {6}to dn.subtree="ou=ellipsepe,dc=energy,dc=kz" by dn.base="uid=lda
 padminspe,ou=staff,ou=ellipsespe,dc=energy,dc=kz" write by * read
olcAccess: {7}to * by * read
В результате пользователи могут менять свои пароли, локальный админ может создавать, удалять пользователей в своей ветке, но не может менять пароль. Получается правило на доступ к атрибуту  userPassword для локальных админов не работает, а к ветке в целом - работает. У меня это в голове не укладывается!

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: Доступ к userpassword[РЕШЕНО]
« Ответ #11 : 15 Октябрь 2014, 01:35:55 »
Здравствуйте! Всё дело в правиле с индексом {0} -- при обращении к userPassword оно срабатывает и до других дело просто не доходит. А в этом правиле про админов ничего не сказано, поэтому они не получают никаких прав. Если у Вас пользователи с паролями только в перечисленных ветках, то это правило можно вообще убрать и всё будет нормально работать. Если нет, то сначала нужно перечислить правила {1}, {3}, {5}, потом {0}, а затем все остальные.
Егор

KTNJ

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Доступ к userpassword[РЕШЕНО]
« Ответ #12 : 15 Октябрь 2014, 07:23:43 »
Егор, большое Вам спасибо! Убрал правило {0} и всё заработало!

 

Эта страница

Содержание

Новости:
Форум проекта Pro-LDAP.ru
OpenLDAP 2.4 Руководство

Содержание

Введение в службы каталогов OpenLDAPБыстрое развёртывание и начало работыОбщая картина - варианты конфигурацииСборка и установка OpenLDAPНастройка slapd

 

Конфигурационный файл slapdЗапуск slapdКонтроль доступаОграниченияИнструментыМеханизмы манипуляции даннымиНаложенияСпецификация схемы

 

БезопасностьSASLTLSРаспределённая служба каталоговРепликацияОбслуживаниеМониторингПроизводительностьУстранение неполадок
Перевод официального руководства OpenLDAP 2.4 Admin Guide
Полное содержание здесь
LDAP для учёных-ракетчиков

Содержание

О книгеКонцепции LDAPОбъекты LDAPУстановка LDAPПримерыНастройкаРепликация и отсылкиLDIF и DSMLПротоколLDAP API

 

HOWTOНеполадкиПроизводительностьИнструменты LDAPБезопасностьЗаметкиРесурсы LDAPRFC и X.500ГлоссарийОбъекты
Перевод "LDAP for Rocket Scientists"
Полное содержание здесь
Ресурсы

Книги

Руководство OpenLDAP 2.4LDAP для учёных-ракетчиков

Другие

СтатьиТермины LDAPman-страницы OpenLDAP 2.4Список RFCКлиенты LDAPФайлы наборов схемы
Полезные ресурсы
Форум

 

Разделы форумаНепрочитанные сообщенияПоследние сообщения
Форум проекта
Главная

Pro-LDAP.ru

О проектеНовости проектаУчастникиСтаньте участником!Сообщите об ошибке!Об авторских правахСоглашения проекта
Присоединяйсь!