在 Debian 里提到 “context 失效”,通常指的是 SELinux / AppArmor 的 context(安全上下文)没有按预期生效,或者是 systemd / PAM / 用户环境的 context 丢失。下面按常见场景说明原因和解决办法。
Debian 默认使用 AppArmor,而不是 SELinux。
如果你是“自己装了 SELinux”,但 context 不生效,常见原因:
getenforce
Disabled → 根本没启用Permissive → 只记录不拦截(看起来像“失效”)启用方式(需重启):
apt install selinux-basics selinux-policy-default
selinux-activate
reboot
即使启用了 SELinux,如果文件系统没有 label:
ls -Z /var/www
# 显示 ?
解决:
fixfiles onboot
reboot
# 或
restorecon -Rv /
context=例如:
mount -o context=system_u:object_r:httpd_sys_content_t:s0 /mnt
Debian 用的是 AppArmor,不是 SELinux context。
aa-status
complain 模式(只记录不阻止)aa-complain /usr/sbin/nginx
解决:
aa-enforce /etc/apparmor.d/usr.sbin.nginx
systemctl reload apparmor
例如:
systemd --user 没起来pam_systemd检查:
loginctl
systemctl --user status
修复:
apt install libpam-systemd
[Service]
SELinuxContext=system_u:system_r:httpd_t:s0
如果写错或 SELinux 未启用 → 直接忽略。
在 Docker / LXC / chroot 中:
你可以补充:
cat /etc/debian_version)我可以直接帮你定位是哪一层“失效”。