拥有或限制文件所有者权限的原因是什么?

pap*_*ees 19 permissions

正如了解 UNIX 权限和文件类型中所述,每个文件都具有以下权限设置(“文件模式”):

  • 所有者/用户(“ u”),
  • 所有者组 (" g"),以及
  • 其他所有人 (” o”)。

据我了解,文件的所有者始终可以使用chmod. 所有者下运行的任何应用程序也可以。

如果所有者可以随时更改权限,那么为什么要限制所有者自己的权限呢?

我能看到的唯一用途是防止意外删除或执行,如果有意的话,可以很容易地克服这一点。


这里提出了一个相关问题:“所有者”权限存在的原因是什么?群组权限还不够吗?它讨论了为什么所有者的权限不能由单个用户(所有者)组成的虚拟组替换。相比之下,这里我问的是原则上为所有者拥有权限的目的,无论它们是通过单独的“ u”八进制还是单独的组+ACL来实现。

Tob*_*ght 51

有多种原因需要减少所有者的权限(尽管很少会低于组的权限)。

  • 最常见的是对不打算执行的文件没有执行权限。很多时候,shell 脚本是旨在源自其他脚本(例如您的.profile)的片段,并且作为顶级进程没有意义。命令完成只会提供可执行文件,因此正确的权限有助于交互式 shell。

  • 意外覆盖文件是一个很大的风险 - 它可能通过错误输入命令而发生,甚至在 GUI 程序中更容易发生。从相机复制文件时,我要做的第一件事就是使它们(及其包含的目录)不可写,这样我所做的任何编辑都必须是副本,而不是覆盖原始文件。

  • 有时,文件甚至不可读也很重要。如果我升级 Emacs 并且~/lisp目录中的本地软件包出现问题,我会选择性地禁用它们(使用chmod -r),直到它可以成功启动;然后我可以在修复兼容性问题时使它们一次可读。

一组正确的用户权限表明了意图。尽管用户可以更改权限,但行为良好的程序不会这样做(至少在没有事先询问的情况下不会这样做)。不要将权限视为限制用户,而应将它们视为限制用户的进程在给定时间点可以执行的操作。

  • 确实如此,@John。但考虑到用户(一个人)可能不完全理解他们运行的每个进程的工作原理,因此可能希望防止意外后果,这似乎是有帮助的。还有很多其他很好的答案,所以我认为没有必要过多更新这个答案。 (5认同)

Aus*_*arn 20

您似乎在这里忽略了相当重要的一点:行为良好的进程不会四处修改它们有权访问的文件的权限。lswon\xe2\x80\x99t 随机使您指向的目录可读,以便它可以列出目录内容。sshwin\xe2\x80\x99t \xe2\x80\x98fix\xe2\x80\x99 的权限~/.ssh或其包含的文件如果错误,它将拒绝运行。通常可以安全地假设您可能使用的任何程序都以这种方式表现良好。

\n

这意味着通常会尊重所有者在给定文件上设置的权限(除非您\xe2\x80\x99是root用户或以其他方式能够短路DAC检查(例如在CAP_DAC_OVERRIDELinux上) ,因为健全的程序只信任内核来检查权限),因此保护给定文件免遭意外修改或执行通常很有用。虽然这个问题可以相对容易地克服,但用户必须明确地采取一些措施来克服它。IOW,它充当另一个确认步骤,表明 \xe2\x80\x98 是的,我确实想这样做。\xe2\x80\x99。

\n

但更一般地说,由于通常会尊重所有者权限,因此您可以使用它们执行许多有用的操作:

\n
    \n
  • 将文件或目录设置为只读(相当于在 Windows 上设置 \xe2\x80\x98Read-Only\xe2\x80\x99 属性)。
  • \n
  • 将文件标记为不可执行(或将 XDG.desktop文件标记为不受信任)。
  • \n
  • 在功能上 \xe2\x80\x98 隐藏\xe2\x80\x99 目录的内容(通过将目录标记为不可读)或文件。这在调试某些应用程序的插件问题时实际上非常有用,因为大多数使用每个插件目录或文件的应用程序如果其文件不可读,就会表现得好像插件不存在一样。
  • \n
\n


dg9*_*g99 18

大多数时候,我这样做是为了防止意外删除/修改,正如您所建议的。然而,有时,我这样做是为了可以对某个树中我“保护”的文件/目录之外的所有文件/目录执行批量修改。

  • @JohnRennie 文件属性是正常 UNIX DAC 权限模型之外的额外标志,并不总是可用,并不总是实际执行任何操作(例如,大多数 Linux 文件系统实际上不支持“chattr +u”),可能不会按预期运行(例如,在某些文件系统上,某些属性仅在文件中没有数据时更改才执行任何操作)并且通常只能由 root 用户更改。 (7认同)

Bar*_*mar 11

受限所有者权限在受限环境中非常有用,在受限环境中,用户无权访问更改权限的工具。

典型的例子是匿名 FTP 服务器。您可以创建一个“dropbox”目录,其中所有者具有写入权限,但没有读取权限。这允许匿名用户上传文件,但不会列出其他用户已上传的文件。同时,该目录可由其所在组读取,因此我们会将允许从该目录检索的用户放入该组中。如果 FTP 服务器不提供chmod命令,则匿名用户无法覆盖该命令并授予自己列出目录的权限。