为 SELinux 添加例外规则通常涉及创建自定义策略模块,以允许特定进程或操作访问通常被限制的资源。以下是详细步骤:
首先,确保你的系统启用了 SELinux,并了解其当前模式(Enforcing 或 Permissive)。
sestatus
确保安装了 policycoreutils-python 和 audit2allow 工具,这些工具用于生成自定义策略模块。
sudo yum install policycoreutils-python
在 SELinux 处于 Enforcing 模式下运行相关应用程序或操作,以生成策略拒绝日志。你可以使用 ausearch 或查看 /var/log/audit/audit.log 文件。
sudo ausearch -m avc -ts recent
使用 audit2allow 工具根据收集到的日志生成自定义策略模块。
sudo ausearch -m avc -ts recent | audit2allow -M my_custom_policy
-M my_custom_policy 指定生成的策略模块名称为 my_custom_policy。查看生成的 .te(类型启用)和 .pp(策略包)文件,确保其内容符合预期。
cat my_custom_policy.te
使用 semodule 命令加载生成的策略模块。
sudo semodule -i my_custom_policy.pp
再次运行相关应用程序,确认之前的拒绝事件已被允许。如果仍有问题,可以查看 SELinux 日志:
sudo ausearch -m avc -ts recent
如果希望策略在系统重启后仍然有效,可以设置策略模块为持久化。
sudo semodule -B -m my_custom_policy.pp
假设你想为 httpd 服务添加对 /var/www/html/uploads 目录的写权限:
收集日志
sudo ausearch -m avc -ts recent | grep httpd
生成策略
sudo ausearch -m avc -ts recent | audit2allow -M httpd_upload_write
加载策略
sudo semodule -i httpd_upload_write.pp
验证
确认 httpd 可以写入 /var/www/html/uploads 目录。
通过以上步骤,你可以为 SELinux 添加自定义的例外规则,以满足特定应用程序或操作的需求。