Pure FTPd e MySQL, trabalhando com o sha512

4

Atualmente, estou desenvolvendo um aplicativo para hospedagem compartilhada, usando um backend completo do MySQL para a máquina. Eu configurei todos os meus serviços e eles são bastante operacionais, no entanto, tenho um pequeno problema com o pure-ftpd.

Como você deve saber, o Pure-FTPd pode trabalhar com o MySQL graças a pure-ftpd-mysql . Veja como é a configuração básica:

MYSQLServer             127.0.0.1
MYSQLPort               3306
MYSQLSocket             /var/run/mysqld/mysqld.sock
MYSQLUser               myftpdbuser
MYSQLPassword           myftpdbpassword
MYSQLDatabase           myftpdb
MYSQLCrypt              md5
# Here come the selection queries...

Como você pode ver, eu escolhi o md5 como o algoritmo de criptografia, mas isso é um problema. Estou usando o Symfony2 e configurei o codificador para o sha512 para meus usuários, e quando quiser criar uma conta de FTP com a mesma senha de um dos meus usuários, tenho que copiar o hash sha512 para a conta de FTP.

Isso é bastante satisfatório, no entanto, o Pure-FTPd é configurado para o md5, portanto, ele não poderá verificar essa senha. Eu gostaria de manter o sha512 o máximo possível, já que usar o md5 exigirá algumas modificações do meu código para re-criptografia.

Veja o que o exemplo de configuração Pure-FTPd diz:

# Mandatory : how passwords are stored
# Valid values are : "cleartext", "crypt", "sha1", "md5" and "password"
# ("password" = MySQL password() function)
# You can also use "any" to try "crypt", "sha1", "md5" *and* "password"

Então aqui está a minha pergunta: existe alguma chance de eu poder configurar o Pure-FTPd para funcionar com o sha512, usando "crypt" por exemplo? Talvez eu pudesse usar o crypt e configurá-lo para usar o sha512 em outro lugar, não sei ...

EDITAR

Eu tentei trabalhar com as consultas, mas não consegui encontrar nenhum truque. Aqui está a consulta de senha:

MYSQLGetPW              SELECT password FROM ftp_accounts WHERE username='\L'

Soluções

Depois de algumas pesquisas e com a resposta que obtive, deduzi 3 soluções:

  • Desenvolva um design de módulo de autenticação Pure-FTPd para executar a consulta do MySQL e manipule o mecanismo de criptografia de senha. Isto implica portar o algoritmo PHP para C (ou outra linguagem), o que fiz usando a biblioteca OpenSSL. Inicie uma estrutura SHA512_CTX e obtenha seu primeiro resumo. Iterar 500 vezes com os parâmetros corretos e executar uma codificação de base 64. Você também pode usar o resultado hexadecimal, de acordo com as configurações do Symfony.
  • Defina crypt(3) para trabalhar com hashes SHA512 salgados em PureFTPd. Coisa complicada, quando você começa a falar sobre 500 iterações.
  • Desenvolva um comando do Symfony2 que executa a autenticação para você. Fácil como o inferno, funciona como um encanto. Crie um script executável (digamos /usr/bin/pureftpd-auth que simplesmente chama /path/to/php /path/to/app/console your:ftp:auth:command . chmod it, dê a ele um intérprete apropriado ( #!/bin/bash , ...) e inicie pure_authd e pureftpd em um soquete compartilhado para Faça com que eles se comuniquem. Consulte o link para obter mais informações.
por John WH Smith 15.08.2013 / 12:42

1 resposta

2

O glibc 2.7 e superior suportam o sha512, mas apenas de forma salgada. Se você tiver salgado SHA512-hashes, usando "crypt" deve funcionar imediatamente.

Se você tiver sha512-hashes sem sal: por favor, evite-os - seriamente. Existem bancos de dados pré-calculados disponíveis, portanto, procurar o hash desses bancos de dados fornecerá instantaneamente a senha em texto puro ou, pelo menos, algo que funcionará para um login bem-sucedido. Calcular hashes usando GPUs atuais também é extremamente rápido, portanto, é preciso evitar qualquer maneira sem sal.

Por exemplo, o link oferece a você uma boa interface web para pesquisar os milhões de senhas não salvas de seu hash e alguma educação sobre " hashes salgados vs. unsaltes ", escolhendo os sais corretos (randomizados) e os algoritmos hash" bons ".

Como exemplo real, milhões de hashes de senha unhashed do linkedin e do lastfm vazaram na Internet e demorou apenas alguns dias para encontrar correspondentes senhas de texto simples para a maioria deles usando bancos de dados de hash pré-calculados ou mesas de arco-íris. Usando hashes salgados, é mais provável que demore meses ou anos para encontrar alguns dados de texto simples correspondentes aos seus hashes.

Se você entende os riscos de hashes sem sal e ainda precisa implementar o sha512 unsalted via MySQL, você pode fazê-lo fornecendo um skript personalizado para pure-authd (é bastante trivial fazê-lo). Consulte o link para obter mais informações sobre isso.

    
por 16.08.2013 / 16:08