SELinux故障排除

SELinux是Fedora系統上最強大的安全功能之一。 這就像您的計算機服務的代客密鑰,只是允許它們訪問批准的數據。 SELinux因其困難而建立在其早期聲譽上。 現在,它具有適用於最受歡迎應用程序的可配置策略,並提供了額外的安全性和信心。 但是,有時錯誤的確會發生,本文將幫助您解決錯誤。

先決條件

本文假設兩件事:

  1. 您了解SELinux的基礎知識。 如果您不了解SELinux的基礎知識,那麼現在是進行此操作的好時機。
  2. 您正在以強制模式使用SELinux。 強制是啟動Fedora的正常方法。 如果禁用了SELinux,則需要啟用它。 編輯/ etc / sysconfig / selinux文件以將SELINUX設置為寬鬆。 使用寬鬆模式可確保仍然可以使用以下命令自動解決任何根本性問題。 然後,請按照下列步驟操作:
    sudo fixfiles -F onboot
    reboot

    由於SELinux重新標記了禁用時創建的所有文件,因此引導過程可能比平時花費更長的時間。 在非常大的文件系統上這可能需要一段時間,因此請耐心等待。

如果您已經在禁用模式下一段時間,在重新標記文件後開始看到錯誤,請不要感到驚訝。 在禁用模式下工作就像通過漏水粘合牆紙一樣。 移除牆紙時,您可能會發現水漬。 同樣,如果您已經在未啟用SELinux的情況下工作,則可能已經創建了更多當前需要解決的問題。

機器重新啟動後,可以切換到強制模式:

sudo setenforce 1

這真的在selinux中嗎?

判斷SELinux是否出錯的一個好方法是設置許可模式。 這意味着SELinux記錄錯誤,但仍然允許活動。 為此,請運行以下命令:

sudo setenforce 0

然後,如有必要,請在另一個終端中再次嘗試該過程。 如果SELinux策略成功,則會發生錯誤。 要在最近10分鐘內發現錯誤,請使用ausearch命令:

sudo ausearch -m AVC,USER_AVC,SELINUX_ERR -ts recent

如果該過程仍未處於允許模式,則問題很可能與SELinux策略無關。 在這種情況下,請確保運行sudo setenforce 1以返回到強制模式。 記住這個參數是 全球

定義問題

通常,您可以通過AVC消息發現SELinux錯誤。 AVC消息的參數之一是生成消息的命令。 例如,您可以在Apache Web服務器生成的SELinux錯誤消息中看到comm =“ / usr / sbin / httpd”。

該問題還將告訴您系統作用部分的源上下文(scontext),以及它試圖作用的事物的目標上下文(tcontext)。 通常,但並非總是如此,源是二進制文件和目標文件。 為了更好地理解錯誤,可以使用SELinux Troubleshooter。 您可以將其與Fedora Workstation中的工具軟件一起安裝,或在終端中將sudo與dnf一起使用:

sudo dnf install setroubleshoot

要啟動該程序,請使用Fedora Workstation中的“瀏覽”查找SELinux故障排除程序,或從終端運行:

sealert

您可以在出現的瀏覽器中找到最新的警報:

例如,在此屏幕上,您可以獲取系統中存在的所有警告的列表,以便系統地消除它們。

解決問題

選擇問題時,您將看到幾個錯誤選項。

SELinux故障排除

在這種情況下,用戶在其主目錄中創建了一個index.html文件,並使用mv命令將其移動到Apache Web服務器將提供的/ var / www / html /目錄中。 通過在Web瀏覽器中指向http:// //localhost/index.html,發生了此錯誤。

請注意,每個選擇如何為您提供一組特定的命令,您可以運行這些命令來解決問題。 在這種情況下,存在一個布爾選項,即使SELinux強制執行該策略,該選項也允許將來允許執行該操作。

但是,僅僅因為有一個布爾值, 並不意味着您必須在不了解的情況下將其打開。 在這種情況下,如果啟用布爾值,則Apache Web服務器將能夠讀取其權限允許文件訪問的任何用戶內容。 因此,在這種情況下,如果我們可以反問,“為什麼此文件具有上下文?” 在這種情況下,這是因為用戶移動了文件。 這意味着文件已通過其舊鏈接移動到新位置,而不是接收允許Web服務器讀取/ var / www / html中內容的新默認上下文。

在這種情況下,更好的主意是簡單地恢復正確的文件上下文:

sudo restorecon -rv /var/www/html/index.html
Relabeled /var/www/html/index.html from unconfined_u:object_r:user_home_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0

關於SELinux中布爾運算的注釋

有許多布爾運算可用。 這些中的每一個都允許您設置應用程序正常運行所需的廣泛訪問類。 要查看整個列表及其當前設置,請運行以下命令:

semanage boolean -l

如果首先安裝selinux-policy-devel軟件包,則在運行上述命令時,還可以看到每個布爾操作的簡短說明:

SELinux boolean State Default Description

abrt_anon_write (off, off) Allow ABRT to modify public files used for public file transfer services.
abrt_handle_event (off, off) Determine whether ABRT can run in the abrt_handle_event_t domain to handle ABRT event scripts.
abrt_upload_watch_anon_write (on, on) Determine whether abrt-handle-upload can modify public files used for public file transfer services in /var/spool/abrt-upload/.
antivirus_can_scan_system (off, off) Allow antivirus programs to read non security files on a system
...

要臨時設置布爾值,請運行以下命令,其中boolname是布爾值的名稱,值是on或1,或者off或0。

setsebool boolname=value

要永久安裝它,請添加-P開關:

setsebool -P boolname=value

結論

您還可以執行其他功能來解決SELinux中的問題,例如為系統創建特定的策略模塊。 您可以在SELinux手冊(https://docs-old.fedoraproject.org/en-US/Fedora/25/html/SELinux_Users_and_Administrators_Guide/index.html)中找到它們,這有助於理解這些功能。

Sidebar