selinux拒绝访问时必留avc: denied日志,是定位问题的最硬证据;可通过dmesg -t | grep avc、ausearch -m avc -ts recent或grep "avc: denied" /var/log/messages等命令查看,结合ls -z比对scontext与tcontext可精准闭环排查。

看日志里有没有 avc: denied
SELinux 拒绝访问时,一定会在内核日志里留下 avc: denied 记录,这是最硬的证据。别急着关 SELinux,先查它:
- 运行
dmesg -T | grep avc查最近的拒绝事件(-T带时间戳,方便定位) - 或者翻
/var/log/audit/audit.log(如果 auditd 在运行):ausearch -m avc -ts recent - 如果没装 auditd,就用
grep "avc: denied" /var/log/messages(RHEL/CentOS)或/var/log/syslog(Ubuntu/Debian)
只要看到类似 avc: denied { write } for pid=1234 comm="nginx" path="/var/www/html/config.php" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:default_t:s0 tclass=file 这样的行,基本就能锁定是 SELinux 干的。
用 ls -Z 看文件 SELinux 上下文是否匹配
即使文件权限是 755,如果它的 SELinux 上下文(type)不对,进程照样被拦。比如 Apache 默认只能读 httpd_sys_content_t 类型的文件,你把一个脚本丢进 /var/www/html 但它的 type 是 default_t,就会报 Permission denied。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 运行
ls -Z /path/to/file,重点看最后那个 type 字段(如httpd_sys_content_t、httpd_sys_script_exec_t) - 对比进程的域(scontext)和文件的类型(tcontext):比如
httpd_t进程想open一个default_t文件,通常不被允许 - 常见修复:用
chcon -t httpd_sys_content_t /path/to/file临时改上下文;或用restorecon -v /path/to/file恢复默认策略定义的上下文
确认进程是否真的运行在预期的 SELinux 域里
有时候你以为进程是 httpd_t,其实它跑在 unconfined_t 或别的域里——特别是用 systemd 启动、或手动 sudo ./httpd 启动时,SELinux 上下文可能没正确切换。
- 查进程当前域:
ps -eZ | grep httpd(把httpd换成你的进程名) - 如果看到
unconfined_t,说明它没受 SELinux 策略约束,那 Permission denied 就不是 SELinux 导致的,得回头查 DAC 权限或挂载选项 - 如果看到
httpd_t却还是被拒,再结合上一步的ls -Z和日志,基本能闭环定位
临时放行测试:用 setsebool 或 semanage 而不是直接 setenforce 0
关 SELinux(setenforce 0)只是验证手段,不能当修复方案。真要让服务跑通,优先用布尔值开关或自定义策略:
- 查相关布尔值:
getsebool -a | grep httpd(换成你的服务名,如postgresql、nfs) - 开启常用宽松项:
setsebool -P httpd_can_network_connect 1(允许 Apache 访问网络)、setsebool -P httpd_read_user_content 1(读用户家目录) - 如果布尔值不够用,用
audit2allow -a -M mypolicy从 audit.log 生成模块,再semodule -i mypolicy.pp加载——但注意,这会绕过策略审查,生产环境慎用
真正容易被忽略的是:SELinux 的拒绝行为不依赖文件系统权限,也不受 chmod 或 chown 影响。哪怕你把文件设成 777、所有者改成 root,只要上下文或策略不匹配,照样 Permission denied。排查时必须把 ls -l 和 ls -Z 对着看,缺一不可。










