1. 准备工作:安装SELinux及相关工具
Ubuntu默认使用AppArmor作为安全模块,并未启用SELinux,因此需先安装SELinux核心组件及管理工具。通过以下命令完成安装:
sudo apt update
sudo apt install selinux-basics selinux-policy-default auditd setools
安装完成后,需激活SELinux:
sudo selinux-activate
激活后重启系统,使SELinux服务启动。
2. 查看SELinux状态:确认启用与模式
使用sestatus
命令可快速查看SELinux的运行状态,包括是否启用、当前模式(Enforcing/Permissive/Disabled)、加载的策略名称等。例如:
sestatus
输出示例:
SELinux status: enabled
SELinuxfs mount: /sys/kernel/security
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: permissive
若需临时切换模式(如从Permissive转为Enforcing),可使用:
sudo setenforce 1 # 切换为Enforcing模式
sudo setenforce 0 # 切换为Permissive模式
永久修改模式需编辑/etc/selinux/config
文件,调整SELINUX=
参数(如SELINUX=enforcing
),保存后重启系统生效。
3. 掌握核心概念:理解SELinux的工作逻辑
学习SELinux前需明确三个关键概念:
httpd
、ssh
);httpd
进程只能读取/var/www/html
目录下的文件”)。用户:角色:类型:级别
(如unconfined_u:unconfined_r:unconfined_t:s0
)。其中,**类型(Type)**是强制访问控制(MAC)的核心,策略通过类型限制主体对对象的访问。4. 基础配置:管理安全上下文与布尔值
ls -Z
(如/var/www/html/index.html
的上下文);ps -eZ
(如httpd
进程的上下文)。chcon -t httpd_sys_content_t /path/to/file
(将文件类型改为httpd_sys_content_t
,允许httpd
访问);sudo semanage fcontext -a -t httpd_sys_content_t "/path/to/dir(/.*)?" # 添加策略规则
sudo restorecon -Rv /path/to/dir # 递归恢复目录及子项的上下文
httpd
访问用户主目录:sudo setsebool -P httpd_enable_homedirs 1 # -P表示永久生效
查看所有布尔值:getsebool -a
。5. 日志分析与故障排除:解决访问拒绝问题
当进程被SELinux阻止时,需通过日志定位问题:
sudo ausearch -m avc -ts recent
sudo ausearch -m avc -ts recent | audit2why
输出会提示拒绝的原因(如“缺少httpd_sys_content_t
类型”)及解决方法(如“使用semanage fcontext
添加上下文”)。sudo ausearch -m avc -ts recent | audit2allow -M my_policy # 生成策略模块(.te和.pp文件)
sudo semodule -i my_policy.pp # 加载策略模块
加载后,SELinux会根据新策略允许相应操作。6. 自定义策略:创建与部署模块
若默认策略无法满足需求(如限制某进程仅能访问特定文件),需创建自定义策略:
sudo apt install selinux-policy-dev
;myapp.te
):mkdir ~/selinux-custom
cd ~/selinux-custom
nano myapp.te
myapp_t
类型的进程读取var_log_t
类型的文件):module myapp 1.0;
require {
type myapp_t;
type var_log_t;
class file { read };
}
# Allow myapp process to read var_log files
allow myapp_t var_log_t:file read;
make -f /usr/share/selinux/devel/Makefile # 生成.pp文件
sudo semodule -i myapp.pp # 加载策略
ExecStartPost=/usr/sbin/semanage fcontext -a -t myapp_t "/path/to/executable"
ExecStartPost=/usr/sbin/restorecon -v "/path/to/executable"
重启服务使标记生效。7. 最佳实践:安全与稳定的配置建议
Permissive
模式(仅记录拒绝日志,不阻止操作),待调试完成后再切换至Enforcing
模式,避免因策略错误导致系统无法使用。cp /etc/selinux/policy/ policy.bak
),若出现问题可通过备份恢复。ausearch
和aureport
工具定期分析SELinux日志,及时发现并解决潜在的安全问题。/etc/selinux/config
中的SELINUX=disabled
并重启),不建议长期禁用。