MySQL PAM Plugin設定

  • 安裝
在my.cnf中設定後重開:
[mysqld]
plugin-load=authentication_pam.so
  • 在Linux中設定
在/etc/pam.d中新增一個文件,名稱與服務相同(若服務為mysql檔名就叫mysql,若叫mysqld就叫mysqld)
vim /etc/pam.d/mysql

#%PAM-1.0
auth            include         password-auth
account         include         password-auth
  • 使用PAM來登入MySQL
如果可以讓使用都屬在mysql的群組中,不行的話就要透過proxy來mapping使用者
mysql> create user 'wang'@'127.0.0.1' IDENTIFIED WITH authentication_pam as 'mysql';

     ^^^後面as 'mysql'這個就是pam.d裡面設的那個檔案名稱

記得權限要另外設定

  • 除錯
登入時一直出現ERROR 1045 (28000): Access denied for user 'wang'@'127.0.0.1' (using password: YES),在/var/log/security中記錄:
Jun 18 19:23:31 ol65 unix_chkpwd[7097]: check pass; user unknown
Jun 18 19:23:31 ol65 unix_chkpwd[7099]: check pass; user unknown
Jun 18 19:23:31 ol65 unix_chkpwd[7099]: password check failed for user (wang)
Jun 18 19:23:31 ol65 mysqld: pam_unix(mysql:auth): authentication failure; logname= uid=496 euid=496 tty= ruser=wang rhost=127.0.0.1  user=wang

這個原因是mysql這個服務的權限無法讀取/etc/shadow的內容導致的問題,解法:
[root@ol65 pam.d]# chown root:mysql /etc/shadow
[root@ol65 pam.d]# chmod g+r /etc/shadow

參考https://revolutionanalytics.zendesk.com/entries/83870646-Configuring-PAM-authentication-on-Red-Hat-Enterprise-Linux-6-5-on-AWS

2017/2/20更新:
之前的解法是直接把/etc/shadow這個檔案的群組設給mysql有權限去讀,顯然不是個好做法 本次更新將mysql這個使用者加到shadow的群組之下,並將/etc/shadow的群組權限給shadow:
[root@mysql-course percona57]# usermod -a -G shadow mysql
[root@mysql-course percona57]# grep 'shadow' /etc/group
shadow:x:985:mysql
[root@mysql-course mysql-ee]# ls -alh /etc/shadow
----r----- 1 root shadow 1.4K Feb 20 14:58 /etc/shadow
[root@mysql-course percona57]# mysql.server restart (記得要重啟mysqld服務才會生效)

留言

這個網誌中的熱門文章

【工作筆記】SQL Timeout追蹤

MySQL監控軟體MEM及PMM介紹

MySQL Router 設定檔說明