1. Linux 文件权限概述
在 Linux 中,每个文件或目录都有三种基本权限,分别是:
- 读权限 -
r
:允许查看文件内容。 - 写权限 -
w
:允许修改文件内容。 - 执行权限 -
x
:允许执行文件或进入目录。
每个文件或目录的权限会根据三个用户类别来分配:
- 所有者 (user, u):文件的创建者或指定的所有者(属主)。
- 同组用户 (group, g):与文件所有者属于同一组的用户(属组)。
- 其他用户 (others, o):所有不属于文件所有者或同组的其他用户。
Linux 文件权限通过字符形式或者八进制数字来表示。我们将在后文中详细讨论八进制表示法。
2. 权限的表示法
2.1 字符表示法
字符表示法使用 r
、w
、x
来表示权限,通过 9 个字符来定义文件的访问控制,分为三个部分,分别表示所有者、同组用户和其他用户的权限。例如:
rwxr-xr--
上面表示:
- 所有者权限:
rwx
(读、写、执行) - 同组用户权限:
r-x
(读、执行) - 其他用户权限:
r--
(读)
2.2 八进制表示法
八进制表示法通过数字来简化权限的表示,每个权限位对应一个数字。具体规则如下:
- 读权限
r
= 4 - 写权限
w
= 2 - 执行权限
x
= 1 - 无权限
-
= 0
每个用户类别(所有者、同组用户、其他用户)都有三个权限位,分别表示读、写和执行权限。通过将每个权限位的数字相加,得到一个数字来表示权限。
常见的权限八进制值如下:
八进制值 | 权限表示 | 描述 |
---|---|---|
777 | rwxrwxrwx | 所有用户都拥有读、写、执行权限 |
755 | rwxr-xr-x | 所有者具有读、写、执行权限,组和其他用户只有读和执行权限 |
644 | rw-r–r– | 所有者有读和写权限,组和其他用户只有读权限 |
600 | rw------- | 所有者有读和写权限,组和其他用户没有权限 |
444 | r–r–r– | 所有用户只有读权限 |
1777 | rwxrwxrwt | 设置 Sticky Bit,用于共享目录(如 /tmp) |
3. 使用八进制设置文件权限
Linux 中的 chmod
命令可以用来设置文件权限。在 chmod
命令中,您可以使用八进制数字来指定文件的权限。例如:
chmod 755 myfile.txt
此命令会将 myfile.txt
的权限设置为 rwxr-xr-x
,即:
- 所有者具有读、写、执行权限(rwx)
- 同组用户和其他用户只有读和执行权限(r-x)
4. 特殊权限
除了常规的文件权限(读、写、执行),Linux 还支持三种 特殊权限,它们提供了更加灵活的权限控制。特殊权限会通过四位八进制数字来表示。
4.1 Setuid(设置用户标识)
Setuid(Set User ID)是一种特殊权限,它会使得执行某个程序时,程序以文件的所有者身份运行,而不是执行该程序的用户身份。这个权限通常用于需要临时提权的程序。
- 八进制表示:Setuid 权限用数字
4
表示。 - 示例:
chmod 4755 file
表示设置文件file
的 Setuid 权限。
4.2 Setgid(设置组标识)
Setgid(Set Group ID)是一种特殊权限,它会使得执行某个程序时,程序以文件所属组的身份运行,而不是执行该程序的用户组。如果 Setgid 设置在目录上,新创建的文件将自动继承目录的组,而不是创建者的组。
- 八进制表示:Setgid 权限用数字
2
表示。 - 示例:
chmod 2755 file
表示设置文件file
的 Setgid 权限。
4.3 Sticky Bit(粘滞位)
Sticky Bit 是一种用于目录的特殊权限,特别是在 /tmp
这类目录中。当目录设置了 Sticky Bit 时,只有文件的所有者才能删除文件,即使其他用户对该目录有写权限。
- 八进制表示:Sticky Bit 权限用数字
1
表示。 - 示例:
chmod 1777 /tmp
表示设置目录/tmp
的 Sticky Bit 权限。
5. 四位八进制权限表示法
在设置特殊权限时,Linux 使用四位八进制数字来表示权限。四位表示法的结构如下:
- 第一位:特殊权限(Setuid、Setgid、Sticky Bit)
- 第二位:所有者权限(rwx)
- 第三位:组权限(rwx)
- 第四位:其他用户权限(rwx)
5.1 示例
假设我们需要设置一个文件的权限,并同时启用 Setuid 和 Setgid 权限。我们可以使用以下命令:
chmod 2755 file
这个命令的含义:
2
:启用 Setgid 权限7
:所有者权限为 rwx5
:组权限为 r-x5
:其他用户权限为 r-x