Ubuntu 16.04下PAM与MySQL认证配置时pamtester报错求助
解决pamtester测试pam_mysql时出现"Unknown item type 'passwd'"的问题
我来帮你搞定这个问题,核心原因是你对pamtester的--item参数用法理解错了——passwd并不是pamtester支持的合法item类型,而且pam_mysql的配置参数也不应该通过pamtester的--item传递,而是要写在PAM配置文件里。
正确的操作步骤:
先配置好PAM规则文件
编辑/etc/pam.d/mysql,确保参数正确(替换掉X为你的实际值,注意crypt要和数据库密码的加密方式匹配):auth required pam_mysql.so user=X passwd=X host=127.0.0.1 db=X table=X usercolumn=X passwdcolumn=X crypt=1crypt参数说明:0=明文,1=CRYPT加密,2=MD5哈希,3=SHA256哈希,4=SHA512哈希,要和你数据库中存储密码的方式完全一致。
用正确的pamtester命令测试
不需要通过--item传递密码,pamtester会在交互时提示你输入,或者用管道实现非交互:- 交互模式(推荐,更直观):
执行后会出现pamtester mysql branja authenticatePassword:提示,输入用户branja的密码即可完成认证测试。 - 非交互模式(适合脚本):
echo "你的密码" | pamtester mysql branja authenticate
- 交互模式(推荐,更直观):
为什么之前的命令会报错?
pamtester的--item参数是用来设置PAM会话中的特定属性(比如user、tty、rhost等),但它根本不支持passwd这个类型,所以你一传递就会触发Unknown item type "passwd"错误。而pam_mysql需要的数据库连接、表字段等参数,必须写在PAM配置文件里,而不是交给pamtester处理。
额外排查点
如果配置后还是认证失败,可以:
- 查看
/var/log/auth.log日志,里面会有PAM认证的详细错误信息(比如数据库连接失败、密码不匹配等) - 确认数据库用户(就是你在pam_mysql配置里写的
user=X)有访问目标数据库和表的权限 - 验证数据库中存储的密码加密方式和
crypt参数完全匹配(比如如果密码是用SHA256哈希存储的,crypt要设为3)
内容的提问来源于stack exchange,提问作者Jared Brandt
相关产品推荐
相关产品推荐

