SELinux管理文件權限的核心邏輯與操作指南
SELinux(Security-Enhanced Linux)通過強制訪問控制(MAC)機制,以“安全上下文”為核心,實現對文件權限的細粒度管理。與傳統Linux的“自主訪問控制(DAC,如rwx權限)”不同,SELinux不僅檢查文件屬主、用戶權限,還會驗證進程類型與文件類型的匹配性,即使root用戶也無法繞過SELinux策略訪問未授權的文件。
安全上下文是SELinux為每個文件、進程分配的“身份標簽”,格式為:用戶:角色:類型:級別
(級別可選)。其中:
httpd_sys_content_t
表示Web內容文件,var_t
表示系統變量文件)。system_u
表示系統用戶,object_r
表示對象角色)。通過ls -Z
命令可查看文件的SELinux上下文,例如:
ls -Z /var/www/html/index.html
# 輸出示例:system_u:object_r:httpd_sys_content_t:s0
SELinux有三種運行模式,控制策略的強制執行程度:
/var/log/audit/audit.log
)。通過getenforce
命令查看當前模式,setenforce 0/1
臨時切換模式(0=Permissive,1=Enforcing)。永久修改需編輯/etc/selinux/config
文件,設置SELINUX=enforcing/permissive/disabled
。
使用ls -Z
命令查看文件/目錄的SELinux上下文,例如:
ls -Z /var/www/html
# 輸出示例:system_u:object_r:httpd_sys_content_t:index.html
使用chcon
命令臨時更改文件的類型(重啟或restorecon
后會失效),語法:
chcon -t <目標類型> <文件路徑>
# 示例:將/var/www/html/test.txt設置為httpd_sys_content_t類型
chcon -t httpd_sys_content_t /var/www/html/test.txt
若需永久生效,需使用semanage fcontext
定義默認規則,再用restorecon
應用:
# 1. 添加默認規則(如為/custom/web目錄下的所有文件設置httpd_sys_content_t類型)
semanage fcontext -a -t httpd_sys_content_t "/custom/web(/.*)?"
# 2. 恢復目錄及子文件的默認上下文
restorecon -Rv /custom/web
注:semanage
需安裝policycoreutils-python
工具(yum install policycoreutils-python
)。
restorecon
恢復:mv /old/path/file.txt /new/path/
restorecon -v /new/path/file.txt
當進程無法訪問文件時,SELinux會將違規信息記錄到/var/log/audit/audit.log
。使用ausearch
過濾AVC(訪問控制拒絕)日志:
ausearch -m avc -ts recent
# 示例輸出:type=AVC msg=audit(1724987654.123:456): avc: denied { read } for pid=1234 comm="httpd" name="test.txt" dev="sda1" ino=789 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=file
若日志顯示“denied”錯誤,可通過audit2allow
工具生成自定義策略模塊,允許被攔截的操作:
# 1. 從日志提取規則并生成.te文件
audit2allow -a -M myrule
# 2. 編譯并加載策略模塊
semodule -i myrule.pp
注:自定義策略需謹慎使用,避免過度放寬權限。
/etc/selinux/config
、/var/log/audit/audit.log
)。