Docker 似乎同时支持 apparmor 和 seccomp。Docker 还允许在运行容器时删除功能。
但是,我找不到有关何时使用哪种方法的任何文档或指南。
它们的用途似乎有很大的重叠,我无法弄清楚何时使用这些选项中的哪一个的任何一般准则。
有人可以提供任何指导吗?
就我而言,我必须在服务器上运行很多学生代码。我想让他们运行 Java 和 c++ 程序。允许对一个目录(数据卷)进行写访问。他们不需要网络访问或任何复杂的东西。
请提供一些指导如何保护。
Docker 似乎同时支持 apparmor 和 seccomp。Docker 还允许在运行容器时删除功能。
但是,我找不到有关何时使用哪种方法的任何文档或指南。
它们的用途似乎有很大的重叠,我无法弄清楚何时使用这些选项中的哪一个的任何一般准则。
有人可以提供任何指导吗?
就我而言,我必须在服务器上运行很多学生代码。我想让他们运行 Java 和 c++ 程序。允许对一个目录(数据卷)进行写访问。他们不需要网络访问或任何复杂的东西。
请提供一些指导如何保护。
您可以使用所有这些。
这些安全功能中的每一个都有不同的用途,实际上几乎没有重叠。它们的作用都是减少进程一旦受到损害可能造成的损害。它们的开销都非常低,可用于显着提高软件的安全性。
Seccomp是一个 Linux 功能,它允许用户空间程序设置系统调用过滤器。这些过滤器指定允许哪些系统调用,以及允许它们具有哪些参数。它是一个非常低级的过滤器,可以减少内核的攻击面。例如,keyctl()
允许对该系统调用进行简单调用以提升权限的错误不一定适用于对该调用的访问受限的程序中的 privesc。
AppArmor是一个强制访问控制框架,用作 LSM(Linux 安全模块)。它用于将主体(程序)对对象(文件、路径等)的访问列入白名单或黑名单。AppArmor 可用于允许程序具有读取权限/etc/passwd
,但不允许/etc/shadow
。这些策略还可用于限制功能,甚至限制网络访问。
能力和能力下降是一种通用技术,特权进程通过该技术撤销其被赋予的特权子集。例如,根进程可以放弃创建与网络的原始连接所需的功能,或绕过标准 UNIX 文件权限 (DAC) 所需的功能,即使它仍然是根。这种技术不是很细粒度,因为只有有限数量的功能可以删除,但它可以减少程序在受到损害时可能造成的损害。
一般来说,您应该知道:
Seccomp 降低了内核漏洞被成功利用的机会。
AppArmor 阻止应用程序访问它不应该访问的文件。
能力下降减少了受损的特权进程可能造成的损害。
另请参阅沙盒是如何实现的?
@forest回答得很好,但我想添加一些建议,这些建议反映了我对安全框架和安全设计的总体看法。实施安全性与了解您要保护自己免受什么侵害或至少要保护什么密切相关。然而,所有这一切都必须从安全策略开始。一旦制定了政策,选择就更容易了。让我们考虑几个案例,它们可能反映也可能不反映您的用例。但在考虑它们之前,将可用选项缩小到以下范围可能会有所帮助:
现在,案例: