Изменение пароля на сервере OpenLDAP

Системы LDAP часто используются для хранения информации об учетных записях пользователей. Часто наиболее распространенных методов аутентификации в LDAP включать информацию учетных записей, хранящихся в записях LDAP.

Вне зависимости от цели использования LDAP навык управления паролями становится чрезвычайно важным. Данное руководство научит изменять пароли записей LDAP.

Изменение пароля своего пользователя

Возможность изменять пароли устанавливается контролем доступа сервера LDAP. Как правило, LDAP позволяет пользователям менять свои пароли. Для этого необходимо, конечно, знать свой предыдущий пароль.

Для изменения пароля используется инструмент ldappasswd. Чтобы изменить пароль, нужно подключиться к записи LDAP и указать текущий пароль. Этот инструмент использует тот же синтаксис, что и другие инструменты OpenLDAP.

Чтобы изменить пароль, нужно использовать ряд аргументов. Старый пароль можно указать при помощи одной из этих опций:

  • -a [oldpassword]: этот флаг позволяет указать старый пароль как часть запроса в командной строке.
  • -A: это альтернатива флага –a; этот флаг запросит старый пароль после ввода команды.
  • -t [oldpasswordfile]: этот флаг можно использовать вместо предыдущих, чтобы считать пароль из файла.

Чтобы задать новый пароль, используйте одну из опций:

  • -s [newpassword]: этот флаг позволяет ввести новый пароль в командной строке.
  • -S: альтернатива предыдущего флага; запросит новый пароль после ввода команды.
  • -T [newpasswordfile]: этот флаг можно использовать вместо предыдущих, он считывает пароль из файла.

Выберите одну опцию из каждой группы и используйте их вместе с общими опциями.

Примечание: Технически OpenLDAP не всегда запрашивает старый пароль, поскольку он используется для выполнения аутентификации к записи, но другие реализации LDAP требуют его указывать.

Как правило, команда для смены пароля имеет такой вид:

ldappasswd -H ldap://server_domain_or_IP -x -D "user_dn" -W -A -S

Команда подключается к заданному серверу LDAP, проходит аутентификацию, а затем возвращает ряд извещений и подсказок, среди которых запрос старого и нового пароля, а также повторный запрос старого пароля. После этого пароль будет изменён.

Вероятно, вводить пароль удобнее в командную строку, а не в извещения. Для этого используйте:

ldappasswd -H ldap://server_domain_or_IP -x -D "user_dn" -w old_passwd -a old_passwd -S

Изменение пароля другого пользователя

Инструмент ldappasswd позволяет администратору LDAP изменять пароли других пользователей.

Технически можно пройти аутентификацию любой учетной записи, у которой есть право на изменение пароля, но, как правило, такое право есть только у записи rootDN (учетная запись администратора).

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

Базовый синтаксис команды ldappasswd для изменения пароля почти не изменится. Единственное отличие – это имя записи, пароль которой нужно изменить, в конце команды. Если у вас есть старый пароль записи, можете использовать флаги –а или –А, но, как правило, в этом нет необходимости.

К примеру, если rootDN LDAP-сервера: cn=admin, dc=example, dc=com, и вы хотите изменить пароли для uid=bob,ou=people,dc=example,dc=com, можно ввести команду:

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"

Команда сначала запросит новый пароль пользователя bob, а затем – пароль администратора.

 Изменение пароля RootDN

В случае если пароль rootdn по какой-либо причине был утерян, вы можете выбрать новый пароль администратора LDAP. Для этого нужны права root или sudo в системе сервера, на котором установлен LDAP. Для начала войдите на сервер.

Поиск текущих данных RootDN

Сначала нужно найти учётную запись и хэш текущего пароля RootDN. Для этого введите:

sudo ldapsearch -H ldapi:// -LLL -Q -Y EXTERNAL -b "cn=config" "(olcRootDN=*)" dn olcRootDN olcRootPW | tee ~/newpasswd.ldif

Эта команда вернёт учётную запись и пароль rootDN, а также сообщит конфигурационную БД, в которой определены эти данные. Затем она поместит эту информацию в файл в домашнем каталоге пользователя, который можно отредактировать, получив хэш нового пароля:

dn: olcDatabase={1}hdb,cn=config
olcRootDN: cn=admin,dc=example,dc=com
olcRootPW: {SSHA}ncCXAJ5DjfRWgxE9pz9TUCNl2qGQHQT3

Хэширование нового пароля

При помощи slappasswd сгенерируйте хэш для нового пароля. Для этого нужно использовать хэш в строке olcRootPW, перед которым стоит значение в фигурных скобках (в данном случае {SSHA}).

Новый хэш нужно вставить в конец файла, созданного в предыдущем разделе. Укажите полный путь к команде, если вы работаете не через root.

/usr/sbin/slappasswd -h {SSHA} >> ~/newpasswd.ldif

Команда запросит ввести и подтвердить новый пароль. Хэш нового пароля будет добавлен в конец файла.

Изменение пароля в Config DIT

Теперь нужно создать валидную команду LDIF, чтобы изменить пароль. Откройте файл:

nano ~/newpasswd.ldif
dn: olcDatabase={1}hdb,cn=config
olcRootDN: cn=admin,dc=example,dc=com
olcRootPW: {SSHA}ncCXAJ5DjfRWgxE9pz9TUCNl2qGQHQT3
{SSHA}lieJW/YlN5ps6Gn533tJuyY6iRtgSTQw

Если на сервере LDAP более одной ветки DIT, файл может содержать больше записей. В таком случае используйте значение olcRootDN, чтобы найти правильную учётную запись, которую нужно отредактировать. Удалите другие строки dn, olcRootDN, olcRootPW, если они есть в файле.

Убедившись, что значение olcRootDN совпадает с именем записи, пароль которой нужно изменить, закомментируйте эту сроку. После неё нужно добавить две строки:

dn: olcDatabase={1}hdb,cn=config
#olcRootDN: cn=admin,dc=example,dc=com
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}ncCXAJ5DjfRWgxE9pz9TUCNl2qGQHQT3
{SSHA}lieJW/YlN5ps6Gn533tJuyY6iRtgSTQw

Затем удалите хэш в строке olcRootPW и замените его сгенерированным ранее хэшем. Удалите все лишние строки. Должно получиться примерно следующее:

dn: olcDatabase={1}hdb,cn=config
#olcRootDN: cn=admin,dc=example,dc=com
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}lieJW/YlN5ps6Gn533tJuyY6iRtgSTQw

Сохраните и закройте файл.

Чтобы обновить настройки, введите:

sudo ldapmodify -H ldapi:// -Y EXTERNAL -f ~/newpasswd.ldif

После этого пароль администратора будет изменён.

Изменение пароля в обычной ветке DIT

Пароль в DIT администратора изменён. Однако теперь нужно изменить запись в обычной DIT. На данный момент оба пароля – старый и новый – считаются валидными. Чтобы исправить это, используйте учётные данные, чтобы изменить ветку DIT.

Откройте файл LDIF:

nano ~/newpasswd.ldif

Замените значение в строке dn: значением закомментированной ране строки RootDN. Эта запись – новая цель для смены пароля. Также нужно заменить оба вхождения olcRootPW на userPassword. В результате файл LDIF должен выглядеть следующим образом:

[output ~/newpasswd.ldif] dn: cn=admin,dc=example,dc=com
changetype: modify
replace: userPassword
userPassword: {SSHA}lieJW/YlN5ps6Gn533tJuyY6iRtgSTQw

Сохраните и закройте файл.

Теперь можно отредактировать пароль этой записи, подключившись к ней при помощи нового пароля, установленного в config DIT. Для выполнения этой операции нужно подключиться к RootDN:

ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -W -f ~/newpasswd.ldif

Программа запросит новый пароль, установленный в config DIT. После аутентификации пароль будет изменён. Старый пароль станет недействительным.

Tags: ,

1 комментарий

Добавить комментарий