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


26

当我在Linux上安装GIMP或LibreOffice之类的程序时,我从未被询问过权限。通过在Ubuntu上安装程序,我是否明确授予该程序对驱动器上任何位置的读/写权限以及对Internet的完全访问权限?

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

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


26
强制性XKCD:xkcd.com/1200
Andrea

10
因为Linux的安全性模型可以追溯到任何人想到的东西。实际上,它可以追溯到Internet出现之前-您面临的最大威胁是其他人使用同一台计算机。
user253751 '18

2
部分原因是许多使用* nix的人没有“安装”程序,所以他们要么从源代码编译它们,要么自己编写它们。因此,试想一下,如果您必须为编写的每个简单的小Shell脚本都经历“权限” rigamarole:那不是浪费大量时间吗?
jamesqf

4
我不赞成这种说法,“代码是开源的,您可以查看它,然后自己进行编译!”。所有这些陈述都是正确的,但这并不意味着我将能够查看我运行的每一行代码,即使我做到了,或者一个人团队做了一个,或者整个世界都做了,这绝不是意味着您会发现恶意代码或错误代码会对您的计算机造成负面影响。但是,感谢您的投入,我知道它可能会成为一个主要的痛苦,并且我现在已经找到解决方法。
stackinator

Answers:


31

这里有两件事:

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

  • 当您使用该程序时,它将以您的用户ID运行,并且只能在允许以您的ID执行的程序进行读写的情况下进行读取或写入。对于Gimp,例如,您会发现您无法编辑标准资源(例如画笔),因为它们在共享资源中/usr/share/gimp/,因此您必须先复制它们。这还显示了Edit>Preferences>Folders大多数文件夹成对出现的位置,一个只读的系统文件夹和一个可以写入的用户文件夹。


17
一旦安装了该程序,它的安装方式就无关紧要了。唯一要考虑的是它在哪个userid下运行((换句话说,是谁在使用它。)然后,它假定具有与同一用户运行的所有其他程序相同的访问权限
。– xenoid

3
@xenoid除非该程序安装为root拥有,并且setuid位为on。在这种情况下,尽管其他人使用了该程序,但该程序仍作为root运行。
蒙蒂·哈德

2
是的,它们全部18个:mount / umount / ping / sudo ...
xenoid

2
@xenoid,我认为重要的一点是,安装软件包不会明确要求您许可安装setuid二进制文件。相反,将安装软件包中的所有内容,并且如果涉及特权程序,您只需以其他方式“知道”。您完全依赖打包程序来确保该程序包与文档相匹配,并且在其他方​​面是安全的,程序包管理器实用程序无助于此。
ilkkachu

3
是的,所以没有什么新鲜的,这就是为什么有存储库的原因...即使没有setuid位和已安装的软件也可以做很多其他讨厌的事情,例如rm -rf ~/。如果从其他来源安装,则必须小心(或在检查代码后从来源安装)。
xenoid

23

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

是的,如果您使用sudo或等效版本,则表示授予安装程序完全权限,可以在驱动器上的任何位置进行读取/写入。这基本上是同一件事。安装程序还可以设置一个标志,称为setuid,这将使程序在安装后也具有完全权限。

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

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

在Linux中,安全模型(即安全系统的设计方式)非常古老。它是从Unix继承的,可追溯到1960年代。那时没有互联网,一个部门中的大多数人都使用同一台计算机。您的大多数程序来自受信任的大公司。因此,该安全系统旨在保护用户彼此之间,而不是保护用户免受其运行的程序的侵害。

如今,它已经过时了。Android基于Linux,但是它通过为每个应用程序(而不是每个用户)创建一个单独的“用户帐户”来工作。我不知道iOS使用什么。Flatpak之类的工作目前正在尝试将相同的东西引入Linux桌面。


2
实际上,这是将潜在的可利用代码作为单独的非特权用户运行,并希望操作系统中没有特权升级漏洞的一种说法。或Docker。
Willtech '18

@immibis Android使用Linux内核和ext FS。它没有任何其他相似之处。不要混淆Linux和类似UNIX(或GNU / Linux)的文件。(至少您没有将FreeBSD称为“ Linux”。)
wizzwizz4

1
@ wizzwizz4 Linux是内核,Android使用称为Linux的内核,我不确定您的意思是什么。
user253751 '18

@Willtech从技术上讲,它确实是一种安全措施,但是非常不便。毕竟,您通常希望应用程序能够访问您的文件。但是只有您告诉他们访问的文件。
user253751 '18

@immibis权限未在内核中实现,因此误导表示Android基于包含权限模型的系统。(IIirc内核强制执行了一些权限。)
wizzwizz4 18-03-28

9

Flatpack应用程序正在提供您想要的东西。这些非常相当于iOS,Android或Windows Store应用程序。

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

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

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

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

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


Flatpaks是否对Ubuntu中的主文件夹具有读/写权限?
stackinator

1
阅读该链接,看起来像是:a)他们有一个优雅的解决方案,其中应用程序只能访问用户在文件打开/保存窗口等中选择的文件,b)默认是授予对您的主目录的完全访问权限。
sourcejedi

2
Web应用程序是解决此问题的更为标准的解决方案,尽管在许多情况下效率低下。任何流行的Web浏览器都是功能强大且经过全面测试的沙箱。
sudo

6

这在技术上是可行和解决方案包括apparmorselinuxfirejail甚至全集装箱喜欢LXC或完整的虚拟机(例如VirtualBoxkvmvmware)。对于联网,有opensnitch一个littlesnitchOSX程序的克隆。

没有广泛的具有用户权限的安全模型的原因是,传统上您要小心在PC上运行的内容。移动系统应用商店中90%的内容将被视为PC上的恶意软件。

有用于广告软件(例如adaware或Spybot D&D)的扫描仪,它们会将PC,Google Analytics(分析)和广告网络之类的行为分类为PC上的恶意软件。当涉及到这些事情时,移动生态系统就像是整个计算的重新启动。每个人都将广告软件捆绑在一起,只是因为它很容易,并且因为他很好奇而添加了分析功能。副作用是隐私和安全性下降。安全部分由沙箱模型负责,隐私部分仍然是一个未解决的问题。

长时间没有在PC上使用此功能的另一个原因是沙箱的复杂性,这意味着一段时间前对于较旧的PC来说,两者可能都太慢了,并且需要更多的工程设计才能获得几乎没有优势的东西。

今天,我们看到了尝试以新的软件包格式(例如snap和flatpak)使用沙箱,并且浏览器也将其用于扩展。从一开始,Chromium就使用一种权限模型,而Firefox对所有web扩展都使用一种权限模型(因为只有57种可以安装的扩展)。这是很合理的,因为人们安装了来自未知作者的浏览器扩展程序,就像安装从未听说过的人的应用程序一样,认为它们没有比他们访问的网站更危险,这在没有沙箱保护他们的情况下是一种致命的误解。


4

Android使用“市场”安全模型:不同的应用程序来自不同的(半受信任的)供应商,并且应与受保护的资源相互隔离。大多数应用都是以营利为目的分发的:它们是通过出售(付费软件),显示付费广告或通过将其数据出售给第三方来“使用户盈利”的。即使发现非法数据,也极有可能进行非法数据访问。

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

值得注意的是,Android的高级安全模型是其获得如此高的吸引力,轻松克服移动市场上的iOS的原因之一。现代台式机Linux发行版不仅“不同”,实际上在安全性和分发模型方面也远远落后于时代。

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


3

当我在Linux上安装GIMP或LibreOffice之类的程序时,我从未被询问过权限。

这些应用程序安装在文件系统的特权部分中,您和大多数用户通常无权进行更改。

在为桌面使用而设置的主流发行版上,安装时最初设置的单个用户通常具有管理员权限。通常要求他们提供的只是安装软件的登录密码,而并非总是如此。

安装后,默认情况下,该软件将设置为普通用户可执行,并允许读取数据文件。这就是所需要的。

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

不是程序。发生的情况是该用户帐户属于不同的组,并且不同的组授予对不同资源的访问权限。

Linux上的安全模型是您的用户帐户具有特定的权限,而您帐户所属的组具有特定的权限。要访问文件系统的任何部分,都需要root特权,该特权通常不授予用户。即使使用sudo,您也不会获得所有权利。

普通用户帐户通常可以访问期望的资源,例如Internet。

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

您作为用户拥有访问权限的任何目录或文件都可以由您启动的应用程序访问,因为它通常会继承您的权限。默认情况下,通常登录的用户通常无权更改大多数关键系统文件或共享文件。

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

请记住,大多数用户通常从受严格监管的存储库中安装应用程序,并且恶意代码的风险较低。

我可能会建议您多读一些书,以了解Linux权限。

Android的安全模型是不断发展的,以匹配谁不但不一般都懂的操作系统的底层安全模型什么,但很难理解用户的需求,任何关于计算机。

Linux模型(坦率地说,我更喜欢它)旨在允许用户(尤其是管理员)对系统的安全性进行更多控制(在允许的权限范围内)。

我认为从用户的角度来看,最好将其描述为全自动和半自动或手动控制之间的区别。现代消费者想要全自动。Linux具有半自动和手动功能。如今,大多数Linux用户不再需要了解安全模型,但是如果您需要或需要它,则可以使用该控件。


2

当您安装某些程序时,您可以将它们安装在自己的用户空间(即,包含在主目录中)内,而不是系统范围内。这样一来,就不会要求您提供超级用户特权,因为您不需要超级用户特权来安装供一个用户自己使用的程序。正是如此安装的程序确实会能够访问文件不授予的“非所有者非小组成员可以阅读这个”不存在一个权限提升权限。


如果程序安装在我的主目录中,它可以在主目录中的任何位置读写吗?
stackinator

2
它具有您的权限运行,因此可以访问您可以访问的任何内容。
DopeGhoti

1
在单用户计算机上,仅用户访问并不比root访问更安全。无论哪种方式,您的用户都可以访问所有重要内容。
sudo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.