PureFTPD 1.0.50 与 MariaDB 身份验证失败,可能原因是哈希错误

PureFTPD 1.0.50 与 MariaDB 身份验证失败,可能原因是哈希错误

我使用 pure-ftpd 和 MariaDB 来验证用户。升级到 Debian 12 Bookworm 后,它停止工作。Debian 12 包含新的pure-ftpd 1.0.50,引入了以下变化:

Support for MD5, SHA1 and the MySQL PASSWORD() function were removed for password hashing. You should now use scrypt, argon2 or the system crypt(3) function.

因此我更新了 /etc/pure-ftpd/db/mysql.conf 以反映更改(在我使用 md5 之前):

# Mandatory : how passwords are stored
# Valid values are : "cleartext", "argon2", "scrypt", "crypt", and "any"
MYSQLCrypt      crypt

我尝试使用以下内容生成哈希单行

python3 -c 'import sys, crypt, getpass; print(crypt.crypt(getpass.getpass("Password: "), crypt.METHOD_SHA512))'

例如,对于密码“test”,我得到“$6$98sU0xdVjMC7CQk0$f5548Rnp4FBkF0lxHfU3P1Jpa0Y0ZtWg7BvNoeA91/U05gPnVi3yf1XRBuedwcYRk5YnFRdhn6/bZQm0xsKkW0”。我将此函数的结果放入数据库,但它仍然告诉我“登录验证失败”:

220 You will be disconnected after 15 minutes of inactivity.
331 User xxx OK. Password required
Password: 
530 Login authentication failed
ftp: Login failed
ftp> exit

我尝试打开详细输出,但没有提供更多信息。有人设法让 pure-ftpd 1.0.50 与 MariaDB/MySQL 配合使用吗?当我尝试时MYSQLCrypt cleartext,它工作正常,但我不认为这是以明文形式存储密码的最佳选择。

答案1

昨天从 ubuntu server 20.04 升级到 22.04 时,我遇到了完全相同的问题。按照此处接受的答案中的建议将 md5 更改为 crypt:

Pure-ftpd 与 MySQL - Crypt() 无法使用散列密码登录

我还必须恢复用户密码,因为某些 MD5 不容易用以下命令解密:

sudo tcpdump -l -i enp2s0 -f "port 21" | grep -i PASS --line-buffered > recoveredFTPpasswords.txt

答案2

我使用 argon2

如果你从另一个版本移植,则需要使用

ALTER TABLE `ftpd` CHANGE `Password` `Password` VARCHAR(150) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL;

安装 argon2

$ apt install argon2

您可以使用一个简单的脚本在 argon2 中创建密码

$ cat > /usr/local/bin/pw-pure-argon2

#!/bin/bash
salt=$(echo $RANDOM | md5sum | head -c 20)
echo -n "Password: "
read -s password
arg=$(echo -n $password | argon2 $salt | grep Encoded | awk '{ print $2}')
echo -e "$arg\n"

更改权限

$ chmod +x /usr/local/bin/pw-pure-argon2

执行,输入新密码

$ pw-pure-argon2

Password: $argon2i$v=19$m=4096,t=3,p=1$Y2YwY2JlZTdjZjNiMzVkZjJkMjY$lXbtcmoPkXH3gAchwVkkUZjOi4Vm7oFj7GzbUKRWaG0

插入到mysql表中就完成了。

相关内容