vsftpd nie akceptuje haseł zaszyfrowanych za pomocą MD5

10

Konfiguruję serwer z vsftpd, aby umożliwić wirtualnym użytkownikom dostęp do ich przestrzeni. Teraz działa w pełni, ale tylko z hasłami CRYPT. Więc

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

nie pozwoli mi się zalogować, ale

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

będzie.

/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

Zainstalowałem apache2.4.3 ze źródła, a także PHP.

Rzeczy, których próbowałem:

  • Google dużo
  • Ustaw crypt = 2
  • Zapytaj przyjaciół
  • użyj SHA (też nie działa)
  • zaktualizuj htpasswd i vsftpd

Walczę z tym od tygodnia, mam nadzieję, że pomożecie mi dalej

Marco
źródło
1
Z jakiego systemu operacyjnego korzystasz? W Linuksie domniemaną wartością domyślną jest crypt, który jest taki sam jak użycie -d.
user9517,
ze względu na kompletność -mwygeneruje skróty w stylu apache oparte na MD5 ( $apr1$salt$hash)
bonsaiviking

Odpowiedzi:

13

htpasswdgeneruje skróty MD5 w formacie Apache, które można zweryfikować, zaczynając od nich $apr1$, ale PAM obsługuje tylko formaty implementowane przez platformę crypt(3). W przypadku Glibc odpowiadałby (oparty na MD5) $1$. Musisz tylko wygenerować hasło za pomocą innego narzędzia. Oto przykład:

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

Możesz skopiować ten skrót do ftpd.passwdpliku w username:hashformacie i powinien on działać.

bonsaiviking
źródło
Dziękuję bardzo za pomoc w tym! Zadziałało! czy mogę sprawić, by pam wspierała wersję md5 apache?
Marco
Patrząc na kod pam_pwdfile, wygląda na to, że będziesz musiał napisać obsługę i ponownie skompilować. Zawiera nawet całą implementację $1$skrótu hasła MD5, aż do prymitywu MD5, więc nie jest w pełni cryptświadomy.
bonsaiviking
6

Rozwijając odpowiedź @ bonsaiviking, możesz wygenerować hasło openssl md5 i dodać je do pliku ftpd.passwd w jednym wierszu, używając trybu wsadowego htpasswd -b, oraz opcji zwykłego tekstu -p w następujący sposób:

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

Powyższy przykład (Ubuntu) tworzy również nowy plik ftpd.passwd, jeśli nie istnieje przy użyciu -c

jnolan517
źródło
Dane wyjściowe htpasswd: „Ostrzeżenie: przechowywanie haseł jako zwykłego tekstu może po prostu nie działać na tej platformie”. Myślę, że dzieje się tak, ponieważ wydaje się, że to rzeczywiście plan tekstowy, ale w rzeczywistości jest to skrót wygenerowany przez openssl. Korzystanie z tego podejścia do generowania haseł działało z vsftp.
Svetoslav Marinov,
Racja, htpasswd może wygenerować to ostrzeżenie b / c po przekazaniu skrótu MD5 jako zwykłego ciągu tekstowego.
jnolan517
Stworzono skrypt, aby to zrobić na podstawie tego - pobierz
bshea
1

Dwa wyświetlane polecenia są równoważne, ponieważ -dopcja mówi htpasswd, aby używała krypty, która jest domyślna dla większości systemów operacyjnych.

Jeśli chcesz hash hashed z md5, powinieneś użyć -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.

Co pokazuje, że hasło testu zostało zaszyfrowane przy użyciu md5.

użytkownik9517
źródło
Musi używać innej wersji htpasswd, ponieważ uzyskuje różne wyniki zi bez niego -d.
bonsaiviking
Jak wspomniano, NIE działa z vsftp - generuje md5 w stylu Apache. powyżej ^ serverfault.com/a/450220/92023
bshea