我使用 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 会包含类似的记录)
当更改密码加密方案时,您也会丢失所有存储的密码并需要重置它们。