vsftpd no aceptará contraseñas cifradas con MD5

10

Estoy configurando un servidor con vsftpd para permitir que los usuarios virtuales accedan a su espacio. Ahora funciona completamente, pero solo con las contraseñas CRYPT. Entonces

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

no me permitirá iniciar sesión, pero

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

será.

/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

Instalé apache2.4.3 desde la fuente, así como PHP.

Cosas que he probado:

  • Google mucho
  • Establecer cripta = 2
  • pregunte a sus amigos
  • usa SHA (tampoco funciona)
  • actualizar htpasswd y vsftpd

He estado luchando con esto durante una semana, espero que puedan ayudarme más

Marco
fuente
1
¿Qué sistema operativo estás usando? En Linux, el supuesto valor predeterminado es crypt, que es lo mismo que usar -d.
user9517
en aras de la integridad, -mgenerará hashes de estilo apache basados ​​en MD5 ( $apr1$salt$hash)
bonsaiviking

Respuestas:

13

htpasswdgenera hashes MD5 en el formato Apache, que puede verificar al ver que comienzan $apr1$, pero PAM solo admite formatos que implementa la implementación de su plataforma crypt(3). Para Glibc, el equivalente (basado en MD5) sería $1$. Solo necesita generar las contraseñas con una herramienta diferente. Aquí hay un ejemplo:

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

Puede copiar este hash en su ftpd.passwdarchivo en el username:hashformato, y debería funcionar.

bonsaiviking
fuente
¡Muchas gracias por ayudarme con esto! ¡Funcionó! ¿puedo hacer que pam soporte la versión md5 de apache?
Marco
Mirando el código pam_pwdfile, parece que tendría que escribir el soporte y volver a compilar. Incluso contiene una implementación completa del $1$hash de contraseña MD5, hasta la primitiva MD5, por lo que no es completamente cryptconsciente.
bonsaiviking
6

Ampliando la respuesta de @ bonsaiviking, puede generar la contraseña de openssl md5 y agregarla al archivo ftpd.passwd en una línea usando el modo por lotes de htpasswd -b, y las opciones de texto sin formato -p de la siguiente manera:

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

El ejemplo anterior (Ubuntu) también crea un nuevo archivo ftpd.passwd si no existe usando -c

jnolan517
fuente
Resultados de htpasswd: "Advertencia: almacenar contraseñas como texto sin formato podría no funcionar en esta plataforma". Supongo que es porque cree que es un texto de plan, pero de hecho es el hash generado por el openssl. El uso de este enfoque para generar contraseñas funcionó con vsftp.
Svetoslav Marinov
Correcto, htpasswd puede generar esa advertencia porque pasa el hash MD5 como una cadena de texto sin formato.
jnolan517
Se hizo un guión para hacer esto basado en esto: tome aquí gist.github.com/bmatthewshea/53ed5148f09dfed50cebd10650ca551b
bshea
1

Los dos comandos que muestra son equivalentes porque la -dopción le dice a htpasswd que use crypt, que es el predeterminado para la mayoría de los sistemas operativos.

Si desea contraseñas hash con md5, entonces debe usar -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.

Lo que muestra que la contraseña de la prueba se ha cifrado con md5.

usuario9517
fuente
Debe estar usando una versión diferente de htpasswd, ya que obtiene resultados diferentes con y sin -d.
bonsaiviking
Como se mencionó, esto NO funciona con vsftp: genera md5 de estilo apache. por arriba ^ serverfault.com/a/450220/92023
bshea