Я пытаюсь разрешить пользователям ldap изменять свой пароль на клиентских машинах. Я пробовал pam всеми возможными способами /etc/ldap.conf
& /etc/pam_ldap.conf
, также. На этом я застрял.
Клиент: Ubuntu 11.04
Сервер: Debian 6.0
Текущий вывод такой:
sobrien4@T-E700F-1:~$ passwd
passwd: Authentication service cannot retrieve authentication info
passwd: password unchanged
/var/log/auth.log
дает это во время команды:
May 9 10:49:06 T-E700F-1 passwd[18515]: pam_unix(passwd:chauthtok): user "sobrien4" does not exist in /etc/passwd
May 9 10:49:06 T-E700F-1 passwd[18515]: pam_ldap: ldap_simple_bind Can't contact LDAP server
May 9 10:49:06 T-E700F-1 passwd[18515]: pam_ldap: reconnecting to LDAP server...
May 9 10:49:06 T-E700F-1 passwd[18515]: pam_ldap: ldap_simple_bind Can't contact LDAP server
getent passwd |grep sobrien4
(обратите внимание на то, что с момента тестирования с этой учетной записью было коротко, однако он выводит всех пользователей ldap):
sobrien4:Ffm1oHzwnLz0U:10000:12001:Sean O'Brien:/home/sobrien4:/bin/bash
getent group
показывает все группы ldap.
/etc/pam.d/common-password
(Обратите внимание, это только самый последний, я пробовал много разных вариантов):
password required pam_cracklib.so retry=3 minlen=8 difok=3
password [success=1 default=ignore] pam_unix.so use_authtok md5
password required pam_ldap.so use_authtok
password required pam_permit.so
Открыл wirehark, сервер и клиент разговаривают.
У меня на сервере меняется пароль. I.E. сервер, на котором запущен slapd, я могу войти в систему с пользователем ldap и изменить пароли. Я пробовал изначально скопировать рабочие конфиги с сервера и никаких кубиков.
Я также пробовал клонировать его, просто меняя ip и host, и ничего не выходит. Я предполагаю, что клиент не авторизован по ip или имени хоста для изменения прохода.
Что касается slapd conf, я увидел это в руководстве и попробовал:
access to attrs=loginShell,gecos
by dn="cn=admin,dc=cengineering,dc=etb" write
by self write
by * read
access to *
by dn="cn=admin,dc=cengineering,dc=etb" write
by self write
by * read
Кажется, ldap работает нормально, просто не может изменить пароль.
Я уже сталкивался с такой же проблемой раньше; чтобы решить эту проблему, мне нужно было удалить use_authtok
- это позволило нам затем изменить пароли пользователей, используя passwd
... Я не уверен, какие последствия это будет иметь, если ваша цепочка аутентификации требует токенов, но это должно помочь, если вы авторизуетесь только через LDAP
Я думаю, вам нужно разрешить auth-bind'ing, чтобы он работал. Под этим я подразумеваю, что пользователь подключается к ldap (или прокси-серверу pam) и представляет свои учетные данные. Если ldap-серверу нравится то, что он видит, authbind завершается успешно, и PAM знает, что ваша пара пользователь / пароль верна. См. Пример в книге Zytrax
Настройте свой ACL так, чтобы раздел был похож на
# ACL1
access to attrs=userpassword
by self write
by anonymous auth
by group.exact="cn=itpeople,ou=groups,dc=example,dc=com" write
by * none
Я использую следующую конфигурацию для поддержки PAM passwd:
password requisite pam_cracklib.so try_first_pass retry=3
password sufficient pam_ldap.so try_first_pass use_authtok
password sufficient pam_unix.so sha512 shadow nullok use_authtok try_first_pass
password required pam_deny.so
Также помните, что списки ACL должны быть настроены от наиболее конкретных до наименее конкретных, потому что первая соответствующая запись выигрывает. Мой выглядит так:
access to attrs=userPassword
by dn="cn=admin,dc=hell" write
by set="[cn=admins,ou=access groups,ou=groups,dc=hell]/memberUid & user/uid" write
by anonymous auth
by self write
by * none
(Кстати, я бы предпочел оригинальное руководство по администрированию OpenLDAP, чем книгу Zytrax; книга в любом случае использует руководство в качестве источника, но часто приводит к ошибкам, отклоняясь от исходного текста.)