SELinux常見安全上下文問題
安全上下文是SELinux實現細粒度訪問控制的核心,常見故障集中在上下文類型不匹配或恢復異常。例如,Apache無法訪問/var/www/html
下的文件(DAC權限正常但提示“Permission denied”),多因文件類型未設置為httpd_sys_content_t
;移動文件(mv
命令)后,文件保留原上下文,導致目標目錄無法訪問,需用restorecon -Rv
恢復目標目錄的默認上下文。解決此類問題需通過ls -Z
查看上下文,用chcon
臨時修改(如chcon -t httpd_sys_content_t /path/to/file
),或用semanage fcontext
永久添加規則(如semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
)后恢復。
SELinux模式設置錯誤
SELinux有Enforcing
(強制)、Permissive
(寬容)、Disabled
(關閉)三種模式,模式配置錯誤會導致系統異常。常見錯誤包括:誤將/etc/selinux/config
中的SELINUX=enforcing
改為SELINUX=disabled
(未用selinux=0
臨時引導),導致系統無法啟動;或在GRUB中錯誤修改SELINUXTYPE
為disabled
(應為targeted
/minimum
/mls
)。解決方法是:啟動時按E
進入GRUB編輯,在linux
行末尾添加selinux=0
臨時禁用,進入系統后修改配置文件(如SELINUX=permissive
),并重啟生效。
應用程序/服務訪問被攔截
應用程序(如Apache、SSH)無法訪問網絡、文件或啟動,多為SELinux策略限制。例如,Apache無法監聽8080端口(非默認http_port_t
),需用semanage port -a -t http_port_t -p tcp 8080
添加端口標簽;SSH反向隧道失敗,可能是httpd_can_network_connect
布爾值未開啟,需用setsebool -P httpd_can_network_connect=1
允許網絡連接。排查時可通過getsebool -a | grep service_name
查看相關布爾值,用ausearch -m avc
分析日志定位具體攔截規則。
SELinux日志分析與自定義策略生成
當出現“AVC denied”(訪問控制拒絕)錯誤時,需通過日志定位問題。SELinux日志通常位于/var/log/audit/audit.log
,用grep "AVC denied" /var/log/audit/audit.log
過濾相關記錄;或用ausearch -m avc -ts recent
實時查看。分析日志后,用audit2allow
工具生成自定義策略:audit2allow -a
生成允許規則,audit2allow -a -M myrule
創建策略模塊(.te
文件),再用semodule -i myrule.pp
加載模塊(永久生效)。注意:自定義策略需謹慎,避免過度放權。
端口/設備節點標簽問題
服務需使用非標準端口(如Tomcat用8080)或訪問設備節點(如/dev/sda
)時,可能因標簽未正確設置被攔截。例如,Tomcat無法監聽8080端口,需用semanage port -a -t http_port_t -p tcp 8080
添加端口標簽;應用程序無法訪問/dev/sda
,需用ls -Z /dev/sda
查看設備節點標簽,若標簽不正確,用chcon -t device_t /dev/sda
修改(臨時),或通過semanage fcontext
永久設置。解決此類問題需明確服務所需的端口/設備標簽,用對應命令調整。
SELinux啟動失敗
SELinux無法啟動的常見原因包括:配置文件錯誤(如SELINUX=disabled
拼寫錯誤)、系統資源不足(內存/CPU/磁盤空間不足)、日志文件損壞。解決步驟:首先用sestatus
確認SELinux狀態,用ausearch -m avc -ts recent
查看日志中的錯誤信息;若配置錯誤,進入單用戶模式(重啟時按E
修改GRUB,添加selinux=0
),修改/etc/selinux/config
中的SELINUX
參數(如enforcing
),并重啟;若資源不足,清理系統(如刪除舊日志、釋放內存)后重啟。