Fedora
SELinux 不允許讀取 ~/.cert 上的文件
我是 Fedora 23 和 SELinux 的新手。我通過 NetworkManager 使用 OpenVPN 客戶端。我在裡面儲存了我需要 OpenVPN 訪問的所有文件(證書、CA 和私鑰)
~/.cert
並執行updatecon -R -v ~/.cert
. 但是,我仍然收到來自 SELinux 的 AVC 錯誤,他們不允許 OpenVPN 訪問此類文件。這是輸出的相關部分grep AVC /var/log/audit/audit.log | less
:type=AVC msg=audit(1457179403.296:364): avc: denied { open } for pid=2608 comm="nm-openvpn-serv" path="/home/ggoncalves/.cert/ggoncalves.key" dev="dm-2" ino=2888752 scontext=system_u:system_r:NetworkManager_t:s0 tcontext=system_u:object_r:svirt_sandbox_file_t:s0:c50,c545 tclass=file permissive=0 type=AVC msg=audit(1457179403.296:365): avc: denied { open } for pid=2608 comm="nm-openvpn-serv" path="/home/ggoncalves/.cert/ggoncalves.key" dev="dm-2" ino=2888752 scontext=system_u:system_r:NetworkManager_t:s0 tcontext=system_u:object_r:svirt_sandbox_file_t:s0:c50,c545 tclass=file permissive=0 type=AVC msg=audit(1457179403.330:366): avc: denied { read } for pid=2611 comm="openvpn" name="lastline-ca.crt" dev="dm-2" ino=2888749 scontext=system_u:system_r:openvpn_t:s0 tcontext=system_u:object_r:svirt_sandbox_file_t:s0:c50,c545 tclass=file permissive=0 type=AVC msg=audit(1457179403.332:367): avc: denied { read } for pid=2611 comm="openvpn" name="ggoncalves.crt" dev="dm-2" ino=2888751 scontext=system_u:system_r:openvpn_t:s0 tcontext=system_u:object_r:svirt_sandbox_file_t:s0:c50,c545 tclass=file permissive=0 type=AVC msg=audit(1457179403.332:368): avc: denied { read } for pid=2611 comm="openvpn" name="ggoncalves.key" dev="dm-2" ino=2888752 scontext=system_u:system_r:openvpn_t:s0 tcontext=system_u:object_r:svirt_sandbox_file_t:s0:c50,c545 tclass=file permissive=0
由於我只使用 SELinux 幾天,我不知道從哪裡開始尋找它。有什麼提示嗎?
**編輯:**在我看來,問題出在
svirt_sandbox_file_t
標籤上。我相信這些文件應該被標記為home_cert_t
.**編輯 2:**事實上,
svirt_sandbox_file_t
由於某種原因,我的整個主目錄都被標記了。這是 Docker 策略的功能還是錯誤?更新
好吧,這需要一段時間。讓我進一步描述這個問題,以防有人最終遇到同樣的問題。事實證明,
svirt_sandbox_file_t
當我將主目錄掛載為帶有:Z
標誌的捲時,Docker 已將其歸因於(如此處所述)。然後 Docker 將該標籤遞歸地應用於我的整個主目錄,並且不知何故重新配置 FS 標籤或應用都restorecon
不起作用。為了將我的家恢復到原始權限,我
rsync
將它放到一個臨時文件夾中,刪除了其中rsync
的所有內容並返回。不是最聰明的主意,但它奏效了。
文件的目標上下文類型仍然錯誤:
svirt_sandbox_file_t
中的文件
~/.cert
應標記為home_cert_t
. 再試一次restorecon -Rf ~/.cert
或嘗試強制類型:
chcon -t home_cert_t ~/.cert/*
selinux-policy 或 docker selinux 策略中可能存在一些錯誤,導致錯誤的預設標籤。