SELinux權限設置指南
SELinux(Security-Enhanced Linux)通過**強制訪問控制(MAC)**機制,以“安全上下文”為核心,實現對進程、文件等資源的細粒度權限管理。以下是SELinux權限設置的關鍵步驟及方法:
在調整權限前,需先確認SELinux是否啟用及當前模式:
sestatus
輸出示例:
SELinux status: enabled
Current mode: enforcing
Mode from config file: enforcing
enabled
表示啟用,disabled
表示禁用;enforcing
(強制模式,違反策略的操作會被阻止并記錄)、permissive
(寬容模式,僅記錄違規行為,不阻止)、disabled
(完全禁用)。sudo setenforce 0 # 設為Permissive模式(記錄違規但不阻止)
sudo setenforce 1 # 設為Enforcing模式(強制執行策略)
編輯SELinux配置文件/etc/selinux/config
,修改以下行:
SELINUX=enforcing # 可選:enforcing/permissive/disabled
保存后重啟系統使更改生效。
SELinux通過安全上下文(格式:用戶:角色:類型:級別
,如unconfined_u:object_r:httpd_sys_content_t:s0
)控制訪問權限,其中**類型(Type)**是最核心的屬性。
ls -Z /path/to/file_or_directory # 查看文件/目錄的上下文
ls -Zd /path/to/directory # 查看目錄的上下文(包含子項)
使用chcon
命令修改單個文件/目錄的上下文:
sudo chcon -t target_type /path/to/file_or_directory
# 示例:將/var/www/html/index.html設為httpd_sys_content_t類型(Web服務器文件類型)
sudo chcon -t httpd_sys_content_t /var/www/html/index.html
-t
:指定目標類型(如httpd_sys_content_t
、ssh_home_t
等);-R
:遞歸修改目錄及其子項(如chcon -R -t target_type /path/to/dir
)。使用semanage fcontext
添加永久規則,再用restorecon
應用:
# 安裝policycoreutils-python(若未安裝)
sudo yum install policycoreutils-python # CentOS/RHEL 7及以下
sudo dnf install policycoreutils-python-utils # CentOS/RHEL 8及以上
# 添加永久上下文規則(支持通配符)
sudo semanage fcontext -a -t target_type "/path/to/file_or_directory(/.*)?"
# 示例:將/var/www/html目錄及其所有子文件設為httpd_sys_content_t類型
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
# 應用新的上下文規則
sudo restorecon -Rv /path/to/file_or_directory
# 示例:恢復/var/www/html目錄的上下文
sudo restorecon -Rv /var/www/html
-a
:添加新規則;-d
:刪除規則(如semanage fcontext -d "/path/to/file_or_directory(/.*)?"
)。SELinux布爾值是策略中的“開關”,用于快速啟用/禁用特定功能(如允許Apache訪問用戶家目錄)。常見布爾值可通過getsebool
查看:
getsebool -a # 查看所有布爾值及其狀態(on/off)
getsebool httpd_can_network_connect # 查看Apache是否能訪問網絡
getsebool ftp_home_dir # 查看FTP是否能訪問用戶家目錄
sudo setsebool boolean_name on/off
# 示例:允許Apache訪問網絡
sudo setsebool httpd_can_network_connect on
sudo setsebool -P boolean_name on/off
# 示例:永久允許FTP訪問用戶家目錄
sudo setsebool -P ftp_home_dir on
-P
:使設置永久生效(保存到SELinux策略文件)。當遇到“權限拒絕”問題(如Web服務器無法訪問文件),可按以下步驟排查:
sudo ausearch -m avc -ts recent # 查看最近的AVC(訪問控制)拒絕事件
sudo journalctl | grep AVC # 通過journalctl過濾AVC日志
日志會顯示拒絕的原因(如“type mismatch”類型不匹配、“avc: denied”操作被拒絕)。
若日志顯示需要放行某些操作,可使用audit2allow
自動生成策略模塊:
sudo ausearch -c '程序名' --raw | audit2allow -M my_custom_policy
# 示例:針對httpd服務的拒絕事件生成策略
sudo ausearch -c 'httpd' --raw | audit2allow -M my_httpd_policy
# 加載生成的策略模塊
sudo semodule -i my_custom_policy.pp
-M
:生成策略模塊(.te
源文件和.pp
二進制文件);-i
:安裝策略模塊。/etc/selinux/config
);通過以上步驟,可有效管理SELinux權限,平衡系統安全與功能需求。