即使在 VM 上為 SELinux 設置安全上下文後,MySQL 權限被拒絕錯誤
我在 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 # 它應該終於啟動了