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

用於組織隔離環境工作的工具 Bubblewrap 0.6 已發布,通常用於限制非特權使用者的個人應用程式。 在實務中,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 將所有相關功能組合在一個可執行檔中,這使得審核和維護適當等級的安全性變得困難。

在新版本中:

  • 增加了對介子組裝系統的支援。目前保留了對使用 Autotools 進行建置的支持,但將在未來版本中刪除。
  • 實作了「--add-seccomp」選項來新增多個 seccomp 程式。新增了警告,如果再次指定“--seccomp”選項,則僅套用最後一個參數。
  • git 儲存庫中的 master 分支已重新命名為 main。
  • 增加了對 REUSE 規範的部分支持,該規範統一了指定許可證和版權資訊的過程。許多代碼檔案都新增了 SPDX-License-Identifier 標頭。遵循重複使用指南可以更輕鬆地自動確定哪個許可證適用於應用程式程式碼的哪些部分。
  • 新增了檢查命令列參數計數器 (argc) 的值,並在計數器為零時實施緊急退出。此變更有助於阻止因錯誤處理傳遞的命令列參數而導致的安全性問題,例如 Polkit 中的 CVE-2021-4034。

來源: opennet.ru

添加評論