Centos7

SELinux 在啟動時重新標記卡住了

  • January 23, 2019

我在伺服器上恢復 SELinux 時遇到問題,希望得到一些見解。

語境

在我們的伺服器上,我最近將 SELinux 從 更改enforcingpermissive,因為它沒有解決我們的問題,這是一個奇怪的問題(意外的權限被拒絕),我什至將它設置為disabled… 無論如何,SELinux 不是問題。我們想通了,現在已經解決了……但是 SELinux 現在被禁用了!

現在我想恢復它。因此,我只是將其更改為enforcing再次,並且我希望系統能夠自動檢測到它需要touch /.autorelabel在下次啟動時重新標記(因此不需要),that-work-in-the-past(tm)。可悲的是,它在啟動過程中卡住了,10 分鐘後我們又回到禁用狀態以恢復服務。文件指出這可能需要很長時間,所以我已安排在周末重新啟動。週末過後,它仍然卡在啟動中。

奇怪的是,伺服器的 HDD 沒有顯示任何磁碟活動。

當我在虛擬機上執行上述操作時,它會啟動到同一點,然後列印一條消息,表明需要執行 SELinux 重新標記並執行此操作。在伺服器上,我們看不到該消息。

評論

伺服器有一些 CIFS 掛載,這會是 SELinux 嘗試重新標記 CIFS 文件系統的原因嗎?這可以解釋更長的時間和無磁碟活動,但這不能解釋控制台上沒有消息。

技術資訊

  • CentOS 7.6 (1810) x86_64
  • 裸機、戴爾伺服器、6x HDD RAID6(硬體)
  • 沒有日誌寫入磁碟,最後啟動的單元是Update UTMP about System Boot/Shutdown.

注意:有一篇RHEL 知識庫文章建議先通過許可從禁用到強制執行。並且每次重新啟動時,通過觸摸強制重新標記/.autorelabel。這將是我周末的下一次嘗試。但歡迎對正在發生的事情有任何見解。

更新01

我現在做了進一步的測試。以下所有引導模式均失敗:

  1. 啟動selinux=1, enforcing=0, autorelabel=0
  2. 啟動selinux=1, enforcing=0, autorelabel=1
  3. 啟動selinux=1, enforcing=1, autorelabel=0
  4. 啟動selinux=1, enforcing=1, autorelabel=1

只有啟動與selinux=0工作。當我的意思是失敗時,這意味著引導時控制台上沒有錯誤消息,也沒有關於 SELinux 重新標記的消息,系統掛起數小時,沒有可見的磁碟活動。

我現在已經註釋掉了cifs我的所有捲,/etc/fstab並允許使用自動重新標記重新啟動。啟動花了大約 20 分鐘,但我可以看到它正在做某事(它列印在控制台上,顯示重新標記已啟動,顯示像 sysfs 這樣的 FS 是只讀的並且被忽略,磁碟活動可見等)。所以 SELinux 現在是在許可模式下啟用的。我現在將在本週末嘗試執行模式。

顯然,這些 CIFS 掛載似乎是問題所在,但我不明白為什麼。對我來說,我的理解是 CIFS 掛載會被重新標記忽略,就像 sysfs 一樣。我在這裡誤解了什麼嗎?

有什麼具體的使用理由/.autorelabel嗎?我的理解是它觸發了restorecon.

要弄清楚為什麼會掛起,我建議切換到許可模式,並在沒有/.autorelabel文件的情況下啟動機器。當系統啟動並執行時嘗試restorecon -rFv /。最終不要從整個系統的/例如或較小部分開始。/var

restorecon的-v標誌顯示文件系統上所有正在進行的修改。它應該讓您很好地了解它在引導期間“掛起”的位置/.autorelabel。我希望文件系統中有一些區域儲存了許多小文件。或者最終網路安裝儲存。

完成此操作後,切換到enforcing不應該需要再次/.autorelabel執行。

$$ edit $$ 我剛剛在 Fedora 29 機器上驗證了/.autorelabel上述聲明。啟動它是一個 bash 腳本。該腳本使用參數執行。 是另一個實際執行的 bash 腳本。restorecon``/lib/systemd/system/selinux-autorelabel.service``/usr/libexec/selinux/selinux-autorelabel``/sbin/fixfiles``restore``/sbin/fixfiles``restorecon

引用自:https://serverfault.com/questions/948959