firejail --net=none创建的沙箱看起来像一台没有任何网络接口的计算机。
用AppArmor实现同样的结果是可能的吗?看起来,AppArmor的deny network只是否认一切,但并没有对应用程序隐藏网络接口。
发布于 2020-11-06 17:00:00
防火墙之所以使网络接口“消失”,是因为它在一个新的网络命名空间中运行应用程序:
描述网络名称空间提供与网络相关的系统资源的隔离:网络设备、IPv4和IPv6协议栈、IP路由表、防火墙规则、
/proc/net目录(这是到/proc/PID/net的符号链接)、/sys/class/net目录、/proc/sys/net下的各种文件、端口号(套接字)等等。 ...
新的网络命名空间最初没有接口(除了它自己的lo接口的本地实例),这就是为什么应用程序看不到任何接口(除了lo),也不能执行任何有用的网络相关操作。
当程序访问资源时,AppArmor会为程序创建额外的限制,这将阻止运行程序的用户通常允许的操作成功。因此,您也许可以想象,AppArmor可以被配置为阻止应用程序成功地访问或与前面引用中提到的各种资源进行交互,但它不会使它们消失。应用程序将得到结果上的差异:它不会收到结果为空或没有这样的对象的答复,而是在请求时会收到一个错误。因此,问题的答案是:不。
注意:firejail --net=none所做的不仅仅是隔离网络命名空间。它做了更多的工作,包括防止甚至查询这些接口(因此在尝试时也会出现错误),以及隔离大多数其他名称空间(用户、pid、挂载、.)。
还有许多其他工具可用于隔离。即使在某些情况下,它们可能在功能上重叠,但它们通常都是一起使用的。例如,可以沿Apparmor、SELinux (AppArmor的替代方法)或C组使用Firejail。或者,也有seccomp(2)的使用,在某些情况下,它可以欺骗一个应用程序,告诉它请求的操作是成功的,而它却没有成功完成。
https://unix.stackexchange.com/questions/618375
复制相似问题