Mysql
將密碼雜湊從 glftpd 2.01 (PKCS5_PBKDF2_HMAC_SHA1) 遷移到 proftpd + mod_sql_passwd
為了從 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 樣式散列,但登錄成功。
問題/問題:
- 從 glftpd 可用的少量資源中不清楚 glftpd 的雜湊使用了多少次迭代,可以得出 100 的迭代值
- 尚不清楚美元符號是否應添加到鹽和雜湊值之前
- 帶有 DebugLevel 10 的proftpd 除了“使用者測試(登錄失敗):沒有找到這樣的使用者”之外沒有其他資訊,但是,使用普通的 Crypt() Bcrypt 類型的雜湊它可以完美地工作(參見配置的頂部)
- 目前還不清楚 glftpd 2.01 雜湊是如何構造的,我嘗試
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
- 將輸出長度從 40 字節糾正為 20 字節
SQLPasswordPBKDF2
- 添加
SQLPasswordOptions
以指示模組首先解碼十六進制值,然後使用散列- 啟用
SQLPasswordEngine