文件权限如何工作?


Answers:


23

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

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

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

在CLI上,您可以

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

如果您想进一步了解这些工具,请打开一个终端并输入man [tool],例如man chmod


8
对于目录来说有些棘手-要访问目录的内容,必须具有执行权限。例如,这意味着要读取或写入文件,您需要对包含该文件的目录以及文件本身的适当权限具有执行访问权限。这几乎从来没有出现过,但这就是为什么它没有被很好地记录/理解的原因!
adamnfish

嗯 你是对的。明天我不那么困了,我将在明天进行编辑。
ParanoiaPuppy

1
chown guillermooo这不是chown guillermooo filename吗?
Zeynel 2013年

32

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

档案权限

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

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

遍历目录实际上意味着将其用作路径名的一部分。有关更多说明,请参见https://unix.stackexchange.com/a/13891https://unix.stackexchange.com/questions/21251。)

此外,关于授予谁的权限,我们有以下三种情况:

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

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

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

现在如果我们想

一个)的文件(=用户)的所有者- [R EAD,w ^仪式,和e X ecute权限,
B)文件的组授予[R EAD和e X ecute权限,以及
c)所有其他人应该只有[R EAD访问。

然后,产生的文件权限将是:

 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--)。

如果我们希望文件可以作为程序执行,则必须更改此权限。

  • 请注意,我们还必须更改该可执行文件可能位于的目录的权限。只有同时设置了文件的可执行文件目录的可执行位,我们才可以将该文件作为程序运行。

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

  • 另请注意,文件可能会从其安装点resp继承其权限。挂载选项。当安装不支持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

阅读命令的手册页以获取更多详细信息和选项。还建议您阅读这份更详尽的指南,以供进一步阅读:

也可以在这里找到一些相关的问题:

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.