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---)。
-