从不同角度来看,Snap 应用程序是如何受到保护的?
- 运行时保护?
- 内存保护?
- 与普通流程有何不同?
- 与虚拟机有何区别?
- 存储保护?
- 应用程序二进制文件的保护?
- 持久数据的保护?
- 容器
- “容器”一词在应用程序保护和安全方面意味着什么?
- 与普通流程有何不同?
- 与虚拟机有何区别?
- 与其他容器特别是“Docker”有何区别?
- 还有其他相关保护措施吗?
答案1
snapd 开发者在这里。
保护一词似乎暗示 snapd 包含某种 DRM 系统来保护二进制文件。根本没有这种东西。Snapd 保护您的系统免受可能不受信任的软件和各种软件包的相互影响。
与虚拟机的区别很简单,没有涉及虚拟机。在虚拟机中运行程序实际上是将程序、操作系统和硬件模拟器作为一个大进程在系统上运行。Snap 不使用任何类似的东西,而是直接在主机系统提供的硬件和内核上执行。
与普通进程的区别只有几个,但它们却使所有差异和魔力成为可能。Snapd 使用 Linux 内核的多种功能为 snap 进程(已启动 snap 应用程序的进程)提供文件系统的不同视图,以便它们可以在几乎任何现代发行版上运行。此外,这些进程与内核和其他用户空间程序的交互由 snapd 管理的沙箱控制。沙箱的具体行为取决于所使用的系统以及系统中 snap 之间建立的 snap 接口连接集。
如今,“容器”一词几乎毫无意义,它只是一个营销术语。Linux 内核提供了各种各样的工具,允许隔离系统的各个部分,并使其中一些部分看起来不受其他进程所做的更改的影响。这可能包括“它看起来像另一台机器”到“它看起来像这台机器”,并且不断发展和扩大其可执行的范围。
与 docker 等其他“容器”的区别在于所使用的原语集。具体来说,snapd 使用设备 cgroup、freezer cgroup、seccomp BPF 过滤器来限制系统调用,并使用大量 apparmor 配置文件来限制对 IPC 机制、网络机制、信号、功能、读取、写入和对系统上文件的其他访问的访问。Docker 或其他“容器”通常使用不同的内核功能集并以不同的方式配置它们。
从纯粹的感知差异来看,snapd 旨在与主机集成。如果您快速安装服务,它将直接对您机器的服务管理器 (systemd) 可见。如果您快速安装 CLI 应用程序,您将能够像主机上的任何其他应用程序一样运行它。如果您快速安装图形应用程序,它将与您的启动器、面板和其他典型控件集成。docker 的情况并非如此,它旨在允许您运行通常无头网络负载并将集成留给用户。
至于数据保护,snapd 管理和保留修订之间的应用程序数据,以允许用户恢复到以前的工作修订,并包含默认权限,限制对主目录中某些文件的潜在敏感访问。由于调解访问的机制不完整或不成熟,目前仍允许访问大多数主目录。随着时间的推移,访问将受到限制,并且只能通过细粒度调解授予。
有一份关于 snapd 安全模型的详细白皮书,我可以推荐它,它比我在这里介绍的要详细得多:https://developer.ubuntu.com/static/resources/ubuntu-core-16-security-whitepaper.pdf
答案2
“目前,由于调解访问的机制不完整或不成熟,因此大多数主目录仍被允许访问。随着时间的推移,访问将受到限制,并且只能通过细粒度调解才能授予。”
为了提供更多背景信息,默认情况下,Snap 仅允许访问其自身被认为是安全的数据和系统资源。Snap 开发人员能够请求其他资源(在 snapd 中称为“接口”),其中一些是自动授予的,另一些则由用户授予。Zygmunt 在这里指的是“home”接口,Snap 默认情况下没有它,但 snap 开发人员可以请求它。此 home 接口被视为支持某些传统用例的过渡接口,它在传统(又称经典)发行版上自动授予(与 Ubuntu Core 等发行版不同,后者不会自动连接),用户可以选择撤销它。正如 Zygmunt 指出的那样,随着时间的推移,home 接口的使用将受到限制,并且只有通过细粒度的中介才能授予对用户数据的访问权限。