如何修复Ubuntu 18.04上MariaDB的PAM认证插件故障?
排查与修复MariaDB PAM认证失效问题
看起来你的MariaDB PAM认证突然失效的问题,大概率和系统级PAM配置变更、本地登录的特殊性,或者关键文件权限变化有关,咱们一步步排查修复:
一、先解决本地socket登录的核心问题
你创建的匿名兜底用户是''@'%',但MariaDB中%仅匹配TCP连接,本地通过socket登录的请求会被识别为localhost,这是最可能的直接原因:
- 登录MariaDB(如果还能通过其他方式,比如用
user_for_mapping账号),执行以下SQL创建localhost的匿名PAM用户并授权代理:
CREATE USER ''@'localhost' IDENTIFIED VIA pam USING 'mysql'; GRANT PROXY ON 'user_for_mapping'@'%' TO ''@'localhost'; FLUSH PRIVILEGES;
- 尝试用本地命令重新登录:
mysql -u ubuntu_user -p,看是否恢复正常。
二、检查PAM相关文件的权限与完整性
系统更新可能会意外修改文件权限或覆盖配置:
- 检查
pam_user_map.so的权限与所有者:
ls -l /lib64/security/pam_user_map.so
确保输出显示权限为-rwxr-xr-x(0755),所有者是root:root,如果不对,重新设置:
sudo chmod 0755 /lib64/security/pam_user_map.so sudo chown root:root /lib64/security/pam_user_map.so
- 检查
user_map.conf的权限:这个文件必须是root只读(0600),否则MariaDB会拒绝读取映射规则:
ls -l /etc/security/user_map.conf
如果权限不对,执行:
sudo chmod 0600 /etc/security/user_map.conf sudo chown root:root /etc/security/user_map.conf
- 确认
/etc/pam.d/mysql配置未被覆盖,重新写入确保内容正确:
sudo tee /etc/pam.d/mysql <<EOF auth required pam_unix.so audit account required pam_unix.so audit auth sufficient /lib64/security/pam_user_map.so EOF
三、开启PAM调试日志定位深层问题
如果上面的步骤没解决,需要看PAM认证的详细过程:
- 编辑
/etc/pam.d/mysql,添加debug参数开启调试:
sudo tee /etc/pam.d/mysql <<EOF auth required pam_unix.so debug account required pam_unix.so debug auth sufficient /lib64/security/pam_user_map.so debug EOF
- 重启MariaDB服务:
sudo systemctl restart mariadb
- 再次尝试登录,然后查看系统PAM日志:
grep mysql /var/log/auth.log
日志会显示PAM是否成功加载pam_user_map.so、是否读取了user_map.conf、用户映射是否匹配等关键信息,根据日志就能定位具体问题(比如映射规则错误、PAM模块加载失败等)。
四、排查系统级PAM变更
你的auth.log里有pkexec的权限错误,说明系统可能有PAM相关的更新:
- 查看最近升级的包,确认是否有PAM相关组件更新:
sudo apt list --upgraded | grep pam
如果有libpam-modules这类包更新,可能默认PAM规则有变化,需要确保/etc/pam.d/mysql的配置优先级正确,auth sufficient pam_user_map.so会在匹配成功后跳过后续认证,避免被其他PAM规则拦截。
内容的提问来源于stack exchange,提问作者gaska
相关产品推荐
相关产品推荐

