文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  疑難排解 SELinux

8.7.6 疑難排解 SELinux

疑難排解 SELinux 通常涉及將 SELinux 置於寬容模式、重新執行有問題的操作、檢查 SELinux 稽核記錄中是否有存取拒絕訊息,以及在問題解決後將 SELinux 放回強制模式。

為了避免使用 setenforce 將整個系統置於寬容模式,您可以使用 semanage 命令將其 SELinux 網域 (mysqld_t) 置於寬容模式,僅允許 MySQL 服務以寬容模式執行

semanage permissive -a mysqld_t

當您完成疑難排解後,請使用此命令將 mysqld_t 網域放回強制模式

semanage permissive -d mysqld_t

SELinux 會將遭拒絕的操作記錄寫入 /var/log/audit/audit.log。您可以搜尋 denied 訊息來檢查是否有拒絕。

grep "denied" /var/log/audit/audit.log

以下章節描述了一些可能會遇到與 SELinux 相關問題的常見領域。

檔案內容

如果 MySQL 目錄或檔案具有不正確的 SELinux 內容,則可能會拒絕存取。如果 MySQL 設定為從非預設目錄或檔案讀取或寫入,則可能會發生此問題。例如,如果您將 MySQL 設定為使用非預設的資料目錄,則該目錄可能不具有預期的 SELinux 內容。

嘗試在具有無效 SELinux 內容的非預設資料目錄上啟動 MySQL 服務會導致以下啟動失敗。

$> systemctl start mysql.service
Job for mysqld.service failed because the control process exited with error code.
See "systemctl status mysqld.service" and "journalctl -xe" for details.

在這種情況下,denial訊息會記錄到 /var/log/audit/audit.log

$> grep "denied" /var/log/audit/audit.log
type=AVC msg=audit(1587133719.786:194): avc:  denied  { write } for  pid=7133 comm="mysqld"
name="mysql" dev="dm-0" ino=51347078 scontext=system_u:system_r:mysqld_t:s0
tcontext=unconfined_u:object_r:default_t:s0 tclass=dir permissive=0

如需設定 MySQL 目錄和檔案正確的 SELinux 內容的資訊,請參閱第 8.7.4 節「SELinux 檔案內容」

通訊埠存取

SELinux 預期 MySQL 伺服器等服務會使用特定通訊埠。變更通訊埠而不更新 SELinux 原則可能會導致服務失敗。

mysqld_port_t 通訊埠類型定義 MySQL 接聽的通訊埠。如果您將 MySQL 伺服器設定為使用非預設通訊埠 (例如通訊埠 3307),並且未更新原則以反映變更,則 MySQL 服務將無法啟動

$> systemctl start mysqld.service
Job for mysqld.service failed because the control process exited with error code.
See "systemctl status mysqld.service" and "journalctl -xe" for details.

在這種情況下,拒絕訊息會記錄到 /var/log/audit/audit.log

$> grep "denied" /var/log/audit/audit.log
type=AVC msg=audit(1587134375.845:198): avc:  denied  { name_bind } for  pid=7340
comm="mysqld" src=3307 scontext=system_u:system_r:mysqld_t:s0
tcontext=system_u:object_r:unreserved_port_t:s0 tclass=tcp_socket permissive=0

如需設定 MySQL 正確的 SELinux 通訊埠內容的資訊,請參閱第 8.7.5 節「SELinux TCP 通訊埠內容」。啟用使用未定義必要內容的通訊埠的 MySQL 功能時,也可能會發生類似的通訊埠存取問題。如需詳細資訊,請參閱第 8.7.5.2 節「設定 MySQL 功能的 TCP 通訊埠內容」

應用程式變更

SELinux 可能不會察覺應用程式的變更。例如,新版本、應用程式擴充功能或新功能可能會以 SELinux 不允許的方式存取系統資源,導致存取遭拒。在這種情況下,您可以使用 audit2allow 公用程式來建立自訂政策,以允許必要的存取。建立自訂政策的典型方法是將 SELinux 模式變更為寬容模式 (permissive),識別 SELinux 稽核日誌中的存取拒絕訊息,然後使用 audit2allow 公用程式來建立自訂政策以允許存取。

關於使用 audit2allow 公用程式的資訊,請參閱您的發行版本之 SELinux 文件。

如果您遇到您認為應該由標準 MySQL SELinux 政策模組處理的 MySQL 存取問題,請在您的發行版本的錯誤追蹤系統中開啟錯誤報告。