vsftpd не будет принимать пароли, зашифрованные с помощью MD5

10

Я настраиваю сервер с помощью vsftpd, чтобы позволить виртуальным пользователям получать доступ к своему пространству. Теперь он полностью работает, но только с паролями CRYPT. Так

sudo htpasswd -c /etc/vsftpd/ftpd.passwd phpmyadmin

не позволит мне войти, но

sudo htpasswd -c -d /etc/vsftpd/ftpd.passwd phpmyadmin

воля.

/etc/vsftpd.conf

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
nopriv_user=vsftpd
virtual_use_local_privs=YES
guest_enable=YES
user_sub_token=$USER
local_root=/var/www/vhosts/$USER.universe.local
chroot_local_user=YES
hide_ids=YES
guest_username=vsftpd

/etc/pam.d/vsftpd

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd crypt=2
account required pam_permit.so crypt=2

Я установил apache2.4.3 из исходного кода, а также PHP.

Вещи, которые я пробовал:

  • Google много
  • Установить crypt = 2
  • Спроси друзей
  • использовать SHA (тоже не работает)
  • обновить htpasswd и vsftpd

Я боролся с этим уже неделю, я надеюсь, что вы, ребята, можете помочь мне в дальнейшем

Marco
источник
1
Какую ОС вы используете? В Linux предполагается, что по умолчанию используется crypt, что аналогично использованию -d.
user9517
для полноты картины -mсгенерирую хэши в стиле Apache в стиле MD5 ( $apr1$salt$hash)
bonsaiviking

Ответы:

13

htpasswdгенерирует MD5-хэши в формате Apache, который вы можете проверить, увидев, что они начинаются $apr1$, но PAM поддерживает только те форматы, которые реализует ваша платформа crypt(3). Для Glibc эквивалент (на основе MD5) будет $1$. Вам просто нужно сгенерировать пароли с помощью другого инструмента. Вот пример:

sh$ openssl passwd -1
Password: 
Verifying - Password: 
$1$vhzHvIYn$2Ro.R0WdLnxrWjHcs5RbA/

Вы можете скопировать этот хэш в ваш ftpd.passwdфайл в username:hashформате, и он должен работать.

bonsaiviking
источник
Большое спасибо за помощь в этом! Это сработало! могу я сделать поддержку pam md5 версии apache?
Марко
Глядя на код pam_pwdfile, кажется, что вам нужно написать поддержку и перекомпилировать. Он даже содержит полную реализацию $1$хэша пароля MD5 вплоть до примитива MD5, поэтому он не полностью cryptосведомлен.
Бонсайвинг
6

Развернув ответ @ bonsaiviking, вы можете сгенерировать пароль openssl md5 и добавить его в файл ftpd.passwd в одну строку, используя параметры пакетного режима htpasswd -b и параметры открытого текста -p следующим образом:

htpasswd -c -p -b ftpd.passwd *username* $(openssl passwd -1 -noverify *password*)

В приведенном выше примере (Ubuntu) также создается новый файл ftpd.passwd, если он не существует, с помощью -c

jnolan517
источник
htpasswd выводит: «Предупреждение: хранение паролей в виде простого текста может просто не работать на этой платформе». Я думаю, это потому, что он думает, что это действительно текстовый план, но на самом деле это хеш, сгенерированный openssl. Использование этого подхода для генерации паролей работало с vsftp.
Святослав Маринов
Да, htpasswd может сгенерировать это предупреждение, если вы передадите хэш MD5 в виде простой текстовой строки.
jnolan517
Сделал сценарий для этого на основе этого - захватите здесь gist.github.com/bmatthewshea/53ed5148f09dfed50cebd10650ca551b
bshea
1

Две команды, которые вы показываете, эквивалентны, потому что -dопция говорит htpasswd использовать crypt, который используется по умолчанию для большинства операционных систем.

Если вы хотите, чтобы пароли хэшировались с помощью md5, вам следует использовать -m

sudo htpasswd -m /etc/vsftpd/vsftpd.passwd test
New password:
Re-type new password:
Adding password for user test
grep test /etc/vsftpd/vsftpd.passwd
test:$apr1$GTYtpKS1$Jyfgu42kDspxdJTPPzSOY.

Который показывает, что пароль теста был зашифрован с использованием md5.

user9517
источник
Он должен использовать другую версию htpasswd, так как он получает разные результаты с и без -d.
Бонсайвинг
Как уже упоминалось, это не работает с vsftp - он генерирует md5 в стиле apache. за выше ^ serverfault.com/a/450220/92023
bshea