我使用 apparmor 和 libapache2-mod-apparmor 来对一些网站进行沙盒处理。然而,在最近重新安装后,它停止工作了。我一直收到此错误:
Setting up apparmor (2.7.0~beta1+bzr1774-1ubuntu2) ...
* Starting AppArmor profiles
Warning from stdin (line 1): /sbin/apparmor_parser: cannot use or update cache, disable, or force-complain via stdin
[ OK ]
* Reloading AppArmor profiles
Warning from stdin (line 1): /sbin/apparmor_parser: cannot use or update cache, disable, or force-complain via stdin
invoke-rc.d: initscript apparmor, action "reload" failed.
我尝试彻底删除并清除 apparmor、apache2、libapache2-mod-apparmor 等,然后重新安装,但一直出现此错误。据我所知,系统上没有其他东西可以阻止它。有什么想法吗?
答案1
当内核报告的功能与缓存中的功能不同步时,AppArmor 无法生成或更新缓存文件。当安装了具有新功能的内核和/或用户空间尚未更新以匹配和/或用户空间编译器中存在错误时,可能会发生这种情况。
导致这种情况的一种方法是安装开发版本或上游版本的内核,但不使用匹配的软件包更新 apparmor 用户空间。这不会阻止 apparmor 加载策略,但它会生成警告并降低其速度,因为它在每次加载时都会进行新的编译。
删除并重新安装一组软件包(例如apparmor
、、、apache2
... libapache2
)可能会或可能不会正确删除和清除旧的不一致缓存文件。部分删除缓存文件通常会导致不会生成新的缓存条目,因为缓存仅存储一个功能集的条目。
缓存文件存储在 中/etc/apparmor.d/cache/
。
您可以通过查看以下内容来比较缓存和内核功能集:
/etc/apparmor.d/cache/.features
并取决于你的内核:
/sys/kernel/security/apparmor/features/
(条目目录)
或者:
/sys/kernel/security/apparmor/features
(一份文件)
和:
/sys/kernel/security/apparmor/matching
您可以检查已加载的策略状态,以确定策略是否正在加载以及您使用以下命令遇到的缓存更新失败:
sudo aa-status
您可以尝试使用以下方法强制重新生成缓存:
sudo /etc/init.d/apparmor restart
如果失败,您可以尝试手动删除缓存文件,然后重新生成缓存:
sudo rm -rf /etc/apparmor.d/cache/*
sudo /etc/init.d/apparmor restart
如果这不起作用,则说明您遇到了错误,我建议您使用启动板提交错误:
ubuntu-bug apparmor