使用 vsftpd 进行密码哈希处理的自定义算法

使用 vsftpd 进行密码哈希处理的自定义算法

传统上,当客户端登录时,它会发送凭证(用户名+密码)而不进行任何进一步处理。然后,服务器检查其用户数据库中是否存在与提供的凭证匹配的条目。

为了在数据库被泄露时使密码恢复更加困难,密码以哈希形式存储。这意味着客户端或服务器对密码进行哈希处理,然后检查凭证是否匹配。

但是,如果客户端进行哈希处理,它实际上就变得毫无用处了。为什么?因为哈希密码现在被用作密码。有人可以窃取数据库,读取哈希并将其与用户名一起发送,并且仍然获得访问权限。

这就是为什么必须在服务器上进行散列的原因,这样如果事先不知道密码就不可能登录。

但是,我找不到任何使用 PAM 模块来实现这一点的方法,以便 vsftpd 使用它进行登录。请注意,我不想使用普通的哈希函数,因为它们不适合密码。我需要使用 KDF,例如 scrypt 或 bcrypt。

我是否必须编写自己的 PAM 模块或是否必须根据需要生成 htpasswd 哈希?

tl;dr 如何使用 vsftpd 的服务器端密码哈希执行用户身份验证?

答案1

crypt()PAM 使用的可能仅支持 BCRYPT 而不支持 SCRYPT(或两者都不支持)。在所有情况下,您只需要在编码密码时设置方法,而不是在检查密码时设置方法。

由于 vsftp 使用系统密码文件,因此您需要重新配置 PAM 以使用 BCRYPT。这取决于实际使用的 unix/linux。只要您的 passwd 文件包含$2y$带前缀的密码哈希(您可以使用最近的密码htpasswd -B哈希生成它们),您就大功告成了。

一些 Linux 支持authconfig --passalgo=blowfish --update其他,您需要找到正确的 PAM 配置文件并将 blowfish 添加到密码行:

password sufficient /lib/security/pam_unix.so nullok use_authok blowfish shadow

相关内容