Centos

即使在 VM 上為 SELinux 設置安全上下文後,MySQL 權限被拒絕錯誤

  • October 1, 2019

我在 CentOS 上安裝了 MySQL(下面給出了詳細版本)。我的作業系統是虛擬機而不是物理機,目錄/data/mysql是本地磁碟(虛擬)。我懷疑我可能需要在虛擬化環境中執行一些額外的步驟。此連結包含有關 SELinux 和虛擬化的一些資訊,但不確定如何將其包含在 MySQL 中。

MySQL 與其中的數據目錄一起工作正常,/var/lib/mysql但是當我將它移動到不同磁碟上的另一個目錄時,它停止工作。而同一磁碟上的不同目錄可以工作。如果我禁用 SELinux,MySQL 將使用不同的磁碟。SELinux 正在限制不同的驅動器。我嘗試了以下兩個連結中給出的解決方案

特別是以下兩個命令:

$ semanage fcontext --add --type mysqld_db_t '/data/mysql(/.*)?'
$ restorecon -r /data/mysql

當我執行時:

$ ls -dZ /data/mysql

我得到以下資訊:

drwxr-xr-x. mysql mysql unconfined_u:object_r:mysqld_db_t:SystemLow 

我仍然不斷得到:

/usr/sbin/mysqld:無法將目錄更改為“/data/mysql/”(錯誤程式碼:13 - 權限被拒絕)

還有什麼我需要做的嗎?

  • MySQL:mysql Ver 14.14 Distrib 5.6.14,適用於 Linux (x86_64),使用 EditLine 包裝器
  • 作業系統:CentOS 6.4 版(最終版)

/data/mysql就您正在執行的命令或您如何處理與 SELinux相關的添加而言,我認為您正在做的事情沒有任何直接的錯誤。

只是為了確保一切正常,我會檢查是否存在和/或手動將此行添加到/etc/selinux/targeted/contexts/files/file_contexts.local.

/data/mysql(/.*)?   system_u:object_r:mysqld_db_t:s0

當我重複上述步驟時,我已file_contexts.local按預期將該行添加到我的文件中。

我會根據標題為: 10.4.1的 Redhat 特定文件中討論的步驟仔細檢查您所遵循的步驟。MySQL 更改數據庫位置

在 Debian 9 和其他基於 systemd 的發行版上,如果沒有 SELinux 和 AppArmor,當 MySQL 數據目錄移動到 /home 下的任何位置時,可能會出現此問題。

原因是 systemd 服務文件 (/lib/systemd/system/mariadb.service) 包含設置: ProtectHome=true。此設置將阻止 MySQL 寫入 /home 下的任何文件夾,因此它將在啟動時拋出 ErrNo 13: Permission Denied 錯誤。

修復方法是將數據目錄移出 /home,或者關閉 systemd 服務文件中的此安全功能:

1: sudo cp /lib/systemd/system/mariadb.service /etc/systemd/system/ # 本地覆蓋服務文件

2:編輯**/etc/systemd/system/mariadb.service**並將ProtectHome更改為 false ( ProtectHome=false )。保存文件

3: sudo systemd daemon-reload # 刷新 systemd 服務,讓它看到你的覆蓋文件

4: sudo systemctl start mysql # 它應該終於啟動了

引用自:https://unix.stackexchange.com/questions/102558