it-swarm.cn

文件权限如何工作?

您能简要解释一下用于管理文件权限的主要概念和命令行工具吗?

37
guillermooo

每个文件都有三个不同类别的权限:

  • 文件的所有者,
  • 与文件关联的组,和
  • 其他人。

权利是指在脚本或程序的情况下读取文件的权利,写入文件的权限或执行文件的权限。

在CLI上,您可以

  • 使用chown更改所有者,例如chown guillermooo
  • 使用chgrp更改组,例如chgrp root
  • 使用chmod更改权限,例如chmod u+w filename.ext(为文件filename.ext的所有者添加写入权限)

如果您想了解有关这些工具的更多信息,请打开终端并输入man [tool],例如man chmod

23
ParanoiaPuppy

警告:更改文件和目录的权限可能有害,并可能导致系统不可用。当在错误的路径上以root用户递归运行时,我们可能会从那里重新安装Ubuntu。因此,最好不要更改HOME目录之外的权限,并且应尽可能避免以root用户递归地运行命令。

文件权限

Ubuntu继承了Unix的权限概念,对于文件或目录,我们可以允许或拒绝三个任务:

  • r(读取)文件/目录可以打开以进行读取访问。
  • w(写)文件/目录可以打开以进行写/编辑访问。
  • x(执行)文件可以在程序/目录可以被遍历时执行。

遍历一个目录本质上意味着将它用作路径名的一部分。参见 https://unix.stackexchange.com/a/13891 或 - https://unix.stackexchange.com/questions/21251 更多解释。)

此外,我们有三个案例,我们授予谁许可:

  • u(用户)文件的所有者被授予任何权限。
  • g(组)文件所属的组被授予权限。
  • o(其他)所有其他人都被授予许可。

现在要获得这些排序的组合,我们使用二进制系统,其中每个位定义一个权限。这可以在下表中得到最好的显示

    Permission | Binary | Octal  | User  | Group | Other |
    ======================================================
      r        |  100   |   4    |       |       |       |
      w        |  010   |   2    |       |       |       |
      x        |  001   |   1    |       |       |       |
    =======================================================
    Number

现在,如果我们想要的话

a)文件(=用户)的所有者拥有 [ReAD, w ^仪式和ex执行许可,
b)授予文件组 [Read和ex执行权限,以及
c)所有其他人应该只有 [Read访问。

然后生成的文件权限将是:

 u   g   o
rwx r-x r--

要在八进制数中得到这个,例如。对于 chmod 命令或当我们必须理解错误消息时,我们需要填写上表,如下所示:

    Permission | Binary | Octal  | User  | Group | Other |
    ======================================================
      r        |  100   |   4    |   4   |   4   |   4   |
      w        |  010   |   2    |   2   |   0   |   0   |
      x        |  001   |   1    |   1   |   1   |   0   |
    ======================================================
    Numbers add to                   7       5       4     

需要添加每个权限编号以总结用户(4 + 2 + 1 = 7),组(4 + 0 + 1 = 5)和其他(4 + 0 + 0 = 4)。结果数字是:

 u   g   o
 7   5   4

我们现在有两个选项可以使用chmod更改权限位:

chmod u+rwx g+rx o+r filename

或者更简单

chmod 751 filename

两个命令都会这样做。

我们家中新创建的文件的默认权限是664(-rw-rw-r--)。

如果我们希望文件可以作为程序执行,我们将不得不更改此权限。

  • 请注意,我们还必须更改此可执行文件所在目录的权限。仅当文件的目录的可执行位都被设置时我们将被允许作为程序运行此文件。

  • 将文件复制到我们家时,它将失去它的权限,这些权限将被我们自己的默认权限所取代(除非我们使用高级选项进行复制,例如存档选项)。

  • 另请注意,文件可以从其挂载点继承其权限。挂载选项。在安装不支持Unix权限的Windows格式化驱动器时,这很重要。

用户和组

我们很快意识到这只是故事的一半。我们还需要整理物品。为此,每个文件或文件夹都具有已定义的所有者和已定义的组成员身份。

每次我们创建文件时,我们都将成为文件的所有者,文件的组也将是我们。使用ls -l,我们可以看到权限,所有权和组,如以下示例输出所示:

-rw-rw-r--  1 takkat takkat    4096 Sep 12 20:25 test
  • 我们只允许更改我们的文件的权限,组或所有权。

如果我们不是文件所有者,我们将收到Permission denied错误。只有root可以为所有文件更改此值。这就是为什么我们必须在编辑非我们文件的权限时使用Sudo。有两个内置命令可以这样做 chown 用户和 chgrp 用于组。

要将文件所有权从任何人更改为takkat,我们可以发出以下命令:

Sudo chown takkat testfile

要将文件的组更改为takkat,我们会发出

Sudo chgrp takkat testfile

阅读命令的联机帮助页以获取更多详细信息和选项。还有这个尼斯更详细的指南建议进一步阅读:

还可以在这里找到一些相关问题

31
Takkat