什么是Snap的经典模式,为什么有些应用(例如MS Visual Studio)没有经典模式就无法安装?

我尝试使用以下命令将MS Visual Studio Code作为Snap包安装在Ubuntu 16.04上:
sudo snap install vscode

但是我遇到了以下错误:
error: This revision of snap "vscode" was published using classic confinement and thus may perform
       arbitrary system changes outside of the security sandbox that snaps are usually confined to,
       which put your system at risk.

       If you understand and want to proceed repeat the command including --classic.

我想知道 --classic 标志是做什么的(不只是 man 页上的解释),以及为什么在我安装 Visual Studio Code 时会出现之前的错误。

我尝试通过snap(使用--classic选项)进行安装,但是snap报告错误:无法安装"vscode":未找到snap。你能安装它吗? - imrek
使用以下命令安装VS Code:snap install code --classic - undefined
1个回答

观看这个简短的视频,它解释了Snaps中可用的每种限制模型,以及为什么存在--classic和其使用案例。

来源: 以下文档摘自snapcraft.io: confinement policies

严格模式

这是应用于 Snaps 的默认安全策略。Snaps 只能在其自己的安装空间和选定区域中具有读取和/或写入权限。它可以访问其捆绑的库和/或由核心或 ubuntu-core Snap 提供的库。通过接口可以授予扩展权限,这些接口可以在安装时连接,也可以由用户使用snap connect命令连接。例如,home 接口将授予用户主目录中的读取权限。

严格模式下,您可以访问以下可读和/或可写路径:

  • /snap/snapname/revision(只读,Snap 安装路径)
  • /var/snap/snapname/revision(读/写,每个版本的数据)
  • /var/snap/snapname/common(读/写,公共数据)
  • /home/$USER/snap/snapname/revision(读/写,每个版本的用户数据)
  • /home/$USER/snap/snapname/common(读/写,公共用户数据)
查看环境变量列表,了解严格限制的Snap中可见的详细信息,以及在Snap的受限空间内访问shell的方法。

开发者模式

开发者模式(也称为devmode)使用与严格限制相同的安全策略,但安全拒绝会转换为/var/log/syslog中的警告(请参阅调试)。这在打包应用程序时非常有用,可以发现需要声明哪些接口。以开发者模式运行的Snap无法发布到稳定版和候选版渠道商店。

经典模式

在经典约束下,快照的行为类似于传统打包的应用程序,可以完全访问系统。与严格模式和开发模式相反,经典快照将“/”视为主机系统的“/”,而不是核心快照的“/”。使用此完全开放的安全策略的快照在商店中进行手动审核,并且仅允许在安装了snapd的系统上使用传统Linux发行版,而不是从Ubuntu Core映像引导的系统。它们可以在所有商店频道中发布。

我在安装VS Code时应该选择严格模式还是选择经典选项以确保VS Code能够正常运行? - undefined