为 SELinux 编写自定义规则需要遵循以下步骤:
确保你已经安装了 policycoreutils 和 audit2allow 工具,这些工具可以帮助你编写和管理 SELinux 策略。
sudo yum install policycoreutils audit2allow
SELinux 会记录所有被拒绝的操作。你可以使用 ausearch 和 aureport 工具来查看这些日志。
sudo ausearch -m avc -ts recent
sudo aureport -m avc
从审计日志中提取出被拒绝的操作,并分析其上下文和操作类型。
grep "avc" /var/log/audit/audit.log | audit2why
使用 audit2allow 工具生成自定义策略模块。
grep "avc" /var/log/audit/audit.log | audit2allow -M my_custom_policy
这会生成两个文件:my_custom_policy.te(策略源文件)和 my_custom_policy.pp(编译后的策略模块)。
打开 my_custom_policy.te 文件,审查并修改策略规则。你可以添加新的类型、权限或调整现有规则。
nano my_custom_policy.te
使用 checkmodule 和 semodule_package 工具编译策略模块。
checkmodule -M -m -o my_custom_policy.mod my_custom_policy.te
semodule_package -o my_custom_policy.pp -m my_custom_policy.mod
使用 semodule 命令加载编译后的策略模块。
sudo semodule -i my_custom_policy.pp
验证策略是否生效,并确保没有新的拒绝操作。
sudo ausearch -m avc -ts recent | grep my_custom_policy
持续监控系统的 SELinux 日志,并根据需要调整策略。
sudo tail -f /var/log/audit/audit.log | grep avc
假设你有一个自定义应用程序 /usr/local/bin/my_app,它需要访问 /etc/my_app.conf 文件。
收集审计日志:
sudo ausearch -m avc -ts recent | grep my_app
生成策略模块:
grep "avc" /var/log/audit/audit.log | audit2allow -M my_app_policy
审查和修改策略文件:
nano my_app_policy.te
添加以下内容:
module my_app_policy 1.0;
require {
type unconfined_t;
class file { read write };
class config_file { read write };
}
allow unconfined_t config_file:file { read write };
编译策略模块:
checkmodule -M -m -o my_app_policy.mod my_app_policy.te
semodule_package -o my_app_policy.pp -m my_app_policy.mod
加载策略模块:
sudo semodule -i my_app_policy.pp
验证策略:
sudo ausearch -m avc -ts recent | grep my_app_policy
通过以上步骤,你可以为 SELinux 编写自定义规则,并确保你的应用程序能够正常运行。