2011-01-27 3 views
4

Как я знаю, на PHP нам нужно подключить LDAP через SSL, чтобы изменить пароль пользователя.LDAP для изменения пароля пользователя

Есть ли другой способ, E.G, другой язык (JAVA/ASP) для изменения пароля LDAP без необходимости в SSL?

Спасибо.

Обновления: Я получаю «Предупреждение: ldap_mod_replace() [function.ldap-mod-replace]: Изменить: Недостаточный доступ», когда я пытаюсь изменить пароль собственной учетной записи. Если я пытаюсь изменить другой пароль пользователя, я не получаю сообщение об ошибке, но пароль по-прежнему остается прежним.

+2

Это, вероятно, будет зависеть от службы LDAP, которую вы используете. –

ответ

4

Многие реализации LDAP действительно требуют SSL или TLS для изменения/установки паролей. Это требование, заданное сервером LDAP, а не язык, используемый для доступа к нему. Изменение языков не позволит вам переопределить это конкретное требование к серверу.

Я понимаю, что существуют обстоятельства, при которых вы не сможете установить соединение SSL/TLS, но в целом вы абсолютно хотите шифровать пароли таким образом, даже если сервер не требует этого.

Редактировать: Держу пари, что ответ может быть найден в журналах slapd. Также стоит рассмотреть списки ACL: OpenLDAP Software 2.4 Administrator's Guide, Section 8. Access Control.

+0

Я знал программное обеспечение, которое позволяет пользователю сбрасывать/изменять пароль, хотя для моего текущего LDAP SSL не включен. http://www.manageengine.com/products/self-service-password/index.html – neobie

+0

@neobie, возможно, я неправильно понял ваш вопрос. Это звучало так, будто вы пытались обойти требование ssl, продиктованное вашим сервером ldap. Я рад, что ты заработал! – xelco52

+0

нет нет. Это стороннее программное обеспечение, но теперь я пытаюсь разработать с использованием PHP. – neobie

3

В каталоге хранятся значения пароля в атрибуте userPassword пользователя . В зависимости от настроек управления доступом к серверу пользователи могут установить значение userPasswordв соответствии с заданной вами политикой пароля, используя стандартные инструменты , например ldapmodify.

 
ldapmodify -h host -p port -D "cn=Directory Manager" -w password 
dn: uid=bjensen,ou=People,dc=example,dc=com 
changetype: modify 
replace: userPassword 
userPassword: ChAnGeMe 
1

Вы используете OpenLDAP или Active Directory? Оба из них нуждаются в безопасном подключении, чтобы вы могли изменить свой пароль.

Вы не можете изменить пароль Active Directory с помощью PHP с помощью ldap_mod_replace, вы должны использовать ldap_modify_batch, если вы не являетесь администратором.

Посмотрите: https://msdn.microsoft.com/en-us/library/cc223248.aspx

При использовании замены (вы не отправить свой старый пароль), только администраторы могут изменять пароли. Но если вы используете пакет с удалением (со старым паролем) и добавлением (с новым), пользователь может изменить свой пароль: http://php.net/ldap-modify-batch

+0

Также обратите внимание, что две операции различны: выполнение 'ldap_mod_replace' (или' ldap_modify_batch' с 'LDAP_MODIFY_BATCH_REPLACE') приводит к операции * сброса пароля * при использовании' ldap_modify_batch' с '..._ REMOVE' и'. .._ ADD' является * изменением пароля *. Основное отличие заключается в том, что операция * reset * не позволяет получить доступ к ранее зашифрованным файлам (поскольку они зашифрованы старым паролем), в то время как операция * change * не страдает от этого ограничения (поскольку файлы дешифруются с помощью старый и повторно зашифрованный с новым паролем). – RavuAlHemio

1

Утилита ldappasswd. например

ldappasswd -H ldap://ldap.example.com:389 -D "uid=account-name,ou=serviceaccounts,dc=example,dc=com" -S -W -ZZ 

Если referral возвращается, то вам нужно попробовать этот сервер вместо этого. Обычно, когда есть один главный сервер и несколько серверов только для чтения.

0

Фактически вы можете сделать это на PHP без соединения SSL/TLS с использованием расширения PHP COM (однако использование COM означает, что вам необходимо использовать ОС Windows для вашего приложения).

Использование COM также обходит требования по сложности политики паролей вашего сервера AD (не уверен, почему).

$dn = 'cn=John Doe,dc=acme,dc=org'; 

$ldap = new COM('LDAP:'); 

$user = $ldap->OpenDSObject('LDAP://ACME-DC01.corp.acme.org/'.$dn, 'admin-username', 'admin-password', 1); 

$user->SetPassword('NewPassword'); 

$user->SetInfo(); // Saved 
Смежные вопросы