Linux

無法使用 SELinux 啟動 Mysql

  • August 24, 2016

我試圖在 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

https://www.centos.org/forums/viewtopic.php?t=8935

開始的地方是查看您的 /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命令不會將上下文設置回系統預設值。

引用自:https://serverfault.com/questions/560869