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

Смена пользователя LDAP на клиенте

Я пытаюсь разрешить пользователям 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; книга в любом случае использует руководство в качестве источника, но часто приводит к ошибкам, отклоняясь от исходного текста.)