在 Linux 中,文件和目录的权限控制非常重要。权限控制决定了用户对文件的操作能力,主要包括对文件的读取、写入和执行权限。Linux 使用 rwx
方式来表示权限,r
代表读取 (Read),w
代表写入 (Write),x
代表执行 (Execute)。
文件权限的基本结构
在 Linux 中,使用 ls -l
命令可以查看文件的权限,权限信息通常显示在文件的最左侧,结构如下:
-rwxr-xr-x 1 user group 4096 Jan 1 12:34 file.txt
从上面的例子可以分解出以下内容:
-
-
: 表示文件类型,-
表示普通文件,d
表示目录,l
表示符号链接,b
表示块设备文件,c
表示字符设备文件等。 -
rwxr-xr-x
: 这是文件的权限,分为三个部分,每部分三个字符,分别表示不同用户类别的权限:- 第1组 (
rwx
): 文件拥有者的权限 - 第2组 (
r-x
): 与文件拥有者同组的用户的权限 - 第3组 (
r-x
): 其他用户的权限
- 第1组 (
-
1
: 文件的硬链接数。 -
user
: 文件的拥有者。 -
group
: 文件的所属用户组。 -
4096
: 文件的大小(单位:字节)。 -
Jan 1 12:34
: 文件的最后修改时间。 -
file.txt
: 文件名。
文件权限解释
r
(read): 读取文件内容的权限。w
(write): 修改文件内容的权限。x
(execute): 执行文件的权限。对于目录,x
权限表示进入该目录的权限(即可以cd
到该目录)。
例如:
rwx
: 具有读取、写入和执行的权限。r-x
: 具有读取和执行的权限,但没有写入权限。rw-
: 具有读取和写入权限,但没有执行权限。
权限的数字表示
在 Linux 中,文件权限可以用三个数字来表示,每个权限用一个数字来表示,具体如下:
r
= 4 (读取权限)w
= 2 (写入权限)x
= 1 (执行权限)
数字是相加的,因此每种权限都有对应的数字表示:
rwx
= 4 + 2 + 1 = 7rw-
= 4 + 2 = 6r--
= 4 = 4r-x
= 4 + 1 = 5wx-
= 2 + 1 = 3---
= 0
因此,文件权限 rwxr-xr-x
的数字表示为 755
:
- 文件拥有者(user):
rwx
→ 7 - 同组用户(group):
r-x
→ 5 - 其他用户(others):
r-x
→ 5
修改文件权限
使用 chmod
命令可以修改文件或目录的权限,chmod
可以使用符号表示法(如 rwx
)或数字表示法(如 755
)来设置权限。
使用符号表示法
+
: 添加权限-
: 移除权限=
: 设置具体的权限(清除其他权限)
例子:
chmod +x file.txt
:给file.txt
文件增加执行权限。chmod -x file.txt
:从file.txt
文件中移除执行权限。chmod u+x file.txt
:给文件拥有者增加执行权限(u
代表 user,即文件拥有者)。chmod g-w file.txt
:从文件所在组用户中移除写入权限(g
代表 group,即文件所属组)。chmod o+r file.txt
:给其他用户添加读取权限(o
代表 others,即其他用户)。chmod u=rwx,g=rx,o=r file.txt
:设置文件拥有者为rwx
,组用户为rx
,其他用户为r
。
使用数字表示法
数字表示法直接通过三个数字来设置权限:
- 第一个数字表示文件拥有者的权限。
- 第二个数字表示与文件拥有者同组的用户的权限。
- 第三个数字表示其他用户的权限。
例子:
chmod 755 file.txt
: 设置文件拥有者为rwx
(7),组用户为r-x
(5),其他用户为r-x
(5)。chmod 644 file.txt
: 设置文件拥有者为rw-
(6),组用户为r--
(4),其他用户为r--
(4)。chmod 777 file.txt
: 设置所有用户(拥有者、组用户、其他用户)都具有rwx
(7)权限。
修改文件所有者和所属组
使用 chown
命令可以修改文件的拥有者和所属用户组。
语法
chown [选项] 用户:组 文件
用户
: 文件的新拥有者。组
: 文件的新所属组。
例子:
chown user1 file.txt
: 将文件的拥有者修改为user1
,不改变所属组。chown user1:group1 file.txt
: 将文件的拥有者修改为user1
,将所属组修改为group1
。chown :group1 file.txt
: 将文件的所属组修改为group1
,不改变文件拥有者。
设置特殊权限
除了常规的读、写、执行权限外,Linux 还提供了三种特殊权限:Setuid、Setgid 和 Sticky Bit。
1. Setuid (s
)
-
Setuid 权限设置在可执行文件上时,它允许以文件所有者的身份执行该文件,即使执行该文件的用户不是文件的所有者。
-
Setuid 权限通过在执行权限的位置使用小写字母
s
来表示。例子:
chmod u+s file # 给文件设置 setuid 权限
2. Setgid (s
)
-
Setgid 权限可以作用于文件和目录。
- 对于文件,它使得执行该文件的用户以文件所属组的身份执行文件。
- 对于目录,它确保新创建的文件和目录继承父目录的组。
例子:
chmod g+s directory # 设置目录的 setgid 权限 chmod g+s file # 设置文件的 setgid 权限
3. Sticky Bit (t
)
-
Sticky Bit 权限主要用于目录。当设置 Sticky Bit 权限时,目录中的文件只能由文件的所有者、目录的所有者或 root 用户删除或重命名,其他用户无法删除文件,即使他们有写入权限。
例子:
chmod +t directory # 给目录设置 sticky bit 权限
总结
- Linux 文件权限通过三个部分(拥有者、所属组、其他用户)来设置。
- 权限通过
rwx
或数字(如755
)表示。 - 使用
chmod
修改文件权限,chown
修改文件拥有者和所属组。 - 还有 Setuid、Setgid 和 Sticky Bit 等特殊权限控制。