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"