AppArmor 相當於 Firejail –net=none
firejail --net=none
創建一個看起來像沒有任何網路介面的電腦的沙箱。AppArmor 是否可以達到同樣的效果?看起來,AppArmor
deny network
只是否認一切,但並未對應用程序隱藏網路介面。
firejail 使網路介面“消失”的原因是它在新的網路命名空間中執行應用程序:
描述
網路命名空間提供了與網路相關的系統資源的隔離:網路設備、IPv4 和 IPv6 協議棧、IP 路由表、防火牆規則、
/proc/net
目錄(它是指向 的符號連結/proc/PID/net
)、/sys/class/net
目錄、下的各種文件/proc/sys/net
、埠號(套接字), 等等。$$ … $$
新的網路命名空間最初沒有介面(除了它自己的本地
lo
介面實例),這就是為什麼應用程序看不到任何介面(除了lo
)也不能執行任何有用的網路相關操作。AppArmor在訪問資源時對程序創建附加限制,這將阻止執行程序的使用者通常允許的操作成功。因此,您或許可以想像 AppArmor 可以配置為阻止應用程序成功訪問或與前面引用中提到的各種資源進行互動,但不會使它們消失。應用程序的結果會有所不同:它不會收到告訴結果為空或不存在這樣的對象的答案,而是會在請求時收到錯誤消息。因此,這個問題的答案是:不。
注意:
firejail --net=none
不僅僅是隔離網路命名空間。它做了更多的工作,包括防止查詢這些介面(因此在嘗試時也會出錯),以及隔離大多數其他命名空間(使用者、pid、掛載……)。還有很多其他工具可用於隔離。即使在某些情況下它們可能在功能上重疊,它們也經常一起使用。例如,Firejail 可以與 Apparmor、SELinux(AppArmor 的替代方法)或cgroups一起使用。或者例如還有seccomp(2)的使用,它在某些情況下可能會欺騙應用程序,告訴它請求的操作已成功完成,而實際上並沒有。這是一個例子,我認為它也不能用於防止看到網路介面。