Пользовательский алгоритм хеширования паролей с помощью 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