我喜欢在程序中降低我的访问权限(例如,将我的程序限制在当前目录和文件中,禁用网络)。我想这是一个很普遍的愿望。
我希望能够以普通用户的身份执行此操作,无需配置文件的参与,也无需 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() 函数看起来真的很复杂,所以我不确定它甚至可以做简单的文件/目录,没有网络场景。