文章的翻譯是專門為課程的學生準備的
在這裡,您將獲得有關生命、宇宙和 Linux 中一切的重要問題的答案,並且安全性更高。
“一個重要的事實是,事情並不總是像看起來那樣,這是常識…”
-道格拉斯·亞當斯, 銀河系漫遊指南
安全。 可靠性提高。 一致。 政策。 天啟四騎士系統管理員。 除了我們的日常任務 - 監控、備份、實施、配置、更新等 - 我們也負責我們系統的安全。 即使是第三方提供者建議我們停用增強安全性的系統。 感覺就像工作一樣
面對這種困境,一些系統管理員決定採取
本著《銀河系漫遊指南》的精神,以下有 42 個有關控制和使用的重要問題的答案。
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。
引用:
SELinux的 by丹·沃爾什 您也可以看到有關 SELinux 策略執行的視覺化操作指南 作者:丹‧沃爾什為一般人打造的安全增強型 Linux by托馬斯·卡梅倫 SELinux 著色書 byMáirínDuffy SELinux 使用者與管理者指南 — 紅帽企業 Linux 7
來源: www.habr.com