以下是Ubuntu中SELinux权限管理的核心技巧,需先安装SELinux工具包(sudo apt install selinux-basics selinux-policy-default)并启用:
sestatus # 查看是否启用及模式(Enforcing/Permissive/Disabled)
sudo setenforce 0 # Permissive模式(仅记录违规,不阻止)
sudo setenforce 1 # Enforcing模式(强制阻止违规)
/etc/selinux/config,设置SELINUX=模式,重启生效。user_r):sudo semanage login -a -s user_r username # 将用户关联到角色
sudo semanage login -l # 列出用户及其角色
myapp_t):sudo semanage fcontext -a -t myapp_exec_t /path/to/myapp # 标记可执行文件类型
sudo restorecon -v /path/to/myapp # 应用上下文
.te策略文件(如myapp_policy.te),使用allow规则定义访问权限,编译后加载。sudo chcon -t httpd_sys_content_t /var/www/html/index.html # 临时修改文件上下文
sudo restorecon -Rv /var/www/html # 递归恢复默认上下文
/data目录仅允许db_t类型进程读写:
.te文件:policy_module(mydata_policy, 1.0)
type db_t;
type data_t;
allow db_t data_t:dir { read write };
checkmodule -M -m -o mydata_policy.mod mydata_policy.te
semodule_package -o mydata_policy.pp -m mydata_policy.mod
sudo semodule -i mydata_policy.pp
sudo semanage fcontext -a -t data_t "/data(/.*)?"
sudo restorecon -Rv /data
sudo ausearch -m avc -ts recent # 显示最近的SELinux拒绝事件
sudo audit2why < /var/log/audit/audit.log # 分析拒绝原因
sudo audit2allow -M mypolicy < /var/log/audit/audit.log # 生成策略模块
sudo semodule -i mypolicy.pp # 安装策略
setsebool调整布尔值(如关闭非必要服务的权限):sudo setsebool -P httpd_can_network_connect 0 # 禁止HTTP服务发起网络连接
参考来源: