Ubuntu下SELinux进阶学习路径
进阶学习需先夯实基础,重点掌握以下核心要素:
httpd、ssh);用户:角色:类型:级别(如unconfined_u:unconfined_r:httpd_sys_rw_content_t:s0);httpd_t),决定进程能访问的客体类型;类型定义主体与客体的访问规则。httpd_can_network_connect_db允许Apache访问数据库)。使用getsebool -a查看所有布尔值,setsebool -P 布尔值 on/off永久修改(-P表示持久化)。例如,允许Nginx访问用户家目录:sudo setsebool -P httpd_enable_homedirs 1。semodule -l;semodule -r 模块名(需谨慎,可能影响依赖进程);semodule_package将.te(策略源码)、.fc(文件上下文)等文件打包为可安装的.pp文件。当默认策略无法满足需求(如为新应用定制访问规则)时,需编写自定义策略:
auditd服务运行(sudo systemctl enable/start auditd),用ausearch -m avc -ts recent查看最近的SELinux拒绝事件,或通过/var/log/audit/audit.log筛选AVC类型日志。audit2allow工具将日志转换为策略代码:sudo ausearch -m avc -ts recent --raw > avc_denials.txt
sudo audit2allow -M my_custom_policy < avc_denials.txt
这将生成my_custom_policy.te(源码)和my_custom_policy.pp(编译后的模块)。.te文件,明确类型、权限和规则。例如,允许my_script_t类型的进程访问/var/www/html目录:policy_module(my_custom_policy, 1.0) # 模块名和版本
type my_script_t; # 定义进程类型
type my_script_exec_t; # 定义可执行文件类型
init_daemon_domain(my_script_t, my_script_exec_t) # 关联init进程域
allow my_script_t httpd_sys_rw_content_t:dir { read write }; # 允许访问目录
selinux-devel包):make -f /usr/share/selinux/devel/Makefile
sudo semodule -i my_custom_policy.pp # 加载模块
加载后用semodule -l | grep my_custom_policy验证是否成功。ls -Z查看文件/目录上下文,ps -eZ查看进程上下文。例如:ls -Z /var/www/html/index.html。chcon命令(重启或restorecon会还原),如sudo chcon -t httpd_sys_rw_content_t /path/to/file;semanage fcontext添加规则,再用restorecon应用。例如,允许Apache写入自定义目录:sudo semanage fcontext -a -t httpd_sys_rw_content_t "/data/custom(/.*)?"
sudo restorecon -Rv /data/custom # 递归恢复上下文
restorecon -Rv /path(-R递归,-v显示详情),基于/etc/selinux/targeted/contexts/files/file_contexts中的默认规则。/var/log/audit/audit.log:审计日志(包含SELinux拒绝事件);/var/log/messages或journalctl -u selinux:系统日志(包含SELinux状态变化)。ausearch:搜索审计日志(如ausearch -m avc -ts today);audit2why:解释拒绝原因(ausearch -m avc | audit2why);sealert:生成详细报告(sudo sealert -a /var/log/audit/audit.log),包含修复建议。/etc/grub.conf或/etc/default/grub中修改内核启动参数,如autorelabel=1(强制系统重新标记所有文件,解决上下文混乱问题)、selinux=1(启用SELinux)、enforcing=1(强制模式)。修改后运行sudo update-grub并重启。semodule -l | grep unused),合并多个相关模块,减少策略复杂度,提升系统性能。selinuxproject.org)提供最新策略语言文档、API参考;selinux标签,可获取问题解答;通过以上步骤,可逐步掌握Ubuntu下SELinux的进阶技能,实现更细粒度的安全控制。需注意,SELinux配置复杂,修改前务必备份重要数据,并在测试环境中验证。