發布 Bubblewrap 0.8,用於創建沙盒環境的層

用於組織隔離環境工作的工具 Bubblewrap 0.8 已發布,通常用於限制非特權使用者的個人應用程式。 在實務中,Flatpak 專案使用 Bubblewrap 作為隔離從套件啟動的應用程式的層。 此專案程式碼是用 C 語言編寫的,並在 LGPLv2+ 授權下分發。

為了實現隔離,使用傳統的 Linux 容器虛擬化技術,基於 cgroup、命名空間、Seccomp 和 SELinux。 為了執行特權操作來設定容器,Bubblewrap 會以 root 權限啟動(帶有 suid 標誌的可執行檔),然後在容器初始化後重設特權。

操作不需要在命名空間系統中啟動使用者命名空間,這允許您在容器中使用自己的單獨的識別碼集,因為它在許多發行版中預設不起作用(Bubblewrap 被定位為一個有限的 suid 實作)使用者命名空間功能的子集- 從環境中排除所有使用者和進程標識符(目前標識符除外,使用CLONE_NEWUSER 和CLONE_NEWPID 模式)。 為了提供額外的保護,在 Bubblewrap 下執行的程式以 PR_SET_NO_NEW_PRIVS 模式啟動,該模式禁止取得新權限,例如,如果存在 setuid 標誌。

檔案系統層級的隔離是透過預設建立一個新的掛載命名空間來實現的,其中使用 tmpfs 建立一個空的根分割區。 如有必要,外部 FS 分區會以「mount —bind」模式附加到此分區(例如,當使用「bwrap —ro-bind /usr /usr」選項啟動時,/usr 分區將從主系統轉送)處於只讀模式)。 網路功能僅限於透過 CLONE_NEWNET 和 CLONE_NEWUTS 標誌存取具有網路堆疊隔離的環回介面。

與同樣使用 setuid 啟動模型的類似 Firejail 專案的主要區別在於,在 Bubblewrap 中,容器建立層僅包含必要的最低功能,以及運行圖形應用程式、與桌面互動和過濾請求所需的所有高級功能到Pulseaudio,轉移到Flatpak端並在權限重設後執行。 另一方面,Firejail 將所有相關功能組合在一個可執行檔中,這使得審核和維護適當等級的安全性變得困難。

在新版本中:

  • 新增了“--disable-userns”選項以禁止在沙箱環境中建立自己的嵌套使用者命名空間。
  • 新增了「--assert-userns-disabled」選項,以檢查使用「--disable-userns」選項時是否使用了現有使用者 ID 空間。
  • 增加了與禁用核心中 CONFIG_SECCOMP 和 CONFIG_SECCOMP_FILTER 設定相關的錯誤訊息的資訊內容。

來源: opennet.ru

添加評論