系統管理員 SELinux 備忘單:42 個重要問題的答案

文章的翻譯是專門為課程的學生準備的 《Linux 管理員》.

系統管理員 SELinux 備忘單:42 個重要問題的答案

在這裡,您將獲得有關生命、宇宙和 Linux 中一切的重要問題的答案,並且安全性更高。

“一個重要的事實是,事情並不總是像看起來那樣,這是常識…”

-道格拉斯·亞當斯, 銀河系漫遊指南

安全。 可靠性提高。 一致。 政策。 天啟四騎士系統管理員。 除了我們的日常任務 - 監控、備份、實施、配置、更新等 - 我們也負責我們系統的安全。 即使是第三方提供者建議我們停用增強安全性的系統。 感覺就像工作一樣 伊森亨特 摘自《不可能的任務》。

面對這種困境,一些系統管理員決定採取 藍色藥丸,因為他們認為他們永遠不會知道生命、宇宙等大問題的答案。 眾所周知,答案是 42。

本著《銀河系漫遊指南》的精神,以下有 42 個有關控制和使用的重要問題的答案。 SELinux的 在您的系統上。

1. SELinux 是一個強制存取控制系統,這意味著每個進程都有一個標籤。 每個檔案、目錄和系統物件也有標籤。 策略規則控制標記的進程和物件之間的存取。 內核強制執行這些規則。

2. 最重要的兩個概念是: 標籤 — 標記(檔案、進程、連接埠等)和 類型強制執行 (根據類型將進程彼此隔離)。

3. 正確的標籤格式 user:role:type:level (選修的)。

4. 提供多層安全的目的(多級安全 - MLS)是根據進程(域)將使用的資料的安全性等級來管理進程(域)。 例如,秘密進程無法讀取絕密資料。

5. 確保多類別安全(多類別安全 - MCS) 保護類似進程免受彼此影響(例如,虛擬機器、OpenShift 引擎、SELinux 沙箱、容器等)。

6. 用於啟動時更改 SELinux 模式的核心選項:

  • autorelabel=1 → 導致系統運作重新標記
  • selinux=0 → 核心不載入 SELinux 基礎設施
  • enforcing=0 → 以寬容模式加載

7. 如果您需要重新標記整個系統:

# touch /.autorelabel
#reboot

如果系統標記包含大量錯誤,您可能需要以寬容模式啟動才能成功重新標記。

8. 檢查 SELinux 是否已啟用: # getenforce

9. 暫時啟用/停用 SELinux: # setenforce [1|0]

10. 檢查 SELinux 狀態: # sestatus

11. 設定檔: /etc/selinux/config

12. SELinux 是如何運作的? 以下是 Apache Web 伺服器的標記範例:

  • 二進位表示: /usr/sbin/httpd→httpd_exec_t
  • 配置目錄: /etc/httpd→httpd_config_t
  • 日誌檔案目錄: /var/log/httpd → httpd_log_t
  • 內容目錄: /var/www/html → httpd_sys_content_t
  • 啟動腳本: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • 過程: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • 端口: 80/tcp, 443/tcp → httpd_t, http_port_t

進程在上下文中運行 httpd_t,可以與標記的物件交互 httpd_something_t.

13. 許多命令接受參數 -Z 查看、建立和變更上下文:

  • ls -Z
  • id -Z
  • ps -Z
  • netstat -Z
  • cp -Z
  • mkdir -Z

當基於其父目錄的上下文建立檔案時,會建立上下文(有一些例外)。 RPM 可以在安裝過程中建立上下文。

14. SELinux 錯誤有四個主要原因,在下面的第 15-21 點中有更詳細的描述:

  • 標籤問題
  • 因為 SELinux 需要知道一些事情
  • SELinux 策略/應用程式錯誤
  • 您的資訊可能會被洩露

15. 標籤問題:如果您的文件位於 /srv/myweb 標記不正確,訪問可能會被拒絕。 以下是解決此問題的一些方法:

  • 如果您知道標籤:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • 如果您知道具有等效標記的檔案:
    # semanage fcontext -a -e /srv/myweb /var/www
  • 恢復上下文(對於兩種情況):
    # restorecon -vR /srv/myweb

16. 標籤問題: 如果您移動文件而不是複製它,該文件將保留其原始上下文。 要解決此問題:

  • 使用標籤更改上下文命令:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • 使用連結標籤更改上下文命令:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • 恢復上下文(對於兩種情況): # restorecon -vR /var/www/html/

17. 如果 你需要知道的 SELinuxHTTPD 正在偵聽連接埠 8585,告訴 SELinux:

# semanage port -a -t http_port_t -p tcp 8585

18. 你需要知道的 SELinux 布林值,允許在運行時更改部分 SELinux 策略,而無需知道 SELinux 策略被覆蓋。 例如,如果您希望 httpd 發送電子郵件,請輸入: # setsebool -P httpd_can_sendmail 1

19. 你需要知道的 SELinux 啟用/停用 SELinux 設定的邏輯值:

  • 要查看所有布林值: # getsebool -a
  • 要查看每個的描述: # semanage boolean -l
  • 設定布林值: # setsebool [_boolean_] [1|0]
  • 對於永久安裝,添加 -P。 例如: # setsebool httpd_enable_ftp_server 1 -P

20. SELinux 策略/應用程式可能包含錯誤,包括:

  • 不尋常的程式碼路徑
  • 配置
  • 重定向標準輸出
  • 文件描述符洩漏
  • 可執行記憶體
  • 圖書館建得不好

開放票證(不要向 Bugzilla 提交報告;Bugzilla 沒有 SLA)。

21. 您的資訊可能會被洩露如果您有受限網域嘗試:

  • 載入核心模組
  • 停用強制 SELinux 模式
  • 寫給 etc_t/shadow_t
  • 更改 iptables 規則

22. 用於開發策略模組的 SELinux 工具:

# yum -y install setroubleshoot setroubleshoot-server

重新啟動或重新啟動 auditd 安裝後。

23. 使用

journalctl

顯示與相關的所有日誌的列表 setroubleshoot:

# journalctl -t setroubleshoot --since=14:20

24. 使用 journalctl 列出與特定 SELinux 標籤關聯的所有日誌。 例如:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. 如果發生 SELinux 錯誤,請使用日誌 setroubleshoot 提供幾種可能的解決方案。
例如,從 journalctl:

Jun 14 19:41:07 web1 setroubleshoot: SELinux is preventing httpd from getattr access on the file /var/www/html/index.html. For complete message run: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e

# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux is preventing httpd from getattr access on the file /var/www/html/index.html.

***** Plugin restorecon (99.5 confidence) suggests ************************

If you want to fix the label,
/var/www/html/index.html default label should be httpd_syscontent_t.
Then you can restorecon.
Do
# /sbin/restorecon -v /var/www/html/index.html

26. 日誌記錄:SELinux 在很多地方記錄資訊:

  • 在/ var / log / messages中
  • /var/log/audit/audit.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

27. 日誌記錄:在審核日誌中搜尋 SELinux 錯誤:

# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today

28. 若要尋找特定服務的 SELinux 存取向量快取 (AVC) 訊息:

# ausearch -m avc -c httpd

29. 效用 audit2allow 從禁止操作的日誌中收集訊息,然後產生SELinux權限策略規則。 例如:

  • 創建一個人類可讀的描述來說明訪問被拒絕的原因: # audit2allow -w -a
  • 若要查看允許拒絕存取的類型強制規則: # audit2allow -a
  • 若要建立自訂模組: # audit2allow -a -M mypolicy
  • 選項 -M 建立具有指定名稱的類型強製檔案 (.te) 並將規則編譯到策略包 (.pp) 中: mypolicy.pp mypolicy.te
  • 若要安裝自訂模組: # semodule -i mypolicy.pp

30. 要將單獨的進程(域)配置為在寬容模式下工作: # semanage permissive -a httpd_t

31. 如果您不再希望該網域處於寬鬆狀態: # semanage permissive -d httpd_t

32. 若要停用所有許可域: # semodule -d permissivedomains

33. 啟用 MLS SELinux 策略: # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

確保 SELinux 在寬容模式下運作: # setenforce 0
使用腳本 fixfiles確保在下次重新啟動時重新標記檔案:

# fixfiles -F onboot # reboot

34. 建立具有特定 MLS 範圍的使用者: # useradd -Z staff_u john

使用命令 useradd,將新使用者對應到現有 SELinux 使用者(在本例中, staff_u).

35. 查看SELinux和Linux用戶的映射關係: # semanage login -l

36. 為使用者定義特定範圍: # semanage login --modify --range s2:c100 john

37. 若要更正使用者的主目錄標籤(如果需要): # chcon -R -l s2:c100 /home/john

38. 查看當前類別: # chcat -L

39. 若要變更類別或開始建立您自己的類別,請按如下方式編輯檔案:

/etc/selinux/_<selinuxtype>_/setrans.conf

40. 要在特定檔案、角色和使用者上下文中執行命令或腳本:

# runcon -t initrc_t -r system_r -u user_u yourcommandhere

  • -t 文件上下文
  • -r 角色背景
  • -u 使用者情境

41. 停用 SELinux 運作的容器:

  • 波德曼: # podman run --security-opt label=disable …
  • 泊塢窗: # docker run --security-opt label=disable …

42. 如果您需要授予容器對系統的完全存取權:

  • 波德曼: # podman run --privileged …
  • 泊塢窗: # docker run --privileged …

現在你已經知道答案了。 所以請:不要驚慌並啟用 SELinux。

引用:

來源: www.habr.com

添加評論