编辑

编辑

我使用 Postfix 设置了一个邮件服务器,并将其配置为使用 Cyrus SASL 来验证我的用户。它运行得很好,直到我发现我可以使用比实际密码更短的密码登录。

例如密码应该是uhuh1234h22我可以使用以下方式登录:

uhuh1234
uhuh1234h
uhuh1234h2
uhuh1234h22

不要用任何更短的东西...

我使用以下命令进行了测试:

testsaslauthd -u USERNAME -p PASSWORD -s smtp -f /var/spool/postfix/var/run/saslauthd/mux

我的问题是为什么会发生这种情况以及我该如何防止这种情况发生?

编辑

我的 /etc/pam.d/smtp 中的配置文件是:

auth    required   pam_mysql.so user=USR passwd=PASS host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1
account sufficient pam_mysql.so user=USR passwd=PASS host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1

答案1

问题在于你使用crypt。来自pam_mysql 文档

crypt (0)

Specifies the method to encrypt the user's password:
 0 (or "plain") = No encryption. Passwords stored in plaintext. HIGHLY DISCOURAGED. 
 1 (or "Y") = Use crypt(3) function 
 2 (or "mysql") = Use MySQL PASSWORD() function. It is possible that the encryption function used by pam-mysql is different from that of the MySQL server, as pam-mysql uses the function defined in MySQL's C-client API instead of using PASSWORD() SQL function in the query. 
 3 (or "md5") = Use MySQL MD5() function

您的crypt参数设置为1,这意味着crypt使用该函数。这是crypt正在做什么

取最低 7 位密钥的前八个字符,得到一个56位的密钥。

您应该使用其他存储方案之一(最好是 2 或 3)来允许更长的密码。

请注意,您可能还需要检查 /etc/pam.d 中的其他服务定义,以确保您已涵盖所有内容(如果您在同一主机上有一个使用 SASL 进行身份验证的 Cyrus IMAP 服务器,则至少 /etc/pam.d/imap 会包含类似的记录)

当更改密码加密方案时,您也会丢失所有存储的密码并需要重置它们。

相关内容