互不信任的应用程序文件如何在 Linux 中得到保护

Jak*_*ake 5 security files application

我正在运行 Ubuntu Linux 机器。当我运行 Chrome 和 Firefox 等不同供应商编写的应用程序时,我注意到它们都使用我的 uid 运行。但如果是这样,他们在文件系统上创建的任何文件也将具有相同的 uid。那么在 linux 中,两个互不信任的应用程序如何使它们的文件彼此安全?

  • 应用 A 使用 ACL 策略仍可能允许应用 B 读取 A 的文件 - 通过(用户、组、其他)的用户部分
  • 应用程序是否需要使用加密来保护彼此的数据?

Gil*_*il' 14

字面上的答案是,在您的帐户下不存在不受信任的应用程序。如果要运行不受信任的应用程序,请在不同的帐户下或在虚拟机中运行它。

Unix、Windows等典型的桌面操作系统和Android、iOS等典型的移动操作系统具有不同的安全模型。Unix 是一个多用户操作系统,用户互不信任。应用程序被认为是可信的:用户的所有应用程序都运行在相同的安全上下文中。另一方面,服务不太可信:它们通常在专用帐户下执行,以减少出现安全漏洞时的影响。

Unix 安全模型以这种方式工作有两个主要原因:

  • 一个负面的原因是历史:在设计 Unix 时,应用程序来自一小群程序员,并由供应商的声誉或作为源代码提供,或两者兼而有之。在应用程序中很少担心后门。此外,很少有应用程序通过网络进行通信,因此触发和利用漏洞的机会相对较少。因此,没有强烈的动机将应用程序彼此隔离。
  • 一个积极的原因是功能性:隔离应用程序使很多事情变得不可能。如果每个应用程序都有自己的数据区域,那么应用程序之间的数据共享就会变得困难。在典型的 Unix 系统上,多个应用程序处理相同的数据是很常见的。尤其如此,因为 Unix 没有明确区分“应用程序”和“操作系统”。Web 浏览器是一个应用程序。无法将文件下载到您选择的目录中,因为浏览器仅限于它自己的目录,这很烦人。登录时显示菜单和图标的程序也是同一基础上的应用程序。文件管理器也是如此,根据定义,它们需要访问您的所有文件。到处执行脚本的 shell 和其他解释器也是如此。

尽管现在的应用程序作者比 40 年前多得多,但应用程序通常仍然通过可信渠道分发,这些渠道带有信誉指示。(这对 Linux 来说明显比在 Windows 上更真实,这也是病毒在 Windows 下更常见的部分原因。)发现具有后门的应用程序会立即从 Linux 软件存储库中提取。

移动操作系统的设计考虑了不同的威胁。它们是为单用户系统设计的,但应用程序来自完全不受信任的来源。

应用程序隔离开始进入桌面 Unix 系统。某些发行版在安全框架(例如AppArmorSELinux)下运行某些程序,这些框架限制了应用程序的功能。这些安全限制的代价是它们有时使理想的用途变得不可能,例如阻止受限制的应用程序打开某些目录中的文件。

加密将完全无用。加密只保护传输(通过网络)或静止(存储在磁盘上)的数据,它不保护实时系统上的数据——如果子系统 A 解密了它的数据,那么由操作系统来阻止子系统 B 阻止访问解密的数据,因此数据是由 A 解密还是未加密存储都无关紧要。操作系统可能会加密数据,但只是为了在存储介质被盗时保护它。

如果你想运行你不信任的代码,最好的办法是在虚拟机中运行它。仅授予虚拟机访问应用程序需要的文件的权限(例如,不要共享您的主目录)。

另请参阅为什么移动应用程序具有细粒度权限而桌面应用程序没有?为什么是移动设备的应用程序比桌面更严格?

  • @jamesqf 我强烈不同意这种说法。我认识很多使用 Unix 系统的非程序员——通常是 OSX、Ubuntu 或 Mint。他们中的一些人确实想要访问所有东西,即使他们不是程序员,其他人不在乎而是因为 Mac 而选择 OSX,或者因为自由而选择 Linux,或者因为他们在 1990 年代在大学里看到了他们的第一台计算机而选择了 Linux, Unix 是大学所拥有的,或者更喜欢 OSX/Gnome/KDE/... 的界面而不是 Windows 的界面,或者买不起一台功能强大到可以运行 Windows 的计算机,或者... (4认同)
  • 另请注意,*nix 从根本上说仍然是程序员的操作系统,而不是面向用户的操作系统。也就是说,使用它的人确实希望自己编写一些程序,因此希望能够访问系统上的几乎所有内容。 (3认同)