ubuntu中selinux的调试技巧
导读:Ubuntu 下 SELinux 调试技巧 一 快速定位与日志分析 确认运行状态与模式:使用 sestatus、getenforce 查看当前 SELinux 是否启用及处于 Enforcing/Permissive/Disabled 哪...
Ubuntu 下 SELinux 调试技巧
一 快速定位与日志分析
- 确认运行状态与模式:使用 sestatus、getenforce 查看当前 SELinux 是否启用及处于 Enforcing/Permissive/Disabled 哪种模式。遇到故障时,优先切到 Permissive(不阻断仅记录)便于排查。临时切换命令:sudo setenforce 0/1。
- 集中查看拒绝事件:SELinux 拒绝日志默认写入 /var/log/audit/audit.log。常用检索:
- 全部 AVC 拒绝:ausearch -m avc
- 今天的拒绝:ausearch -m avc -ts today
- 最近 10 分钟:ausearch -m avc -ts recent
- 指定服务(按进程名 comm):ausearch -m avc -c httpd
为便于阅读,建议加 –interpret/-i;做脚本处理可用 –raw/-r。
- 汇总统计:生成 AVC 报表:aureport -a(可快速看到哪些拒绝最频繁)。
- 无 auditd 时的替代:用 journalctl | grep AVC 抓取内核日志中的 AVC 信息(不如 auditd 精细,但可作为兜底)。
二 上下文与策略的精准修复
- 先判因再动手:很多“权限被拒”是文件或目录的 SELinux 上下文不对。查看上下文:ls -Z /path;若只是标签错误,优先用 restorecon 恢复默认标签,而非直接写策略。
- 永久修正路径标签:用 semanage fcontext 添加路径规则,再用 restorecon 应用。例如 Web 内容:
- 添加规则:sudo semanage fcontext -a -t httpd_sys_content_t “/var/www/html(/.*)?”
- 应用规则:sudo restorecon -Rv /var/www/html
- 临时修改(重启或 relabel 后可能失效):chcon -t httpd_sys_content_t /var/www/html/index.html。
- 细粒度布尔开关:查看与调整布尔值以开启/关闭功能:
- 查看全部:getsebool -a
- 临时开关:setsebool httpd_can_network_connect on
- 永久生效:setsebool -P httpd_can_network_connect on
- 谨慎自动生成策略:当确需放行时,用 audit2allow 从拒绝日志生成模块并加载:
- 按服务生成:ausearch -c ‘程序名’ --raw | audit2allow -M mypol
- 加载模块:semodule -i mypol.pp
注意:自动生成的规则应作为“最小可用”的临时方案,长期应优先修复上下文或调整布尔值。
三 高效排查流程与常用命令清单
- 故障复现与定位:
- 切到宽容模式:sudo setenforce 0;2) 复现问题;3) 立刻收集 AVC:ausearch -m avc -ts recent --interpret;4) 回到强制模式:sudo setenforce 1。
- 快速命令清单:
- 状态:sestatus、getenforce
- 模式切换:sudo setenforce 0/1
- 查日志:ausearch -m avc -ts recent -i、aureport -a
- 查上下文:ls -Z /path
- 修复标签:restorecon -Rv /path;永久规则:semanage fcontext … & & restorecon
- 布尔值:getsebool -a、setsebool [-P] 名称 on/off
- 生成并加载策略:ausearch -c ‘程序名’ --raw | audit2allow -M 名称 & & semodule -i 名称.pp
- 兜底日志:journalctl | grep AVC
- 经验法则:优先用 restorecon/semanage 修正标签;其次用 setsebool 开关功能;最后才用 audit2allow 生成最小规则并尽快回归最小权限原则。
四 在 Ubuntu 上启用与验证 SELinux
- 安装与启用:
- 安装基础包:sudo apt update & & sudo apt install selinux-basics selinux-policy-default
- 激活 SELinux:sudo selinux-activate
- 如需在引导参数强制启用,可在 /etc/default/grub 的 GRUB_CMDLINE_LINUX_DEFAULT 中加入 security=selinux,然后更新 GRUB 并重启。
- 验证:重启后用 sestatus 与 getenforce 确认处于期望模式;按需在 Permissive/Enforcing 间切换进行验证。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: ubuntu中selinux的调试技巧
本文地址: https://pptw.com/jishu/777696.html
