当我在 Linux 上安装 GIMP 或 LibreOffice 之类的程序时,我从来没有被问到权限问题。通过在 Ubuntu 上安装程序,我是否明确授予该程序在我的驱动器上的任何位置读/写的完全权限以及对互联网的完全访问权限?
从理论上讲,GIMP 可以读取或删除我驱动器上的任何目录,而不需要 sudo 类型的密码吗?
我只是好奇它在技术上是否可行,而不是它是否可能。当然,我知道这不太可能。
当我在 Linux 上安装 GIMP 或 LibreOffice 之类的程序时,我从来没有被问到权限问题。通过在 Ubuntu 上安装程序,我是否明确授予该程序在我的驱动器上的任何位置读/写的完全权限以及对互联网的完全访问权限?
从理论上讲,GIMP 可以读取或删除我驱动器上的任何目录,而不需要 sudo 类型的密码吗?
我只是好奇它在技术上是否可行,而不是它是否可能。当然,我知道这不太可能。
这里有两件事:
当您通过标准方式安装程序时(系统安装程序,例如 Ubuntu 上的 apt/apt-get),它通常安装在所有用户都可以使用的某个目录中(/usr/bin...)。此目录需要写入权限,因此您在安装期间需要特殊权限。
当您使用该程序时,它会以您的用户 ID 运行,并且只能在允许以您的 ID 执行的程序读取或写入的地方读取或写入。例如,对于 Gimp,您会发现无法编辑画笔等标准资源,因为它们在共享
/usr/share/gimp/
中,您必须先复制它们。这也显示了Edit>Preferences>Folders
大多数文件夹成对出现的位置,一个只读的系统文件夹和一个可以写入的用户文件夹。是的,如果您使用
sudo
或等效的,您将授予安装程序在您的驱动器上的任何位置读/写的完全权限。这主要是同一件事。还有一个安装程序可以设置的标志,称为setuid,这将使程序在安装后也具有完全权限。即使我们忽略安装程序并且程序不是 setuid(程序很少使用 setuid),当您运行该程序时,它也可以完全访问您的帐户可以访问的任何内容。例如,如果您登录了您的网上银行,它可能会将您的所有资金发送到尼日利亚。
Linux 中的安全模型——也就是安全系统的设计方式——已经很老了。它继承自 1960 年代的 Unix。那时,没有互联网,一个部门的大多数人都使用同一台电脑。您的大部分程序都来自受信任的大公司。因此,安全系统旨在保护用户免受彼此的侵害,而不是保护用户免受他们运行的程序的侵害。
如今,它已经相当过时了。Android 基于 Linux,但它通过为每个应用程序而不是为每个用户创建单独的“用户帐户”来工作。我不知道iOS使用什么。像 Flatpak 这样的努力目前正试图将同样的东西带到 Linux 桌面。
你想要的是由 Flatpack 应用程序提供的。这些与 iOS、Android 或 Windows Store 应用程序非常等效。
我还没有使用它们,所以我不知道他们是否已经实现了 GUI,以便在安装每个应用程序时查看每个应用程序所需的权限。
https://blogs.gnome.org/alexl/2017/01/20/the-flatpak-security-model-part-2-who-needs-sandboxing-anyway/
我也没有使用过 Ubuntu 的替代品 Snappy,以了解它是否提供了在 GUI 中可见的这种功能。
这在技术上是可行的,解决方案包括
apparmor
,selinux
甚至firejail
是完整的容器,如LXC
完整的虚拟机(例如VirtualBox
,kvm
或vmware
)。对于网络,它是OSX 程序opensnitch
的克隆。littlesnitch
没有由用户授予权限的广泛安全模型的原因是传统上您要小心您在 PC 上运行的内容。移动系统应用商店中 90% 的内容将被视为 PC 上的恶意软件。
有广告软件扫描器(即 adaware 或 Spybot D&D),可将连接 facebook、google 分析和广告网络等行为分类为 PC 上的恶意软件。当涉及到这些事情时,移动生态系统就像是计算的全新重启。每个人都捆绑广告软件,只是因为它很容易并添加分析,只是因为他很好奇。副作用是降低隐私和安全性。安全部分由沙盒模型解决,隐私部分仍然是一个悬而未决的问题。
另一个在 PC 上没有长时间使用它的原因是沙盒的复杂性,这意味着它对于前一段时间的旧 PC 来说可能太慢了,并且需要更多的工程来实现当时没有什么优势的东西。
今天,我们看到有人尝试在 snap 和 flatpak 等新的包格式中使用沙盒,并且浏览器也将其用于扩展。Chromium 从一开始就使用权限模型,而 Firefox 对所有 Web 扩展都使用权限模型(从 57 开始,您可以安装的唯一扩展)。这是相当合理的,因为人们安装来自未知作者的浏览器扩展,就像他们从未听说过的人的应用程序一样,认为它们并不比他们访问的网站更危险,当没有沙箱保护它们时,这是一个致命的误解。
Android 使用“市场”安全模型:不同的应用程序来自不同的(半可信的)供应商,并且应该与受保护的资源以及彼此隔离。大多数应用程序都是以营利为目的的:它们被出售(付费软件)、显示付费广告或通过将用户的数据出售给第三方来“赚钱”。从事非法数据访问的动机很高,即使他们被抓住了。
Debian、Red Hat 和类似的“经典”Linux 发行版中的大多数应用程序都以源代码形式分发:在开源应用程序获得足够的吸引力后,发行版维护人员会手动选择它以包含在内。执行非法数据访问的动机很小——潜在的收益并不能证明努力的合理性。
值得注意的是,Android 先进的安全模式是其在移动市场上获得如此大的关注,轻松战胜 iOS 的原因之一。现代桌面 Linux 发行版不仅仅是“不同”,它们在安全性和发行模式方面实际上远远落后于时代。
一些 Linux 发行版正在对其软件分发系统进行改进:集中式第三方软件存储库 (AUR)、用于分发第三方软件的专用包格式(AppImage、Snappy、Flatpack)、二级存储库系统(Docker)。不幸的是,随着时间的推移,这些改进几乎没有获得什么牵引力:AppImage 于 2004 年发明,AUR 的第一个版本于 2005 年发布,但现代 Linux 发行版在 10 年后都没有正式采用它们的功能。
这些应用程序安装在文件系统的特权部分中,您和大多数用户通常无权更改。
在为桌面使用设置的主流发行版上,安装时最初设置的单个用户通常具有管理员权限。他们通常被要求提供的只是他们自己的登录密码来安装软件,而且并非总是如此。
安装后,默认情况下,该软件将设置为可由普通用户执行并允许读取数据文件。这就是所有需要的。
不是程序。发生的情况是用户帐户属于不同的组,并且不同的组授予对不同资源的访问权限。
Linux 上的安全模型是您的用户帐户具有一定的权限,您的帐户所属的组具有特定的权限。对文件系统的任何部分的权限都需要 root 权限,而这些权限通常不授予用户。即使您使用sudo,您也不会获得所有权利。
普通用户帐户通常可以访问他们预期需要的资源,例如互联网。
您作为用户有权访问的任何目录或文件都可以由您启动的应用程序访问,因为它通常会继承您的权限。默认情况下,正常登录的用户通常无权更改大多数关键系统文件或共享文件。
请记住,大多数用户通常从管理良好且恶意代码风险较低的存储库安装应用程序。
我可能会建议一些额外的阅读来掌握 Linux 权限。
Linux 权限简介
了解 Linux 文件权限
Android 安全模型正在不断发展,以满足用户的需求,这些用户不仅通常不了解操作系统的底层安全模型,而且几乎不了解计算机。
Linux 模型(坦率地说,我更喜欢它)旨在允许用户(尤其是管理员)对系统的安全性进行更多控制(在他们允许的权限范围内)。
我认为从用户的角度来看,最好将其描述为全自动和半自动或手动控制之间的区别。现代消费者想要全自动。Linux有半自动和手动。如今,大多数 Linux 用户从不需要了解安全模型,但如果您需要或想要它,控制就在那里。
当您安装一些程序时,您可以将它们安装在您自己的用户空间(即在您的主目录中自包含)而不是系统范围内。因此,您不会被要求提供超级用户权限,因为您不需要他们来安装供某个用户自己使用的程序。在没有特权升级的情况下,这样安装的程序确实无法访问未授予“非所有者非组成员可以读取此”权限的文件。