![AppArmor 相当于 Firejail --net=none](https://linux22.com/image/183005/AppArmor%20%E7%9B%B8%E5%BD%93%E4%BA%8E%20Firejail%20--net%3Dnone.png)
firejail --net=none
创建一个看起来像没有任何网络接口的计算机的沙箱。
使用 AppArmor 是否可以达到相同的结果?看起来,AppArmordeny network
只是拒绝一切,但并不向应用程序隐藏网络接口。
答案1
firejail 使网络接口“消失”的原因是它在新的环境中运行应用程序网络命名空间:
描述
网络命名空间提供与网络相关的系统资源的隔离:网络设备、IPv4和IPv6协议栈、IP路由表、防火墙规则、目录
/proc/net
(这是到 的符号链接/proc/PID/net
)、/sys/class/net
目录、下的各种文件/proc/sys/net
、端口号(套接字) ), 等等。
[...]
新的网络命名空间最初没有接口(除了它自己的本地接口实例lo
),这就是应用程序看不到任何接口(除了lo
)也不能执行任何有用的网络相关操作的原因。
应用装甲在程序访问资源时对程序创建附加限制,这将阻止运行该程序的用户通常允许的操作成功。因此,您也许可以想象 AppArmor 可以配置为阻止应用程序成功访问前面引用中提到的各种资源或与之交互,但它不会使它们消失。应用程序将得到不同的结果:它不会收到告诉结果为空或不存在这样的对象的答案,而是在请求时收到错误。问题的答案是:不。
注意:firejail --net=none
不仅仅隔离网络名称空间。它做了更多的工作,包括防止查询这些接口(因此在尝试时也会出错),以及隔离大多数其他名称空间(用户、pid、挂载...)。
还有许多其他工具可用于隔离。即使在某些情况下它们的功能可能重叠,但它们通常都一起使用。例如 Firejail 可以与 Apparmor 一起使用,SELinux(AppArmor 的替代方法)或cgroups。或者例如还有使用秒计算(2)在某些情况下,这可能会欺骗应用程序,告诉它所请求的操作已成功完成,但实际上并未成功完成。这是一个例子,我认为它也不能用于防止看到网络接口。