理解Linux的文件权限

评论 0 浏览 0 2021-04-30

在Linux中,文件权限、属性和所有权控制系统进程和用户对文件的访问级别。这确保了只有被授权的用户和进程可以访问特定的文件和目录。

Linux的文件权限

基本的Linux权限模型的工作原理是将每个系统文件与一个所有者和一个组联系起来,并为三个不同类别的用户分配权限访问权。

  • 文件的所有者。
  • 该小组的成员。
  • 其他(其他所有人)。

可以使用chownchgrp命令来改变文件的所有权。

三种文件权限类型适用于每个类别的用户。

  • 读取权限。
  • 写入许可。
  • 执行的权限。

这个概念允许你控制哪些用户可以读取文件,写到文件,或执行文件。

要查看文件权限,请使用ls命令。

ls -l file_name

输出

-rw-r--r-- 12 linuxize users 12.0K Apr  28 10:10 file_name
|[-][-][-]-   [------] [---]
| |  |  | |      |       |
| |  |  | |      |       +-----------> 7. Group
| |  |  | |      +-------------------> 6. Owner
| |  |  | +--------------------------> 5. Alternate Access Method
| |  |  +----------------------------> 4. Others Permissions
| |  +-------------------------------> 3. Group Permissions
| +----------------------------------> 2. Owner Permissions
+------------------------------------> 1. File Type

第一个字符表示文件类型。它可以是普通文件(-)、目录(d)、符号链接l),或其他特殊类型的文件。下面的九个字符代表文件权限,三个三联体,每联体三个字符。第一个三联体显示所有者的权限,第二个三联体显示组的权限,最后一个三联体显示其他人的权限。

在上面的例子中,(rw-r--r--)意味着文件所有者有读写权限(rw-),组和其他人只有读的权限(r--)。

文件权限因文件类型不同而有不同的含义。

这三个权限三要素中的每一个都可以由以下字符构成,并具有不同的效果,这取决于它们是被设置在文件还是目录上。

权限对文件的影响

权限字符文件中的含义
-该文件不可读。你不能查看文件内容。
r该文件是可读的。
-该文件不能被改变或修改。
w该文件可以被改变或修改。
执行-该文件不能被执行。
x该文件可以被执行了。
s如果在user三联体中发现,它将设置setuid位。如果在group三联体中发现,它将设置setgid位。这也意味着x标志被设置。
setuidsetgid标志被设置在可执行文件上时,该文件将以该文件的所有者和/或组的权限执行。
Ss相同,但不设置x标志。这个标志很少在文件上使用。
t如果在others三联体中发现,它就会设置sticky位。
它也意味着x标志被设置。这个标志在文件上是无用的。
Tt一样,但x标志没有被设置。这个标志在文件上是无用的。

权限对目录(文件夹)的影响

目录是一种特殊类型的文件,可以包含其他文件和目录。

权限字符目录中的含义
-该目录的内容不能被显示出来。
r可以显示该目录的内容。
(例如,你可以用ls列出该目录内的文件。
-该目录的内容不能被改变。
w目录的内容可以被改变。
(例如,你可以创建新的文件删除文件 ...等等)。
执行-该目录不能改成。
x该目录可以使用cd进行导航。
s如果在user三联体中发现,它将设置setuid位。如果在group三联体中发现,它会设置setgid位。这也意味着x标志被设置。当setgid标志被设置在一个目录上时,在其中创建的新文件会继承目录组ID(GID),而不是创建文件的用户的主组ID。
setuid对目录没有影响。
Ss相同,但不设置x标志。这个标志在目录上是无用的。
t如果在others三胞胎中发现,它就会设置sticky位。
它也意味着x标志被设置。当目录上的粘性位被设置时,只有文件的所有者、目录的所有者或管理用户可以删除或重命名该目录内的文件。
Tt相同,但不设置x标志。这个标志在目录上是无用的。

改变文件的权限

文件权限可以通过chmod命令来改变。只有root、文件所有者或具有sudo权限的用户可以改变文件的权限。使用chmod时要格外小心,特别是在递归改变权限时。该命令可以接受一个或多个以空格分隔的文件和/或目录作为参数。

权限可以用符号模式、数字模式或参考文件来指定。

符号(文本)法

在使用符号模式时,chmod命令的语法有以下格式。

chmod [OPTIONS] [ugoa…][-+=]perms…[,…] FILE...

第一组标志([ugoa…]),即用户标志,定义了改变文件权限的用户类别。

  • u - 文件的所有者。
  • g - 属于组内成员的用户。
  • o--所有其他用户。
  • a - 所有的用户,与ugo相同。

当用户的标志被省略时,默认为a

第二组标志([-+=]),即操作标志,定义了权限是要被移除、添加还是设置。

  • - - 移除指定的权限。
  • + - 添加指定的权限。
  • = - 将当前权限改为指定的权限。如果在=符号后没有给出权限,那么指定用户类别的所有权限都会被删除。

权限(perms...)是用零或以下一个或多个字母明确设置的。r, w, x, X, s, 和 t.当从一个用户的类中复制权限到另一个用户的类中时,使用集合ugo中的一个字母。

当为一个以上的用户类别设置权限时([,…]),使用逗号(没有空格)来分隔符号模式。

下面是一些如何在符号模式下使用chmod命令的例子。

  • 给予组内成员执行文件的权限,但不允许读写该文件。

    chmod g=x filename
  • 移除所有用户的写权限。

    chmod a-w filename
  • 递归地删除其他用户的执行权限。

    chmod -R o-x dirname
  • 移除所有用户的读、写和执行权限,除了文件的所有者之外。

    chmod og-rwx filename

    同样的事情也可以通过使用下面的形式来完成。

    chmod og= filename
  • 给予文件所有者以读、写和执行的权限,给予文件组以读的权限,不给予所有其他用户以任何权限。

    chmod u=rwx,g=r,o= filename

数值化方法

在使用数字模式时,chmod命令的语法有以下格式。

chmod [OPTIONS] NUMBER FILE...

当使用数字模式时,你可以同时为所有三个用户类别(所有者、组和所有其他用户)设置权限。

权限号可以是3位数或4位数的数字。当使用3位数字时,第一位数字代表文件所有者的权限,第二位代表文件的组,最后一位代表所有其他用户。

每一个写、读和执行的权限都有以下数字值。

  • r(读)=4
  • w(写)=2
  • x (执行) = 1
  • 无权限 = 0

一个特定用户类别的权限数由该组的权限值的总和来表示。

要以数字模式找出文件的权限,只需计算所有用户类别的总和。例如,如果要给文件的所有者以读、写和执行的权限,给文件的组以读和执行的权限,给所有其他用户以只读的权限,你要做的事情如下。

  • 拥有者:RWX=4+2+1=7
  • 组:R-X=4+0+1=5
  • 其他:R-X=4+0+0=4

使用上述方法,我们得出了数字754,这代表了所需的权限。

要设置setuidsetgidsticky bit的标志,请使用四位数的数字。

当使用4位数的号码时,第一个数字有以下含义。

  • 设定时间=4
  • setgid=2
  • 粘性=1
  • 无变化=0

接下来的三个数字与使用3位数的数字时的意义相同。

如果第一个数字是0,可以省略,模式可以用3位数字表示。数字模式0755755相同。

要计算数字模式,你也可以使用另一种方法(二进制方法),但它要复杂一些。知道如何使用4、2和1来计算数字模式,对大多数用户来说已经足够了。

你可以使用stat命令,用数字符号检查文件的许可权。

stat -c "%a" file_name

下面是一些如何在数字模式下使用chmod命令的例子。

  • 给予文件所有者读和写的权限,只给组员和所有其他用户以读的权限。

    chmod 644 dirname
  • 给予文件所有者读取、写入和执行的权限,给予组员读取和执行的权限,给予所有其他用户没有权限的权限。

    chmod 750 dirname
  • 给予读取、写入和执行的权限,以及一个粘性位给一个给定的目录。

    chmod 1777 dirname
  • 递归地设置文件所有者的读、写和执行权限,而对给定目录上的所有其他用户则没有权限。

    chmod -R 700 dirname

总结

在Linux中,对文件的访问是用文件权限、属性和所有权来限制的。要改变文件的权限,请使用chmod命令。

如果你有任何问题或反馈意见,请随时留言。

最后更新2023-04-03
0 个评论
标签