Для перехода с закрытого кода de-factor glftpd 2.01 на proftpd мне нужно перенести хэши паролей учетных записей пользователей с glftpd на proftpd. Читая эту тему, я решил, что mod_sql_passwd должен помочь.
Поэтому я настроил свой сервер proftpd следующим образом:
<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>
Хэши в glftpd passwd выглядят так:
$7e8ab0c7$bf044082ab83875eeb3a2158cd6253f8e88f40cf
База данных выглядит так (представление 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"
Все конфигурации на данный момент приводят к:
USER test (Login failed): No such user found
Хотя на самом деле пользователь существует, и путем изменения хеша на хеш в стиле Crypt () Bcrypt, вход в систему проходит успешно.
Вопросы / проблемы:
SQLPasswordOptions HashPassword HashSalt
что казалось наиболее логичным, но безуспешно [²]Было бы здорово услышать от кого-нибудь, как у вас была аналогичная задача и был некоторый опыт в этом виде миграции. Также приветствуются дополнительные подсказки, помогающие решить эту тему.
[¹] 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
Решено:
<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
Port 0
<VirtualHost 0.0.0.0>
Port 21
PassivePorts 10000 10250
MasqueradeAddress 123.123.123.123
SQLPasswordEngine on
SQLAuthTypes pbkdf2
SQLPasswordPBKDF2 sha1 100 20
SQLNamedQuery get-user-salt SELECT "salt FROM ftpuser WHERE userid = '%{0}'"
SQLPasswordUserSalt sql:/get-user-salt Prepend
SQLPasswordEncoding hex
SQLPasswordSaltEncoding hex
SQLPasswordOptions HashEncodeSalt HashEncodePassword
</VirtualHost>
Должен был
SQLPasswordEncoding
и SQLPasswordSaltEncoding
SQLPasswordPBKDF2
SQLPasswordOptions
чтобы указать модулю сначала декодировать шестнадцатеричные значения, а затем использовать хешиSQLPasswordEngine