デファクターのクローズドソースglftpd2.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>
Glftpdpasswdのハッシュは次のようになります。
$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
を使用して出力長を40バイトから20バイトに修正しますSQLPasswordOptions
を追加して、最初に16進値をデコードし、次にハッシュを使用するようにモジュールに指示します。SQLPasswordEngine
を有効にします