Ian*_*n N 9 security python apparmor
对于解释型/虚拟机语言(例如 python、java、shell 脚本),可以将 apparmor 设置为仅限制特定的脚本或程序吗?如果是这样,如何?
是的,这是可能的。它也在 Ubuntu 中使用,尤其是在手机上。
要获取基本的 apparmor 脚本,您可以使用 apparmor-utils 包中的 aa-autodep。
python 的快速示例:
cat >> ~/myapp << EOF
#! /usr/bin/python
EOF
sudo aa-autodep ~/myapp
cat /etc/apparmor.d/home.<user-name>.myapp
Run Code Online (Sandbox Code Playgroud)
这会给你类似的东西:
# Last Modified: Mon Feb 24 18:31:50 2014
#include <tunables/global>
/home/sam/myapp flags=(complain) {
#include <abstractions/base>
#include <abstractions/python>
/home/sam/myapp r,
/usr/bin/python2.7 ix,
}
Run Code Online (Sandbox Code Playgroud)
然后你可以对此进行扩展。
好吧,实际上使用“/usr/bin/python2.7 ix”并不是一个好主意。由于被利用的代码可能会从 shell 执行 python,例如:python -c '一些邪恶代码'。
这绝对不是您想要的,并且完全打破了沙箱概念(apparmor 是什么)。
ix意味着继承与父配置文件相同的限制。在这种情况下,我不确定在与 /home/sam/myap 相同的限制下执行外部命令是否是一个好主意。
既然我们谈论安全性,我们应该问:为什么调用的外部命令/python/home/sam/myapp应该能够访问由/home/sam/myapp系统范围敏感文件创建的读/写/删除文件?甚至创建与外部系统的连接?(还记得 Skype 读取 /etc 下不必要的文件的旧情况吗?)
所以更安全的解决方案是使用子配置文件(子配置文件)来运行外部python程序
#include <tunables/global>
/home/sam/myapp flags=(complain) {
#include <abstractions/base>
/home/sam/myapp r,
/usr/bin/python2.7 Cx -> trusted_domain,
profile trusted_domain {
#include <abstractions/....>
#include <abstraction/python>
/usr/bin/my-python-app r,
... your policy for data, logs, connections, python files...
}
}
Run Code Online (Sandbox Code Playgroud)