一、文件权限的基本概念
Linux 文件系统的权限体系基于三类用户和三种权限的组合,形成了灵活且严谨的访问控制模型。
1. 三类用户
- 所有者(User):文件的创建者或被指定的用户,对文件拥有最高级别的控制权。
- 所属组(Group):包含多个用户的集合,用于实现团队内的权限共享。
- 其他用户(Other):系统中除所有者和所属组成员之外的所有用户,代表最广泛的访问范围。
2. 三种基础权限
- 读取(r):对文件而言,允许查看文件内容;对目录而言,允许列出目录中的文件和子目录。
- 写入(w):对文件而言,允许修改文件内容;对目录而言,允许创建、删除或重命名目录中的文件。
- 执行(x) :对文件而言,允许将文件作为程序或脚本运行;对目录而言,允许进入该目录(通过
cd
命令)。
二、权限的表示与查看
Linux 权限可以通过字符或数字两种方式表示,使用ls -l
命令可查看文件或目录的权限信息。
1. 字符表示法
以-rw-r--r--
为例,该字符串分为四部分:
- 第一个字符:表示文件类型(
-
为普通文件,d
为目录,l
为符号链接等)。 - 接下来三组字符(每组 3 个):分别对应所有者、所属组、其他用户的权限,每组内的字符依次表示
r
(读取)、w
(写入)、x
(执行),若权限不存在则用-
表示。
例如:
drwxr-xr-x
:表示目录,所有者拥有读、写、执行权限,所属组和其他用户拥有读和执行权限。-rwx------
:表示普通文件,仅所有者拥有读、写、执行权限。
2. 数字表示法
数字表示法将权限转换为八进制数值,便于通过命令快速设置权限:
r
对应4
,w
对应2
,x
对应1
,无权限对应0
。- 每组权限的数值为三种权限的总和,例如:
rwx
= 4+2+1 = 7rw-
= 4+2 = 6r-x
= 4+1 = 5r--
= 4---
= 0
完整的权限数值由三组数字组成,分别对应所有者、所属组、其他用户的权限,例如755
表示所有者拥有rwx
,所属组和其他用户拥有r-x
。
三、权限的修改方法
修改文件或目录的权限需要使用chmod
命令,修改所有者和所属组需使用chown
和chgrp
命令。
1. 修改权限:chmod
-
字符模式 :通过
u
(所有者)、g
(所属组)、o
(其他用户)、a
(所有用户)指定对象,结合+
(添加)、-
(移除)、=
(设置)操作符修改权限。- 示例 1:为文件
file.txt
的所有者添加执行权限
chmod u+x file.txt
- 示例 2:移除目录
docs
的所属组和其他用户的写入权限
chmod go-w docs
- 示例 3:将
script.sh
的权限设置为所有者可读可写可执行,所属组和其他用户可读可执行
chmod u=rwx,go=rx script.sh
- 示例 1:为文件
-
数字模式:直接通过三组数字设置权限。
- 示例:将
data
目录的权限设置为rwxr-x---
(所有者rwx
,所属组r-x
,其他用户无权限)
chmod 750 data
- 示例:将
2. 修改所有者和所属组
-
修改所有者 :使用
chown
命令,格式为chown 新所有者 文件名
。示例:将
file.txt
的所有者改为user1
chown user1 file.txt
-
修改所属组 :使用
chgrp
命令,格式为chgrp 新组名 文件名
;或通过chown
同时修改所有者和所属组(格式:chown 所有者:组名 文件名
)。示例 1:将
docs
目录的所属组改为team1
chgrp team1 docs
示例 2:将
report.pdf
的所有者改为user2
,所属组改为team2
chown user2:team2 report.pdf
-
递归修改 :添加
-R
选项可递归修改目录及其子目录中所有文件的权限或所有权。示例:递归修改
project
目录的所属组为dev
chgrp -R dev project
四、特殊权限与默认权限
除基础权限外,Linux 还支持特殊权限和默认权限(umask),用于满足复杂场景的需求。
1. 特殊权限
-
SetUID(SUID) :文件所有者的权限位中
x
变为s
,允许用户以文件所有者的身份执行该文件(仅对可执行文件有效)。示例:为
/bin/passwd
设置 SUID(允许普通用户修改自己的密码,实际以 root 身份执行)
chmod u+s /bin/passwd
-
SetGID(SGID) :所属组的权限位中
x
变为s
,对文件而言,执行时以所属组身份运行;对目录而言,目录中新建文件的所属组与该目录一致。示例:为
shared
目录设置 SGID(确保团队成员在该目录中创建的文件均属于team
组)
chmod g+s shared
-
粘滞位(Sticky Bit) :其他用户的权限位中
x
变为t
,用于目录时,仅文件所有者或 root 可删除该目录中的文件(防止误删共享目录中的文件)。示例:为
/tmp
设置粘滞位(系统默认已设置)
chmod o+t /tmp
特殊权限的数字表示:SUID 对应4
,SGID 对应2
,粘滞位对应1
,需添加在三组基础权限数字之前,例如4755
(SUID+755)、2770
(SGID+770)、1777
(粘滞位 + 777)。
2. 默认权限:umask
umask(用户文件创建掩码)用于控制新建文件和目录的默认权限,它通过从最大权限中 "减去" 相应值来生效:
- 新建文件的最大权限为
666
(无执行权限,需手动添加),新建目录的最大权限为777
。 - umask 的默认值通常为
0022
(普通用户)或0077
(root 用户),表示:- 普通用户新建文件默认权限:
666 - 022 = 644
(rw-r--r--
) - 普通用户新建目录默认权限:
777 - 022 = 755
(drwxr-xr-x
)
- 普通用户新建文件默认权限:
修改 umask:直接在命令行输入umask 新值
(临时生效),或在~/.bashrc
(用户级)、/etc/profile
(系统级)中添加配置(永久生效)。
示例:将当前 shell 的 umask 设置为0007
(新建文件权限为660
,目录为770
)
umask 0007