1. 前提准备:安装SELinux并启用
Ubuntu默认使用AppArmor而非SELinux,需先安装SELinux相关组件并切换安全模块。安装命令:
sudo apt install selinux-basics selinux-policy-default auditd setools
激活SELinux(添加内核启动参数):
sudo selinux-activate
设置SELinux为permissive模式(记录违规但不阻止,避免启动失败):
编辑/etc/selinux/config文件,修改SELINUX=permissive;或临时设置:
sudo setenforce 0
重启系统使配置生效,通过sestatus命令确认状态(应为SELinux status: enabled、Current mode: permissive)。
2. 控制文件/目录访问:设置安全上下文
SELinux通过安全上下文(user:role:type:level)控制文件/目录访问,核心是type(类型)。
ls -Z /path/to/file
semanage fcontext添加规则,restorecon应用更改(示例:限制/home/user1/data仅能被user_home_t类型访问):sudo semanage fcontext -a -t user_home_t "/home/user1/data(/.*)?"
sudo restorecon -Rv /home/user1/data
chcon(重启后失效,仅用于测试):sudo chcon -t user_home_t /home/user1/data
注:目录需递归修改(
-R),确保子文件/子目录上下文一致。
3. 调整策略:通过布尔值快速配置
SELinux布尔值是策略中的“开关”,可快速启用/禁用特定权限(如允许Web服务器访问网络、允许Samba写入共享目录)。
sudo getsebool -a # 列出所有布尔值及状态
sudo semanage boolean -l # 显示当前值与默认值
sudo setsebool httpd_can_network_connect on # 允许httpd访问网络
-P参数(修改配置文件,重启后生效):sudo setsebool -P samba_export_all_rw on # 允许Samba共享目录可读写
常见场景:Web服务器需访问数据库时,开启httpd_can_network_connect_db;允许用户通过FTP访问家目录时,开启ftp_home_dir。4. 自定义策略:限制应用程序权限
若内置策略无法满足需求(如限制自定义应用myapp的访问范围),需创建自定义策略模块。
myapp.te):myapp_t类型进程访问自身文件):module myapp 1.0;
require {
type unconfined_t;
class file { read write execute };
}
type myapp_t;
allow unconfined_t myapp_t:file { read write execute };
checkmodule生成模块文件,semodule_package打包,semodule加载:checkmodule -M -m -o myapp.mod myapp.te
semodule_package -o myapp.pp -m myapp.mod
sudo semodule -i myapp.pp
/var/log/audit/audit.log),若有拒绝记录,用audit2allow生成新规则:sudo ausearch -c 'myapp' --raw | audit2allow -M myapp_new
sudo semodule -i myapp_new.pp
注:自定义策略需谨慎,避免过度放宽权限。
5. 监控与排查:解决访问问题
ausearch或journalctl过滤AVC(访问控制)拒绝消息:sudo ausearch -m avc -ts recent # 查看近期拒绝记录
sudo journalctl | grep AVC # 实时监控拒绝日志
read、write)、“涉及的主体”(进程)、“客体”(文件/目录)及“所需权限”,据此调整策略(如添加布尔值、修改上下文或创建自定义策略)。