Как проверить, как пароли хранятся на локальном работающем сервере OpenLDAP? Я бы предпочел какой-то запрос, в котором будет указана используемая конфигурация. В качестве альтернативы также допустим доступ к сохраненным паролям, чтобы убедиться, что они зашифрованы. Просто проверить файл конфигурации недостаточно.
Я перечислил пользователей с их паролями с помощью ldapsearch
ldapsearch -x -b ou=people -H ldap://127.0.0.1 -D cn=admin -w <password>
, и пароли не перечислены в открытом тексте, но действительно ли это подтверждает, что они не хранятся в открытом виде, или ldapsearch шифрует их перед возвратом результатов?
Я перечислил пользователей с их паролями, используя
ldapsearch
и пароли не указаны в открытом виде, но действительно ли это подтверждает, что они не хранятся в открытом виде?
Да, нет, может быть.
Я думаю, что ldapsearch
и, например, наложение политики паролей не заменяет сохраненные пароли в открытом виде зашифрованной или хешированной версией в ответах поиска. Шифрование/хеширование паролей в открытом виде происходит только при установке/обновлении паролей. Я думаю, что в этом отношении вы можете доверять тому, что показывает вам ldapsearch
.
Но и ldapsearch
, и slapcat
отображают userPassword
в формате base64-. Двойное двоеточие ::
после имени атрибута используется для указания того, что значение закодировано в base64-.
userPassword:: c2VjcmV0LXBhc3N3b3JkCg==
userPassword:: e1NTSEF9RGtNVHdCbCthLzNEUVR4Q1lFQXBkVXROWEdnZFVhYzMK
На самом деле вы не узнаете, пока не расшифруете эту строку символов base64, является ли пароль хешированным или открытым текстом. Если вы найдете только пароли в виде {hash prefix}salt/value
:
userPassword: {SSHA}DkMTwBl+a/3DQTxCYEApdUtNXGgdUac3
userPassword: {SSHA}d0Q0626PSH9VUld7yWpR0k6BlpQmtczb
userPassword: {CRYPT}$1$czBJdDqS$TmkzUAb836oMxg/BmIwN.1
userPassword: {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==
userPassword: {SMD5}4QWGWZpj9GCmfuqEvm8HtZhZS6E=
, то все в порядке. Пароли без такого префикса представляют собой обычный текст.
Простой проверки файла конфигурации недостаточно.
Действительно. Когда хэширование/шифрование паролей включено/изменено, ни существующие пароли в открытом виде, ни существующие пароли, зашифрованные с помощью различных алгоритмов, не преобразуются.
Насколько мне известно, после изменения политики паролей по умолчанию существующий открытый текст и пароли, хэшированные с помощью других алгоритмов, также не перестанут работать, демон ldap просто перебирает все поддерживаемые механизмы всякий раз, когда выполняется запрос аутентификации.
Чтобы проверить содержимое фактически сохраненных данных в OpenLDAP, проще всего, вероятно, экспортировать базу данных в читаемый формат LDIF с помощьюslapcat
; извлечь все значения атрибутов userPassword из этого LDIF и декодировать их с помощью base64.