1. 什么是文件系统权限?它是如何工作的?
文件权限的本质
想象你的电脑是一个大房子,每个文件和目录都是房间里的物品。文件系统权限就像是一把钥匙,决定谁能进房间、能看什么、能修改什么。
-
权限三要素:
-
读(r):能查看文件内容(比如看文档)。
-
写(w):能修改文件(比如编辑文档)。
-
执行(x):能运行程序(比如执行脚本)。
-
权限的工作方式
每个文件或目录都有三组权限,分别对应三类人:
-
所有者(Owner):文件的“房主”,权限最大。
-
所属组(Group):属于同一组的用户,共享权限。
-
其他人(Others):既不是所有者,也不在组的用户。
示例:
-rw-r--r-- 1 alice developers 1024 Aug 10 10:00 report.txt
-
alice
是所有者,developers
是所属组。 -
权限
rw-r--r--
表示:-
所有者:可读可写(
rw-
) -
组:仅可读(
r--
) -
其他人:仅可读(
r--
)
-
权限的优先级
-
用户身份优先:系统会按以下顺序检查权限:
-
所有者 → 2. 所属组 → 3. 其他人
-
-
只要匹配到任意一级权限,就不再继续检查。比如,如果用户是所有者,直接应用所有者权限,不再看组和其他人的权限。
2. Linux 文件权限的工作方式
权限对文件和目录的影响
-
对文件:
-
读(r):能查看文件内容(如
cat file.txt
)。 -
写(w):能修改文件内容(如
echo "hello" >> file.txt
)。 -
执行(x):能运行可执行文件(如
./script.sh
)。
-
-
对目录:
-
读(r):能列出目录内容(如
ls /home
)。 -
写(w):能在目录中创建或删除文件(需同时有执行权限)。
-
执行(x):能进入目录(如
cd /home
)。
-
通俗总结:
-
目录的
x
权限是“开门钥匙”,没有它,读和写权限都无效。 -
如果目录没有
x
权限,即使有r
权限,也无法看到目录内的文件列表!
3. 修改权限的命令:chmod
两种修改方式
-
符号模式(直观):
chmod [角色][操作][权限] 文件名
-
角色:
u
(所有者)、g
(组)、o
(其他人)、a
(所有人)。 -
操作:
+
(添加)、-
(移除)、=
(直接设置)。 -
权限:
r
、w
、x
。
示例:
chmod u+x script.sh # 给所有者添加执行权限 chmod go-w file.txt # 移除组和其他人的写权限 chmod a=rw file.txt # 所有人可读可写
-
-
数字模式(快捷):
-
用 3 位数字表示权限,每位是
r(4) + w(2) + x(1)
的和。 -
示例:
chmod 755 script.sh # 所有者:7(rwx),组和其他人:5(r-x) chmod 644 file.txt # 所有者:6(rw-),组和其他人:4(r--)
-
4. 修改文件所有者和所属组:chown
和 chgrp
-
chown
修改所有者:chown alice file.txt # 将文件所有者改为 alice chown alice:developers file.txt # 同时修改所有者和组
-
chgrp
修改所属组:chgrp developers file.txt # 将文件所属组改为 developers
注意:普通用户只能修改自己拥有的文件的组(且必须是该组的成员)。
5. 文件类型标识
在 ls -l
输出的第一个字符表示文件类型:
-
-
:普通文件(如文本、图片)。 -
d
:目录。 -
l
:符号链接(快捷方式)。 -
c
:字符设备文件(如键盘)。 -
b
:块设备文件(如硬盘)。 -
s
:套接字文件(进程间通信)。 -
p
:管道文件。
示例:
drwxr-xr-x 2 alice developers 4096 Aug 10 10:00 my_folder
lrwxrwxrwx 1 root root 7 Aug 10 10:00 link -> target
6. 特殊权限:SUID、SGID、Sticky Bit
SUID(Set User ID)
-
作用对象:可执行文件。
-
效果:执行文件时,临时拥有文件所有者的权限(而不是执行者的权限)。
-
典型用途:
/usr/bin/passwd
(普通用户修改密码时需临时拥有 root 权限)。 -
设置方法:
chmod u+s file # 符号模式 chmod 4755 file # 数字模式(4表示SUID)
SGID(Set Group ID)
-
作用对象:目录或可执行文件。
-
对目录:在该目录下创建的新文件,所属组自动继承目录的组。
-
对文件:执行时临时拥有文件所属组的权限。
-
-
典型用途:共享目录(团队成员共同管理文件)。
-
设置方法:
chmod g+s dir # 符号模式 chmod 2770 dir # 数字模式(2表示SGID)
Sticky Bit(粘滞位)
-
作用对象:目录。
-
效果:只有文件所有者或 root 能删除目录内的文件(防手残!)。
-
典型用途:临时共享目录(如
/tmp
)。 -
设置方法:
chmod +t dir # 符号模式 chmod 1777 dir # 数字模式(1表示Sticky Bit)
特殊权限标识:
-
SUID:
s
出现在所有者执行位(如-rwsr-xr-x
)。 -
SGID:
s
出现在组执行位(如drwxrwsr-x
)。 -
Sticky Bit:
t
出现在其他人执行位(如drwxrwxrwt
)。
7. 文件和目录的初始权限
-
文件:默认权限是
666
(即rw-rw-rw-
),但受umask
影响。 -
目录:默认权限是
777
(即rwxrwxrwx
),同样受umask
影响。
示例:
-
若
umask
是022
,则:-
文件权限:
666 - 022 = 644
(rw-r--r--
)。 -
目录权限:
777 - 022 = 755
(rwxr-xr-x
)。
-
8. umask
:权限的“过滤器”
什么是 umask
?
-
作用:控制新建文件或目录的默认权限。
-
规则:
umask
的值是“要屏蔽的权限”。-
文件默认权限 =
666 - umask
-
目录默认权限 =
777 - umask
-
查看和设置 umask
-
查看当前值:
umask # 输出可能是 0022 或 0002
-
临时设置:
umask 027 # 新文件权限:640(rw-r-----),目录:750(rwxr-x---)
-
永久设置:
将umask 027
添加到~/.bashrc
或/etc/profile
。
示例计算:
-
umask=027
(实际计算用0027
的后三位):-
文件权限:
666 - 027 = 640
(rw-r-----
)。 -
目录权限:
777 - 027 = 750
(rwxr-x---
)。
-