MySQL 伺服器會讀取和寫入許多檔案。如果這些檔案的 SELinux 上下文未正確設定,則可能會拒絕存取這些檔案。
以下指示使用 semanage
二進位檔案來管理檔案上下文;在 RHEL 上,它是 policycoreutils-python-utils
套件的一部分。
yum install -y policycoreutils-python-utils
安裝 semanage
二進位檔案後,您可以使用 semanage
和 fcontext
選項來列出 MySQL 檔案上下文。
semanage fcontext -l | grep -i mysql
預設資料目錄位置為 /var/lib/mysql/
;使用的 SELinux 上下文為 mysqld_db_t
。
如果您編輯組態檔案以使用不同的資料目錄位置,或用於通常位於資料目錄中的任何檔案(例如二進位日誌),您可能需要設定新位置的上下文。例如
semanage fcontext -a -t mysqld_db_t "/path/to/my/custom/datadir(/.*)?"
restorecon -Rv /path/to/my/custom/datadir
semanage fcontext -a -t mysqld_db_t "/path/to/my/custom/logdir(/.*)?"
restorecon -Rv /path/to/my/custom/logdir
RedHat RPM 的預設位置為 /var/log/mysqld.log
;使用的 SELinux 上下文類型為 mysqld_log_t
。
如果您編輯組態檔案以使用不同的位置,則可能需要設定新位置的上下文。例如
semanage fcontext -a -t mysqld_log_t "/path/to/my/custom/error.log"
restorecon -Rv /path/to/my/custom/error.log
PID 檔案的預設位置為 /var/run/mysqld/mysqld.pid
;使用的 SELinux 上下文類型為 mysqld_var_run_t
。
如果您編輯組態檔案以使用不同的位置,則可能需要設定新位置的上下文。例如
semanage fcontext -a -t mysqld_var_run_t "/path/to/my/custom/pidfile/directory/.*?"
restorecon -Rv /path/to/my/custom/pidfile/directory
Unix 網域 Socket 的預設位置為 /var/lib/mysql/mysql.sock
;使用的 SELinux 上下文類型為 mysqld_var_run_t
。
如果您編輯組態檔案以使用不同的位置,則可能需要設定新位置的上下文。例如
semanage fcontext -a -t mysqld_var_run_t "/path/to/my/custom/mysql\.sock"
restorecon -Rv /path/to/my/custom/mysql.sock
適用於 5.6.34、5.7.16 和 8.0.11 以後的 MySQL 版本。
安裝 MySQL Server RPM 會建立 /var/lib/mysql-files/
目錄,但不會為其設定 SELinux 上下文。/var/lib/mysql-files/
目錄旨在用於諸如 SELECT ... INTO OUTFILE
等作業。
如果您已啟用此目錄的使用權限,透過設定 secure_file_priv
,您可能需要像這樣設定 context。
semanage fcontext -a -t mysqld_db_t "/var/lib/mysql-files/(/.*)?"
restorecon -Rv /var/lib/mysql-files
如果您使用了不同的位置,請編輯此路徑。為了安全起見,此目錄絕對不應該位於資料目錄內。
有關此變數的更多資訊,請參閱 secure_file_priv
文件。