Linux
無法使用 SELinux 啟動 Mysql
我試圖在 CentOS 6 上使用 SELinux 啟動 MySQL,但出現以下錯誤。
131212 09:08:08 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended 131212 09:08:58 mysqld_safe Starting mysqld daemon with databases from /u/mysql 131212 9:08:58 [Warning] Can't create test file /u/mysql/webserver.lower-test 131212 9:08:58 [Warning] Can't create test file /u/mysql/webserver.lower-test ^G/usr/libexec/mysqld: Can't change dir to '/u/mysql/' (Errcode: 13) 131212 9:08:58 [ERROR] Aborting
我們已經將 MySQL 與許多其他伺服器一起設置,但這裡的不同之處在於 mysql 數據目錄與標準 /vat/lib.mysql 位於不同的分區中。相反,它位於 /u/mysql 中。
這是/etc/my.cnf
[mysqld] datadir=/u/mysql user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 max_allowed_packet = 32M [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
這是mysql目錄的權限
drwxr-xr-x. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql
這是 /u/mysql 目錄中的目錄之一的權限
drwx------. mysql mysql system_u:object_r:mysqld_db_t:s0 databasefolder
有沒有人對如何解決這個問題有任何想法?我可以確認關閉 SELinux 可以解決問題,因此它必須是某種 SELinux 權限問題。
謝謝
我的同事建議這最終解決了這個問題。
您可以通過以下方式查看人類可讀的拒絕原因
audit2why -a
要生成新的策略模組,請使用
audit2allow -a -M <policyname>
如果你得到未找到的錯誤
yum install policycoreutils-python pschaff
開始的地方是查看您的 /var/log/audit/audit.log 以獲取與 mysqld 相關的 AVC 拒絕消息。這些可以傳遞給audit2why以收集更多資訊以幫助您決定要做什麼。
您的 mysql 文件位於非標準位置,儘管目錄具有正確的上下文,但其中的文件可能不是。實現這一點的最好方法是為 /u/mysql 目錄添加一個新的 fcontext
semanage fcontext -a -t mysqld_db_t "/u/mysql(/.*)?" restorecon -rv /u/mysql
semanage命令配置策略,以便後續的restorecon命令不會將上下文設置回系統預設值。