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.