apparmor aa-logprof 不询问所有依赖项

apparmor aa-logprof 不询问所有依赖项

在尝试为我的 python-flask 应用程序(通过 gunicorn 执行)编写 apparmor 配置文件时,我无法让 aa-logprof 询问我有关所有依赖项的信息。

如果在抱怨模式下,应用程序按预期工作,但 aa-logprof 没有提出更多建议(请参阅本帖最后的完整配置文件)。我读到的所有地方,人们似乎都声称 aa-logprof 应该询问所有依赖项,它从 /var/log/syslog 本身读取。如果我切换到 aa-enforce,应用程序将失败并死机。跟踪系统日志显示网络被拒绝,这当然是因为 aa-logprof 没有询问我。我的问题不是我如何为应用程序启用网络,而是我的方法有什么不正确,因为我没有被询问所有依赖项?

当抱怨时,网络内容是允许的(并且 logprof 不会问我有关它?!)

Feb 22 20:54:40 devshed kernel: [7991608.610578] type=1400 audit(1424634880.675:68975): apparmor="ALLOWED" operation="accept" profile="/usr/local/bin/gunicorn" pid=2350 comm="gunicorn" laddr=127.0.0.1 lport=5000 family="inet" sock_type="stream" protocol=6
Feb 22 20:54:40 devshed kernel: [7991608.716887] type=1400 audit(1424634880.783:68976): apparmor="ALLOWED" operation="accept" profile="/usr/local/bin/gunicorn" pid=2353 comm="gunicorn" laddr=127.0.0.1 lport=5000 family="inet" sock_type="stream" protocol=6

强制执行时,网络内容被拒绝(并且 logprof 也不会询问我有关它?)

Feb 22 20:41:04 devshed kernel: [7990792.228716] type=1400 audit(1424634064.295:68737): apparmor="DENIED" operation="create" profile="/usr/local/bin/gunicorn" pid=2162 comm="gunicorn" family="inet" sock_type="stream" protocol=0

/usr/local/bin/gunicorn {
 #include <abstractions/base>
 #include <abstractions/bash>
 #include <abstractions/python>

 /bin/dash rix,
 /bin/uname rix,
 /etc/nsswitch.conf r,
 /etc/services r,
 /proc/*/mounts r,
 /sbin/ldconfig rix,
 /sbin/ldconfig.real rix,
 /usr/bin/python2.7 ix,
 /usr/local/bin/ r,
 /usr/local/bin/gunicorn r,
 /usr/share/mysql/charsets/Index.xml r,
 /tmp/* rw,
 /var/tmp/* a,
 /var/www/api/app.log w,
 /var/www/api/app/* r,
 /var/www/api/* a,
}

答案1

我不认为这是你的错。apparmor-utils 的 2.8.98-0ubuntu2 版本(Ubuntu 14.10 中提供)似乎存在错误。aa-genprof 经常崩溃(python 错误),我注意到 aa-logprof 也有类似你描述的行为。它满足了一些规则,但其他规则似乎被遗漏了。

希望下一版本会更好。新版本已经发布,只是尚未包含。

顺便说一句,aa-genprof 中的崩溃与您发布的类似的套接字规则有关,所以我怀疑日志解析器存在一些问题。

相关内容