我是 Ubuntu 新手,以前我什么都用 Windows。据我所知,Windows 为用户提供了“只读”文件选项。但在我看来,Ubuntu 允许用户过度操纵文件权限。
drwxrwxrwx 2 ttt ttt 4096 Tem 24 13:04 dante
- 用户有三组:分别是所有者、组和其他。
通常,创建文件的人是所有者。那么“组”和“其他”是谁。这是否更多地用于有许多用户的服务器类系统?
即使这是用于安全问题,如果没有“$sudo”,它就可以轻松地更改为任何想要的。
您还能推荐更多阅读材料吗?
我可能夸大了“chmod”,但如果您回答的话我还是会感谢您。
答案1
我相信这可以分解为几个密切相关的问题,这些问题都可以以合理的客观性来回答。
为什么 Ubuntu 允许针对不同用户和用户组调整不同类型的权限?这种高度可配置性真的有必要吗?
几乎所有当前使用的操作系统(包括 Windows)都具有此功能。实际上,Windows 上的系统更复杂,因为Windows 使用 访问控制列表为了几乎所有的而 Ubuntu 使用更简单的系统Unix 风格的所有权和权限大多数时候(但也支持访问控制列表)。
这样做的必要性如下:
如果您希望除您自己之外的其他用户访问您的计算机,您需要能够决定某些文件对某些用户完全禁止访问,而其他文件则可由某些用户读取但不能修改。
请记住,这包括你可能希望访问你计算机的人通过网络。比如你自己。许多人希望能够在家里的电脑之间或与朋友共享文件,但不希望与碰巧使用同一公共无线网络的任何人共享文件。因此用户所代表的人数比实际使用键盘的人数还要多。
您使用的操作系统 Ubuntu 与 Ubuntu Server 是同一个操作系统。它们默认安装的软件包和安装程序都不同。您可以将服务器系统转换为桌面系统,反之亦然。对于大多数服务器来说,完整的所有权和权限系统是必需的,即使对于某些桌面来说可能不需要。有了它,桌面就可以正常工作;没有它,服务器就无法工作。
用户帐户可以代表访问您计算机的真实人员,但它们所代表的远不止这些。用户帐户代表一组能力。存在特殊用户帐户,用于以受限能力执行特定任务。
这样做有两个目的。首先,软件开发者或用户可能会犯错误,导致软件尝试执行一些事先已知的操作,而这只会造成伤害。
其次,恶意方可能会故意欺骗执行专门任务的软件,使其做一些坏事,比如破坏数据或允许恶意人员控制它。
在这两种情况下,如果任务是由不代表计算机的任何特定人类用户而只是为了执行该特定任务而存在的非特权用户执行的,则危害通常会减少。
如果您的 Ubuntu 系统上只设置了少数几个人类用户帐户,那么运行列出的大多数用户帐户
cat /etc/passwd
都是这种“用户”。 (别担心,运行cat /etc/passwd
实际上不会显示人们的密码;该文件之所以这样称呼主要是出于历史原因。)
Ubuntu 限制的意义何在我的如果我是管理员并且可以以 root 身份执行任何操作,那么用户帐户对任何内容的访问权是多少sudo
?
出于同样的原因,有些道路两侧设有护栏,井盖,注射器针头盖,枪械保险等也设有保险。不是其原因与人们在门上装锁的原因相同。不是阻止你故意做你想做的事,但阻止你无意做你不想做的事。
当你想要/需要执行管理任务时,能够轻松完成任务非常重要。你必须尊重自己对自己机器的控制权,而且一个不必要地难以使用的系统不是很好。如果 Ubuntu 阻止你轻松执行管理操作,那就是一个错误。幸运的是,通常情况并非如此(尽管我担心我们正朝着这个方向前进)。Ubuntu 使用 的原因之一sudo
是它通常有助于轻松运行命令/程序root
,而不会降低您同时执行普通非管理操作的能力。
当您不试图以某种可能有危险的方式深入修改系统时,同样重要的是系统的设计要不会欺骗您这样做。
同样,你可能有权将你的毕生积蓄赠予某个随机的人。你也有权利打网球。你的自主权很重要;它因为而不是尽管网球拍上的“捐出我所有的钱”按钮是一个糟糕的设计。
有关为什么管理员也应该使用“受限用户帐户”(以及根据需要不受限制地执行任何特定操作的能力)的更多信息,请参阅:
我了解用户权限是什么——它们是文件所有者的权限。组权限是干什么的?
文件的所有者(通常是创建该文件的用户,或者是设置的特殊文件夹的所有者,该文件夹的创建文件属于该用户)可以选择一组用户来“集体拥有”该文件。
然后,可以赋予这组用户相对于其他人的特殊能力(或者有可能被剥夺特殊能力,尽管这通常不被推荐或有效)。
经过其他所有人我指的是系统上除文件所有者和组所有者之外的所有其他用户帐户。这包括不属于任何人的帐户。例如,您可能希望所有使用您计算机的人都能配置打印机(lpadmin
组)并使用 CD/DVD/BluRay 驱动器(cdrom
组),但可能不需要允许崩溃报告“用户” ( whoopsie
) 或时钟同步“用户” ( ntp
) 拥有这些能力。
如果您愿意,可以使用组手动实现访问控制,但在桌面系统上,大多数组通常都是自动配置和管理的。该groups
命令将列出您所属的所有组。
“其他”权限有什么用处?
它们适用于其他所有人——既不拥有该文件也不是组所有者的用户帐户。
组和所有者文件权限仅适用于服务器吗?
不是,它们用于管理机器上不同类型用户帐户之间的区别,包括非人类“用户”帐户。即使您的系统上只有一个人类用户帐户,这也适用。
例如,群组成员身份adm
(不代表用户是管理员)赋予了读取大多数系统日志文件内容的权限。对于大多数桌面系统的任何人类用户来说,这种权限相对无害,但如果将这种权限赋予仅执行高度专业化任务的系统部分(即,除非发生部分成功的网络攻击,否则它只执行该任务),则可能导致问题。
组和用户文件权限更多的在服务器上比在桌面上更重要吗?
有点。
在服务器上,您更有可能必须了解它们并手动管理它们,因为您更有可能故意为各种人类用户提供和拒绝对各种资源的访问。
但即使对于单个用户来说,它们也是系统正常运行所必需的。系统必须以完全不同的方式设计,才能在单用户模式下正常工作,而无需文件所有权和权限系统。
作为比较,我们来考虑一下 I/O 调度。许多服务器环境比许多桌面系统有更多的进程访问更多的文件。因此,与(大多数)桌面系统相比,输入输出调度(管理如何管理有限的吞吐量以合理的效率完成文件访问事务)在(某些)服务器上尤其重要。与大多数桌面用户相比,服务器管理员更有可能研究 I/O 调度并改变其在计算机上的工作方式。但 I/O 调度对于服务器或桌面系统的工作都是必要的。
作为文件的所有者,我可以更改其所有权限以及其组所有者。我可以不使用sudo
或使用类似的机制来做到这一点!那么权限有什么意义呢?
文件的所有者无需成为 root(即无需sudo
)即可执行此操作,但其他非 root 用户则不能。这包括系统中的非人类“用户”(见上文)。
此外,计算机上的许多文件并非由您的用户帐户“拥有”。这些文件确实需要您以某种方式进行身份验证,才能修改其权限。您必须使用sudo
(或类似机制)来更改由 拥有的系统文件的权限root
。
最后,拥有仅适用于您的权限具有一定的价值,即使您无需使用sudo
或任何类似机制即可更改这些权限。
用户权限有什么用?我为什么要改变文件权限,而我可以把它改回来?
出于同样的一般原因,您可能希望将文件设为只读(即使您可以自己覆盖它),您可能希望创建一个无法读取或执行(运行)的文件。
更常见的情况您可能不希望您拥有的文件可由您执行。当您下载某些内容时,您可能不希望将其标记为可执行文件,因为它可能是恶意软件。在将其标记为可执行文件之前,您可能希望有机会考虑是否要运行它。此外,如果您下载了一个名称以 结尾的文件,.pdf
但实际上是一个恶意程序,您肯定不希望默认情况下为其设置执行权限。
还有一个与安全性不太相关的原因。任何标记为可执行的文件都被视为可以运行的东西——程序或脚本。大多数文件都不是,你不会想有机会运行它们。
例如,如果一个文本文件被标记为可执行文件(例如,您拥有它并且它的用户所有者已启用执行权限),并且您在 Nautilus(文件浏览器)中双击它,它将运行。但大多数文本文档不是脚本,您不想在双击它们时尝试运行它们;相反,您可能想在编辑器中打开它们。
不太常见想要创建一个您自己无法读取的文件(不更改其权限)。您可能想要这样做的一种情况是,如果您有多个文件并且想要暂时避免打开其中一个文件,例如,如果它很大并且需要几分钟才能打开。我遇到过这种情况,我不得不一直等待应用程序完成打开文件,以便我可以关闭它,因为我选择了错误的文件(再次)。
一个相关的可能情况是,如果您要自动对许多文件执行某些操作(一个“批处理”作业),这些操作会从这些文件中读取数据,但您希望它跳过一些文件。假设该操作将“优雅降级”,在发生错误后继续执行其可以执行的操作,最简单的实现方法可能是将您想要跳过读取的几个文件标记为不可读。
一种非常不同的情况是:也许你想拒绝自己对某个文件的读取权限,因为该文件有某种用途除了包含数据之外。文件可用于表示某些条件。举个虚构的例子:某些索引文件的搜索应用程序可能首先检查名为的文件是否noindex
存在于您的主文件夹中,如果找到则停止。该文件不必读取;可以说,将其标记为不可读有助于明确其用途。
想要保持自我(或你正在执行的某项任务就像你) 读取您拥有的文件的情况并不常见。实际上,大多数“信号”文件(因为其存在本身就意味着某种东西而存在)都可以由其所有者读取。实际上,据我所知,文件的用户所有者无法读取它,甚至无法在不读取它的情况下对其进行写入,主要有三个原因:
团体和其他具有读取、写入和执行位,并且它们可以采用任意值组合。对于拥有该文件的用户来说,没有令人信服的理由要打破这种模型——从而使系统变得更加复杂。
许多我们通常认为不是文件类型的资源由文件系统中的条目表示。对于某些资源,写入是有意义的,但读取则毫无意义。对于这些资源,读有时会为所有人(甚至是所有者)关闭位,即使所有者是
root
。 (但并非总是如此;出于超出此答案范围和我自己的知识范围的原因,某些只写设备的文件系统条目仍为某些用户启用了读取位。)文件拒绝读取访问(甚至拒绝其所有者的读取访问)的能力有时用于表示只写文件系统上的文件。(但并非总是如此;这取决于文件系统的细节及其安装方式。)只写文件系统并不常见,但它们确实存在并有实际用途。
答案2
通常,创建文件的人是所有者。那么“组”和“其他”是谁。这是否更多地用于有许多用户的服务器类系统?
在 Linux 中,一个文件(或目录)可以被三个不同的“实体”访问。
- 这用户(文件所有者)。
- A团体,正如其名称所示,它是一组用户。
- 一切其他人;所以基本上所有其他人(即不是所有者,也不在团体中)。
这些实体中的每一个都可以读,写和/或执行文件的权限。看到 Linux 的灵活性和简单性了吗?三个实体,每个实体都有三种不同的权限。这提供了一种更灵活的授予文件/文件夹权限的方式。这是否更多地用于有许多用户的服务器类系统?好吧,你可以这么想。你的 Ubuntu 使用群组和其他的在很多情况下,你无需担心,但我离题了。
即使这是用于安全问题,如果没有“$sudo”,它就可以轻松地更改为任何想要的。
如果我理解正确的话,我猜你chmod
在主文件夹中使用了文件,所以你不需要sudo
。让我们举一个例子:
-rwxr-xr-x 2 alaa test 4096 Jun 5 10:02 fileName
如果你想理解整行输出的含义,请参阅这。
alaa
是个用户(所有者),以及test
是团体文件的。
现在,你谈论的命令,chmod
,用于改变权限文件的权限。假设我想授予组写入权限test
,我将执行以下命令:
chmod g+w fileName
含义:对于团体实体(g
),为文件添加( +
)写( )权限。w
fileName
我,即用户alaa
,无需 就可以执行此命令sudo
,因为我是它的所有者。如果我不是所有者,我就无法执行此操作,而我需要sudo
执行此操作。
您还能推荐更多阅读材料吗?
我建议你不要阅读有关命令的内容chmod
,而是阅读有关 Linux/Unix 文件权限的更多信息。你可以访问以下简短页面作为入门:
答案3
第一个可以获取帮助的地方是“man”。你可以输入“man chmod”,然后你就会得到有关该命令用法的所有信息。
该命令更改了谁可以访问文件以及他可以用该文件做什么。“r”代表读取,“w”代表写入,“x”代表执行。以下每个类别“所有者”、“组”、“其他”都有一个“rwx”元组。如果一个类别只有读取权限(“r--”),则他们只能读取文件。这意味着使用编辑器打开它,但不能进行任何更改。使用(“rw-”)也可以更改文件。如果文件是可执行文件,使用(“rwx”)还可以执行文件。现在,文件是否可以在编辑器中打开并执行?嗯,是的。如果它是一个二进制文件,而您使用编辑器打开它,您将不会理解任何东西,如果您尝试执行一个只有文本的简单 txt 文件,您可能什么也做不了。但是,如果文本是一系列命令(脚本文件),那么它也可以同时执行这两项操作。对于这些文件,确定访问权限非常重要,因为一个人可以更改命令中的某些内容,然后其他人可以执行此文件。
关于类别所有者:创建文件的用户。当然,您可以使用“chown”更改文件的所有者。组:创建文件时所有者所属的用户组。其他:除所有者和与所有者属于同一组的用户之外的所有人。
答案4
简单的网络搜索就能为你的问题提供大量结果。为了快速了解,我建议你阅读这。