文件权限如何起作用?

文件权限如何起作用?

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

答案1

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

文件权限

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

  • r(读取)文件/目录可以打开以进行读取访问。
  • (写入)文件/目录可以打开以进行写入/编辑访问。
  • X(执行)文件可以像程序/目录一样被执行。

遍历目录本质上意味着将其用作路径名的一部分。请参阅https://unix.stackexchange.com/a/13891或者https://unix.stackexchange.com/questions/21251了解更多解释。

此外,对于授予谁权限,我们有三种情况:

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

现在,为了对这些组合进行排序,我们使用二进制系统,其中每个位定义一个权限。下表可以最好地显示这一点

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

现在如果我们想要例如

a)文件所有者(=用户)有r伊德,仪式和Xecute 权限,
b)文件所属组授予read 和 eXecute 权限,以及
c)所有其他权限只能具有r阅读权限。

那么最终的文件权限将是:

 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
  • 我们只被允许更改属于我们的文件的权限、组或所有权。

如果我们不是文件所有者,则会出现错误。只有 root 才能更改所有文件的权限。这就是为什么我们在编辑不属于我们的文件的权限时Permission denied必须使用。有两个命令可以执行此操作sudochown对于用户和组以及chgrp仅限团体。

要将文件所有权从任何人更改为用户takkat和(可选)组,takkat我们可以发出以下命令:

sudo chown takkat[:takkat] testfile

要仅将文件所属组更改为takkat我们发出

sudo chgrp takkat testfile

阅读命令的手册页以了解更多详细信息和选项。还有一份更详细的指南推荐进一步阅读:

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

答案2

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

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

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

在 CLI 上,您可以

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

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

相关内容