O vsftpd não aceita senhas criptografadas com o MD5

10

Estou configurando um servidor com vsftpd para permitir que usuários virtuais acessem seu espaço. Agora ele está funcionando totalmente, mas apenas com senhas CRYPT. assim

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

não permitirá que eu faça login, mas

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

vai.

/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

Eu instalei o apache2.4.3 da fonte, bem como do PHP.

Coisas que tentei:

  • Google muito
  • Definir criptografia = 2
  • pergunte para amigos
  • use SHA (também não funciona)
  • atualizar htpasswd e vsftpd

Estou lutando com isso há uma semana, espero que vocês possam me ajudar

Marco
fonte
1
Qual sistema operacional você está usando? No Linux, o suposto padrão é criptografado, o mesmo que usar -d.
user9517
por uma questão de exaustividade, -mirá gerar MD5 baseado em hashes apache de estilo ( $apr1$salt$hash)
bonsaiviking

Respostas:

13

htpasswdgera hashes MD5 no formato Apache, que você pode verificar vendo que eles começam $apr1$, mas o PAM suporta apenas formatos que a implementação de sua plataforma crypt(3)implementa. Para Glibc, o equivalente (baseado em MD5) seria $1$. Você só precisa gerar as senhas com uma ferramenta diferente. Aqui está um exemplo:

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

Você pode copiar esse hash para seu ftpd.passwdarquivo no username:hashformato e deve funcionar.

bonsaiviking
fonte
Muito obrigado por me ajudar com isso! Funcionou! posso fazer com que o pam suporte a versão md5 do apache?
Marco
Observando o código pam_pwdfile, parece que você precisará escrever o suporte e recompilar. Ele ainda contém toda uma implementação do $1$hash de senha MD5, até o primitivo MD5, portanto, não é totalmente cryptconsciente.
bonsaiviking
6

Expandindo a resposta do @ bonsaiviking, você pode gerar a senha do openssl md5 e adicioná-la ao arquivo ftpd.passwd em uma linha usando as opções de modo de lote -b do htpasswd e as opções de texto sem formatação -p da seguinte maneira:

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

O exemplo acima (Ubuntu) também cria um novo arquivo ftpd.passwd se ele não existir usando -c

jnolan517
fonte
htpasswd outputs: "Aviso: armazenar senhas como texto sem formatação pode não funcionar nesta plataforma." Eu acho que é porque pensa que é realmente um texto de plano, mas na verdade é o hash gerado pelo openssl. Usando essa abordagem para gerar senhas trabalhadas com o vsftp.
Svetoslav Marinov 05/04
Certo, o htpasswd pode gerar esse aviso porque você passa o hash MD5 como uma sequência de texto sem formatação.
precisa saber é o seguinte
Roteiro feito para fazer isso com base nessa - grab aqui gist.github.com/bmatthewshea/53ed5148f09dfed50cebd10650ca551b
bshea
1

Os dois comandos que você mostra são equivalentes porque a -dopção diz ao htpasswd para usar crypt, que é o padrão para a maioria dos sistemas operacionais.

Se você deseja que as senhas sejam hash com md5, use -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.

O que mostra que a senha do teste foi criptografada usando o md5.

user9517
fonte
Ele deve estar usando uma versão diferente do htpasswd, pois obtém resultados diferentes com e sem -d.
bonsaiviking
Como mencionado, isso NÃO funciona com o vsftp - gera md5 no estilo apache. por acima ^ serverfault.com/a/450220/92023
bshea