在运行时选择加入安全配置文件,无需繁琐的设置

信息安全 沙盒 selinux 服装 秒算
2021-09-07 13:54:41

我喜欢在程序中降低我的访问权限(例如,将我的程序限制在当前目录和文件中,禁用网络)。我想这是一个很普遍的愿望。

我希望能够以普通用户的身份执行此操作,无需配置文件的参与,也无需 root 访问权限来启用所述配置,也无需标记文件。我想在运行时指定我的安全配置文件。在最好的情况下,我也不需要任何特殊的内核配置或参数。

目前,我使用 apparmor,但它涉及:

1)启用apparmor。

这是一个问题,因为需要内核支持。我可能需要像 arch-linux-arm 一样重新编译。在运行 Red Hat Linux 的工作环境中,他们通常没有 apparmor,因为这是一个 selinux 世界。

2) 编写一个简单的配置文件(我们称之为 my_profile.armor):

profile restricted_books {
  deny network,
  /home/flux/_/dev/localhost.books/ r,
  /home/flux/_/dev/localhost.books/** r,
  /home/flux/_/dev/localhost.books/progress/ rw,
  /home/flux/_/dev/localhost.books/progress/** rw,
  /home/flux/_/dev/localhost.books/tmp/ rw,
  /home/flux/_/dev/localhost.books/tmp/** rw,
  /usr/bin/ebook-convert Ux,
}

2)注册配置文件(需要root)

sudo apparmor_parser my_profile.armor

或者,您可以将 my_profile.armor 移动到 /etc/apparmor.d/ 并重新启动。

3)以编程方式选择加入配置文件

#include <sys/apparmor.h>
aa_change_profile("restricted_books");
booyah();

而不是所有这些,我很乐意这样做:

sandbox_my_app_please_and_Im_normal_user("""
  deny network,
  /home/flux/_/dev/localhost.books/ r,
  /home/flux/_/dev/localhost.books/** r,
  /home/flux/_/dev/localhost.books/progress/ rw,
  /home/flux/_/dev/localhost.books/progress/** rw,
  /home/flux/_/dev/localhost.books/tmp/ rw,
  /home/flux/_/dev/localhost.books/tmp/** rw,
  /usr/bin/ebook-convert Ux,
""")
booyah()

那里有类似的东西吗?selinux 的 setcon() 看起来与我使用 apparmor 所做的类似,但它也涉及很多配置(我确定也需要 root)。而且内置的 seccomp() 函数看起来真的很复杂,所以我不确定它甚至可以做简单的文件/目录,没有网络场景。

2个回答

不是您真正想要的,但更接近的变体是:

normal@user:$ aa-exec -p restricted_books booyah

在这种情况下,您仍然需要:

  1. 启用 AppArmor
  2. 编写个人资料
  3. 注册资料

aa-exec但在那之后,您可以通过(使用指定的 AppArmor 配置文件限制程序)以普通用户身份限制任何具有任何配置文件的应用程序。更多细节在man aa-exec

您可以考虑Firejail https://firejail.wordpress.com/

Firejail 是一个 SUID 程序,它通过使用 Linux 命名空间和 seccomp-bpf 限制不受信任的应用程序的运行环境来降低安全漏洞的风险。它允许一个进程及其所有后代对全局共享的内核资源拥有自己的私有视图,例如网络堆栈、进程表、挂载表。

它具有大量开箱即用的常见应用程序的附加配置文件,并且配置语法很简单。命令行还允许您向新环境发出临时控制。read-write在此示例中,我授予对 OP 根目录的完全访问权限(“为清楚起见”),但实际上我可以使用和read-only选项的组合来强制执行与 cli 的 ro/rw 区别...

firejail --net=none --whitelist=/home/flux/_/dev/localhost.books/ /usr/bin/ebook-convert

这是另一篇 P. Vera 2020文章,它深入研究了 cli 使用沙箱处理进程。手册页中的更多详细信息firejail(您可能需要从头开始构建)https://firejail.wordpress.com/features-3/man-firejail/

AppArmor 支持在编译时默认禁用。