pt-kill - 作為服務執行時如何安全地允許訪問 mysql 伺服器
我知道如何將 pt-kill 作為 systemd 服務執行:
[Unit] Description = pt-kill myUser After=syslog.target mysql.service Requires=mysql.service [Service] Type = simple PIDFile = /var/run/ptkill.pid ExecStart = /usr/bin/pt-kill -uxxx -pxxx --daemonize --pid=/var/run/ptkill.pid --log=/var/log/ptkill.log --match-user myUser --match-state "Sending data" --busy-time 640 --kill-query --print Restart=on-abort [Install] WantedBy=multi-user.target
但是,這樣另一個系統使用者可以通過以下方式查看 mysql root 密碼
ps -e -o pid,unit,cmd
:7786 ptkill.service perl /usr/bin/pt-kill -uxxx -pxxx --daemonize --pid=/var/run/ptkill.pid --log=/var/log
我嘗試添加
User=root
到 - 部分[Service]
,因為 root 使用者已經保護/root/.my.cnf
了配置對 mysql 的無密碼訪問的位置。可悲的是,這不起作用(我沒有權限訪問 mysql 而不指定使用者…啟動時ptkill.service
,我認為.my.cnf
啟動 ptkill.service 時未載入受保護的內容)。我還嘗試添加參數“-umyUser -pcat /path/to/my/password
”,這也不起作用。如何安全地執行 pt-kill 作為系統服務 pt-kill 以及如何安全地讓它訪問 mysql 伺服器?
我希望你不是我的同事之一 :-) 幾週前他不得不設置一個與你非常相似的配置——如果這對你有幫助,你可以查看我們的軟體包:Source deb,puppetization。
我告訴他使用基於套接字的身份驗證,這與我們用於僅需要本地權限的非人類帳戶(icinga,prometheus)的方法相同。您只需要啟用外掛並告訴與服務將要執行的帳戶同名的帳戶即可使用它,因此不需要密碼。因為沒有密碼,所以不能被盜,所以主機的危害不會升級為更嚴重的問題。私人處理的事情也更少。除非存在 MySQL 錯誤,否則該帳戶與您的作業系統帳戶一樣安全。您必須為 MySQL(auth_socket 將證明基於密碼的身份驗證並將其鎖定到本地主機)和作業系統(具有鎖定登錄的系統使用者)創建一個非 root 帳戶,否則它會破壞它的要點。
如果由於某種原因您不能使用上述方法,您仍然可以使用基於密碼的身份驗證,但將其設置在其自己的配置文件中,該配置文件只能由您啟動服務的使用者(非 root)讀取。
重點始終是為服務提供盡可能少的權限。根使用不僅提供了最大數量,它還與您不希望的一些作業系統(日誌記錄、限制等)和 mysql 限制(max_connections)重疊,即使它實際上有很多權限來殺死其他程序。