apparmor 可以限制解释语言吗?

Ian*_*n N 9 security python apparmor

对于解释型/虚拟机语言(例如 python、java、shell 脚本),可以将 apparmor 设置为仅限制特定的脚本或程序吗?如果是这样,如何?

lab*_*sin 2

是的,这是可能的。它也在 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)

然后你可以对此进行扩展。


Yur*_*kov 1

好吧,实际上使用“/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)