https://opensource.com/article/18/7/sysadmin-guide-selinux
作者 | Alex Callejas
譯者 | qhwdw 共計翻譯:144 篇 貢獻時間:281 天
譯者 | Chang Liu (FSSlc) 共計翻譯:66 篇 貢獻時間:1290 天
獲取有關生活、宇宙和除了有關 SELinux 的重要問題的答案
“一個重要而普遍的事實是,事情並不總是你看上去的那樣 …” ―Douglas Adams,《銀河系漫遊指南》
安全、堅固、遵從性、策略是末世中系統管理員的四騎士。除了我們的日常任務之外 —— 監控、備份、實施、調優、更新等等 —— 我們還需要負責我們的系統安全。即使這些系統是第三方提供商告訴我們該禁用增強安全性的系統。這看起來像《碟中碟》中 Ethan Hunt[1] 的工作一樣。
面對這種窘境,一些系統管理員決定去服用藍色小藥丸[2],因為他們認為他們永遠也不會知道如生命、宇宙、以及其它一些大問題的答案。而我們都知道,它的答案就是這個 42[3]。
按《銀河系漫遊指南》的精神,這裡是關於在你的系統上管理和使用 SELinux[4] 這個大問題的 42 個答案。
user:role:type:level
(可選)。autorelabel=1
→ 強制給系統重新標簽化selinux=0
→ 核心不載入 SELinux 基礎設施的任何部分enforcing=0
→ 以許可樣式啟動
# touch /.autorelabel
# reboot
如果系統標簽中有大量的錯誤,為了能夠讓 autorelabel 成功,你可以用許可樣式引導系統。
# getenforce
# setenforce [1|0]
# sestatus
/etc/selinux/config
/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
標簽的物件互動。
-Z
引數去檢視、建立、和修改安全背景關係:
ls -Z
id -Z
ps -Z
netstat -Z
cp -Z
mkdir -Z
當檔案被建立時,它們的安全背景關係會根據它們父目錄的安全背景關係來建立(可能有某些例外)。RPM 可以在安裝過程中設定安全背景關係。
/srv/myweb
中你的檔案沒有被正確的標簽化,訪問可能會被拒絕。這裡有一些修複這類問題的方法:
# semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
# semanage fcontext -a -e /srv/myweb /var/www
# restorecon -vR /srv/myweb
# 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/
# semanage port -a -t http_port_t -p tcp 8585
# setsebool -P httpd_can_sendmail 1
# getsebool -a
# semanage boolean -l
# setsebool [_boolean_] [1|0]
-P
標誌。例如:# setsebool httpd_enable_ftp_server 1 -P
stdout
開一個工單(但不要提交 Bugzilla 報告;使用 Bugzilla 沒有對應的服務)
etc_t/shadow_t
# yum -y install setroubleshoot setroubleshoot-server
。安裝完成之後重引導機器或重啟 auditd
服務。journalctl
去列出所有與 setroubleshoot
相關的日誌:# journalctl -t setroubleshoot --since=14:20
journalctl
去列出所有與特定 SELinux 標簽相關的日誌。例如:# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0
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
/var/log/messages
/var/log/audit/audit.log
/var/lib/setroubleshoot/setroubleshoot_database.xml
# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
# ausearch -m avc -c httpd
audit2allow
實用工具可以透過從日誌中搜集有關被拒絕的操作,然後生成 SELinux 策略允許的規則,例如:
# audit2allow -w -a
# audit2allow -a
# audit2allow -a -M mypolicy
,其中 -M
選項將建立一個特定名稱的強制型別檔案(.te),並編譯這個規則到一個策略包(.pp)中:mypolicy.pp mypolicy.te
# semodule -i mypolicy.pp
# semanage permissive -a httpd_t
# semanage permissive -d httpd_t
# semodule -d permissivedomains
# yum install selinux-policy-mls
。 在 /etc/selinux/config
中:
SELINUX=permissive
SELINUXTYPE=mls
確保 SELinux 執行在許可樣式:# setenforce 0
使用 fixfiles
指令碼來確保在下一次重啟時檔案將被重新標簽化:# fixfiles -F onboot # reboot
# useradd -Z staff_u john
使用 useradd
命令,對映新使用者到一個已存在的 SELinux 使用者(上面例子中是 staff_u
)。
# semanage login -l
# semanage login --modify --range s2:c100 john
# chcon -R -l s2:c100 /home/john
# chcat -L
/etc/selinux/__/setrans.conf
# runcon -t initrc_t -r system_r -u user_u yourcommandhere
-t
是檔案安全背景關係-r
是角色安全背景關係-u
是使用者安全背景關係# podman run --security-opt label=disable ...
# docker run --security-opt label=disable ...
# podman run --privileged ...
# docker run --privileged ...
就這些了,你已經知道了答案。因此請相信我:不用恐慌,去開啟 SELinux 吧。
作者簡介
Alex Callejas 是位於墨西哥城的紅帽公司拉丁美洲區的一名技術客服經理。作為一名系統管理員,他已有超過 10 年的經驗。在基礎設施強化方面具有很強的專業知識。對開源抱有熱情,透過在不同的公共事件和大學中分享他的知識來支援社群。天生的極客,當然他一般選擇使用 Fedora Linux 發行版。[這裡][11]有更多關於他的資訊。
via: https://opensource.com/article/18/7/sysadmin-guide-selinux
作者:Alex Callejas[6] 選題:lujun9972 譯者:qhwdw, FSSlc 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出