Пользовательский алгоритм хеширования паролей с помощью vsftpd

Традиционно, когда клиент входит в систему, он отправляет учетные данные (имя пользователя +pw) без дальнейшей обработки. Затем сервер проверяет, существует ли в его базе данных запись, которая соответствует предоставленным учетным данным.

Чтобы затруднить восстановление пароля в случае взлома базы данных, пароль хранится в хешированном виде. Это означает, что либо клиент, либо сервер хэшируют пароль, а затем проверяются учетные данные на соответствие.

Однако, если клиент выполняет хеширование, оно фактически становится бесполезным. Зачем? Потому что хешированный пароль теперь используется в качестве пароля. Можно украсть базу данных, прочитать хэш и отправить его вместе с именем пользователя, но при этом получить доступ.

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

Однако я не могу найти способ добиться этого с помощью модуля PAM, чтобы vsftpd использовал его для входа в систему. Обратите внимание, что я не хочу использовать обычные хэш-функции, так как они не подходят для пароля. Мне нужно использовать KDF, такие как scrypt или bcrypt.

Нужно ли мне кодировать собственный модуль PAM или генерировать хеш-коды htpasswd по требованию?

tl; dr Как выполнить аутентификацию пользователя с помощью хэша паролей на стороне сервера для vsftpd?

1 ответ

Решение

crypt() используемый PAM может поддерживать только BCRYPT, а не SCRYPT (или ни то, ни другое). Во всех случаях вам нужно установить метод только при кодировании пароля, а не при его проверке.

Поскольку vsftp использует файл системных паролей, вам необходимо перенастроить PAM для использования BCRYPT. Это зависит от фактического используемого Unix/ Linux. Как только ваш файл passwd содержит $2y$ хэши паролей с префиксом (вы можете сгенерировать их с htpasswd -B вы сделали).

Некоторые Linux поддерживают authconfig --passalgo=blowfish --updateдля других вам нужно найти правильный файл конфигурации PAM и добавить blowfish в строку пароля:

password sufficient /lib/security/pam_unix.so nullok use_authok blowfish shadow
Другие вопросы по тегам