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

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

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

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

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

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

我能看到的唯一用途是保护偶然删除或执行,如果有意的话可以很容易地克服。


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

答案1

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

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

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

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

用户的正确权限集表示意向性。尽管用户可以更改权限,但行为良好的程序不会这样做(至少在没有事先询问的情况下不会这样做)。而不是将权限视为限制用户,将它们视为限制用户的流程在给定的时间点可以做的事情。

答案2

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

这意味着所有者对给定文件设置的权限是通常很荣幸(除非您是 root 用户或以其他方式能够短路 DAC 检查(例如CAP_DAC_OVERRIDE在 Linux 上),因为理智的程序只信任内核来检查权限),因此通常有用保护给定文件免遭意外修改或执行。虽然这可以相对容易地克服,但用户必须明确地做一些事情来克服它。 IOW,它充当另一个确认步骤,表明“是的,我确实想这样做。”。

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

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

答案3

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

答案4

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

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

相关内容