我正在使用 AppArmor 来:
- 禁用针对特定过程的网络。
但我确实想:
- 使能够随时随地进行读写。
我只想限制网络访问,而不是文件访问。(如果您好奇,所讨论的进程是 jupyter,它执行用户为黑客竞赛编写的一些笔记本。)
我正在尝试编辑/etc/apparmor.d/xxxxx
以允许:
# Last Modified: Mon May 21 23:47:47 2018
#include <tunables/global>
/home/ricardopdmcruz/.local/bin/jupyter {
#include <abstractions/base>
#include <abstractions/python>
/** rwlkmix,
/home/ricardopdmcruz/.local/bin/jupyter r,
/usr/bin/python3.5 ix,
# block ipv4 acces
deny network inet,
# ipv6
deny network inet6,
# raw socket
deny network raw,
}
但是该进程(jupyter)仍然抱怨它无法在某处读取或写入...配置文件的顺序重要吗?
答案1
我知道问题出在哪里了。
Jupyter(即使在 shell 模式下)需要套接字,而我的规则禁用了它。
我认为有两种可能的解决方案:
- 禁用外部互联网,但允许套接字
- 仅使用 jupyter 将 .ipynb 转换为 .py,然后在 python3 解释器上使用 AppArmor。(我使用了 python3 解释器的副本,而不是系统版本,以免干扰系统。)
我选择了解决方案 #2,因为我不知道如何实现 #1。我尝试删除“deny network raw”并保留“deny network inet”,但这似乎也会禁用套接字。