为什么没有像Android或iOS那样的权限?

为什么没有像Android或iOS那样的权限?

当我在 Linux 上安装 GIMP 或 LibreOffice 等程序时,从来没有询问过权限。通过在 Ubuntu 上安装程序,我是否明确授予该程序在我的驱动器上的任何位置读/写以及完全访问互联网的完全权限?

理论上,GIMP 可以读取或删除我的驱动器上的任何目录,而不需要 sudo 类型的密码吗?

我只是好奇这在技术上是否可行,而不是是否可能。当然,我知道这不太可能。

答案1

这里有两件事:

  • 当您通过标准方式(系统安装程序,例如 Ubuntu 上的 apt/apt-get)安装程序时,它通常安装在所有用户都可以使用的某个目录中(/usr/bin...)。该目录需要写入权限,因此在安装过程中您需要特殊权限。

  • 当您使用该程序时,它会使用您的用户 ID 运行,并且只能在允许使用您的 ID 执行的程序读取或写入的地方进行读取或写入。就 Gimp 而言,您会发现无法编辑标准资源(例如画笔),因为它们位于共享中/usr/share/gimp/,并且您必须先复制它们。这也表明Edit>Preferences>Folders大多数文件夹都是成对出现的,系统文件夹是只读的,用户文件夹是可以写入的。

答案2

通过在 Ubuntu 上安装程序,我是否明确授予该程序在我的驱动器上的任何位置读/写以及完全访问互联网的完全权限?

是的,如果您使用sudo或同等的,您将给予安装人员拥有对驱动器上任何位置进行读/写的完全权限。这基本上是同一件事。安装程序还可以设置一个名为 setuid 的标志,这将使程序在安装后也具有完全权限。

即使我们忽略安装程序并且该程序不是 setuid(程序使用 setuid 的情况非常罕见),当您运行该程序时,它也可以完全访问您的帐户可以访问的任何内容。例如,如果您登录网上银行,它可能会将您的所有资金发送到尼日利亚。

为什么没有像Android或iOS那样的权限?

Linux 中的安全模型(即安全系统的设计方式)非常古老。它继承自 Unix,其历史可以追溯到 20 世纪 60 年代。那时候还没有互联网,一个部门大多数人都用同一台电脑。你们的大部分程序都来自值得信赖的大公司。因此,安全系统的设计目的是保护用户免受彼此的侵害,而不是保护用户免受他们运行的程序的侵害。

如今它已经相当过时了。 Android 基于 Linux,但它的工作原理是为每个应用程序而不是每个用户创建一个单独的“用户帐户”。不知道iOS用什么。像 Flatpak 这样的公司目前正试图将同样的东西带到 Linux 桌面上。

答案3

Flatpack 应用程序可以提供您想要的东西。这些非常类似于 iOS、Android 或 Windows 应用商店应用程序。

我还没有使用过它们,所以我不知道他们是否已经实现了 GUI,以查看每个应用程序安装时所需的权限。

https://blogs.gnome.org/alexl/2017/01/20/the-flatpak-security-model-part-2-who-needs-sandboxing-anyway/

每个 Flatpak 应用程序都包含一个清单,称为元数据。该文件描述了应用程序的详细信息,例如其身份 (app-id) 以及它使用的运行时。它还列出了应用程序所需的权限。

默认情况下,安装后,应用程序将获得其请求的所有权限。但是,您可以在每次调用 flatpak run 时覆盖权限,也可以使用 flatpak override 在每个应用程序的基础上全局覆盖权限(有关详细信息,请参阅 flatpak-run 和 flatpak-override 的手册页)。应用程序权限的处理目前在界面中有些隐藏,但长期计划是在安装过程中显示权限并使其更容易覆盖它们。

我也没有使用 Ubuntu 的替代品 Snappy,不知道它是否提供了在 GUI 中可见的功能。

答案4

Android 使用“市场”安全模型:不同的应用程序来自不同的(半信任的)供应商,并且应该与受保护的资源和彼此隔离。大多数应用程序都是以营利为目的进行分发的:它们被出售(付费软件)、展示付费广告或通过将数据出售给第三方来“货币化”用户。即使被抓到,参与非法数据访问的动机也很高。

Debian、Red Hat 和类似的“经典”Linux 发行版中的大多数应用程序都以源代码形式分发:在开源应用程序获得足够的吸引力后,发行版维护人员会手动选择将其包含在内。几乎没有动机进行非法数据访问——潜在的收益并不能证明努力的合理性。

值得注意的是,Android 先进的安全模型是它获得如此大的吸引力并在移动市场上轻松击败 iOS 的原因之一。现代桌面 Linux 发行版不仅“与众不同”,而且在安全性和分发模式方面实际上远远落后于时代。

一些 Linux 发行版正在对其软件分发系统进行改进:集中式第三方软件存储库(AUR)、用于分发第三方软件的专用包格式(AppImage、Snappy、Flatpack)、辅助存储库系统(Docker)。不幸的是,随着时间的推移,这些改进几乎没有什么吸引力:AppImage 于 2004 年发明,AUR 的第一个版本于 2005 年发布,但没有一个现代 Linux 发行版在超过 10 年之后正式采用它们的功能。

相关内容