Pour migrer de la source fermée glftpd 2.01 vers proftpd, j'ai besoin de migrer les hachages de mots de passe des comptes utilisateurs de glftpd vers proftpd. En lisant sur le sujet, je me suis dit que mod_sql_passwd devrait faire l'affaire.
J'ai donc configuré mon serveur proftpd comme ceci :
<global>
SQLBackend mysql
SQLAuthTypes Crypt
SQLAuthenticate users groups
SQLConnectInfo testdbuser@testdbhost testdb
SQLUserInfo ftpuser userid passwd uid gid homedir shell
SQLGroupInfo ftpgroup groupname gid members
SQLMinID 500
CreateHome on
[...]
RootLogin off
RequireValidShell off
DefaultRoot ~
</global>
DefaultServer off
ServerType standalone
<VirtualHost 0.0.0.0>
Port 21
PassivePorts 10000 10250
MasqueradeAddress 123.123.123.123
SQLAuthTypes pbkdf2
SQLPasswordPBKDF2 sha1 100 40
SQLNamedQuery get-user-salt SELECT "salt FROM ftpuser WHERE userid = '%{0}'"
SQLPasswordUserSalt sql:/get-user-salt Prepend
</VirtualHost>
Les hashs dans le passwd de glftpd ressemblent à ceci :
$7e8ab0c7$bf044082ab83875eeb3a2158cd6253f8e88f40cf
La base de données ressemble à ceci (représentation CSV) :
"id","userid","passwd","salt","uid","gid","homedir","shell","count","accessed","modified"
"1","test","bf044082ab83875eeb3a2158cd6253f8e88f40cf","7e8ab0c7","5500","5500","/data/test","/sbin/nologin","20","2020-03-31 20:02:45","2020-03-25 16:30:49"
Toutes les configurations effectuées jusqu'à présent ont pour résultat :
USER test (Login failed): No such user found
Alors qu'en fait l'utilisateur existe et en changeant le hachage en un hachage de type Crypt() Bcrypt, une connexion réussit.
Questions/problèmes :
- il n'est pas clair combien d'itérations sont utilisées pour les hachages de glftpd à partir du peu de source disponible de glftpd, une valeur d'itération de 100 peut être déduite
- il n'est pas clair si le signe dollar doit être ajouté au sel et aux valeurs de hachage ou pas
- proftpd avec DebugLevel 10 ne donne aucune autre information que "USER test (Login failed) : No such user found", bien que, avec un hachage normal de type Crypt() Bcrypt, cela fonctionne parfaitement (voir le haut de la configuration).
- La façon dont les hachages de glftpd 2.01 sont construits n'est pas claire.
SQLPasswordOptions HashPassword HashSalt
qui semblait le plus logique, sans succès [²].
Il serait formidable d'entendre quelqu'un qui a eu une tâche similaire et qui a acquis une certaine expérience de ce type de migration. Des indices supplémentaires permettant de résoudre ce sujet sont également les bienvenus.
[¹] https://glftpd.io/files/glftpd-LNX_2.01.tgz (bin/sources/PassChk/passhk.c) glftpd 2.01 "passchk.c" :
PKCS5_PBKDF2_HMAC_SHA1(pwd, strlen(pwd), real_salt, SHA_SALT_LEN, 100,
mdlen, md);
[²] http://www.proftpd.org/docs/contrib/mod_sql_passwd.html#Transformations