LDAP для изменения пароля пользователя

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

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

Благодарю.

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

6 ответов

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

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

Редактировать: Бьюсь об заклад, ответ может быть найден в журналах slapd. Также стоит ознакомиться с ACL: Руководство администратора OpenLDAP 2.4, раздел 8. Контроль доступа.

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

ldapmodify -h хост -p порт -D "cn=Directory Manager" -w пароль
dn: uid=bjensen,ou= люди, dc = пример, dc = com
изменить тип: изменить
заменить: userPassword
userPassword: ChAnGeMe

Здесь ldappasswd полезность. например

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

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

Вы используете 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

На самом деле, вы можете сделать это на 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

Изменение пароля пользователя с помощью привязки RootDN

      ldappasswd -H ldap://server_domain_or_IP -x -D "cn=admin,dc=example,dc=com" -W -S "uid=bob,ou=people,dc=example,dc=com"
Другие вопросы по тегам