新一代通用的Linux軟件包管理工具

1. 前言

snap和flatpak都是新一代跨Linux發行版的軟件包管理技術,這兩種下一代打包方法在本質上擁有相同的目標和特點:即不依賴於第三方系統功能庫的獨立包裝。上一篇我們簡單介紹了flatpak的原理,今天我們接著簡要介紹snap的安全機制。

2. 簡介

snap是Canoncial公司提出的新一代linux包管理工具,致力於將所有linux發行版上的包格式統一,做到“一次打包,到處使用”。目前snap已經可以在包括Ubuntu、Fedora、Mint等多個Linux發行版上使用。首先我們來了解下snap相關的各種名詞:

2.1 snap

新一代跨Linux發行版的軟件包管理技術,支持各大主流Linux發行版,通過Linux內核安全機制保證用戶數據安全,徹底解決包依賴關係相關問題,並大大簡化應用軟件的打包工序。snap同時為安裝及管理snap包的命令行工具。

2.2 snapd

管理snap軟件包的後臺服務。

2.3 kernel snap

使用snap格式打包的內核,包含內核鏡像及內核模塊。

2.4 OS snap

使用snap格式重新打包的rootfs,包含了運行和管理snap的基本資源,當你第一次安裝snap時,OS snap 首先被安裝。

2.5 snapcraft

將軟件打包成snap格式的打包工具集。

2.6 snappy

原指完全基於snap構建的系統,此名稱已棄用,現統一稱為Ubuntu Core,即Ubuntu的全snap操作系統,有別於傳統基於deb包的classic Ubuntu。

3. 安全策略

snap應用以沙箱的方式運行。系統通過一些機制限制應用訪問資源的權限來實現其安全特性,比如通過對內核安全機制AppArmor,Seccomp等的配置實現的沙箱和snap文件系統等。開發者不必過多瞭解系統安全機制的細節。下面簡要說明snap使用的部分安全策略。

3.1 Sandbox

Linux Sandbox 是根據內核中支持的一些安全機制實現的進程訪問控制方式。通常通過為進程分配隨機uid,將進程置於chroot環境和為進程uid配置Capability等方式將進程置於嚴格受限的一種狀態下。snap應用使用這種方式運行在系統為其分配的沙箱環境中。

3.2 security policy ID

每一個snap應用程序命令都有唯一的security policy ID,系統將此ID與命令綁定,由此可以為同一snap包內的不同程序配置不同的安全策略。作為系統識別命令的標示,當程序安裝和運行時,系統會根據其Security Policy ID為其分配資源。在沙箱中運行的snap應用之間的通信控制也通過此ID來進行配置。

snap應用的security policy ID的命名規則為snap.name.command

例如,hello程序的security policy ID即為snap.hello.hello

3.3 snap文件系統

snap文件系統被劃分為具有隻讀和讀寫兩種不同權限的區域,每個snap應用有其獨有的受限文件目錄,如下圖所示:

新一代通用的Linux軟件包管理工具

snap文件系統

由此可見,一個snap應用具有寫權限的目錄是極其有限的,並且每個snap應用都有其獨立的可寫目錄。snap文件系統對snap應用相關目錄的權限配置說明,這種方式實現了應用與應用,應用與系統之間的隔離。

同時這種方式對snap應用的升級和回滾提供了很好的支持,升級時只需將確定版本的相關目錄複製到更高版本的對應目錄,而回退只需刪除更高版本的目錄。

3.4 AppArmor

AppArmor是一個強制訪問控制系統,在內核層面對進程可訪問的資源進行控制。 在snap應用程序安裝時,系統會為其中的每一個命令生成其特有的AppArmor配置文件。內核對可執行程序的Capability限制也可以通過Aparmor來配置。當執行應用程序中的命令時,AppArmor機制可保證此命令不會越權訪問。 作為一種內核中的安全機制,在ubuntu classic系統中也同時支持AppArmor提供的機制。但與classic系統不同,snap系統對程序的訪問控制更加嚴格,基本做到“只滿足程序執行所需的最小權限”。

3.5 Seccomp

Seccomp是一個內核接口訪問過濾器,snap應用程序通過其獨有的過濾器訪問內核接口。在snap應用程序啟動之前會自動配置過濾器。Seccomp在snap系統中的作用類似於AppArmor。都是控制應用程序對系統資源的訪問。


分享到:


相關文章: