Linux 权限体系全解:基础权限、特殊权限与 ACL
一、文件权限九宫格,看懂这一行就够了
使用 ls -l 查看文件详情,第一列就是权限位,共11个字符,但核心是中间的9个(第2-10位)。-rwxr-xr-- 1 root root1234 Mar 10 10:00 myfile.txt位置 | 含义 | 字符示例 | 权限说明 |
第1位 | 文件类型 | - (普通文件) / d (目录) / l (链接) | 不属于权限位 |
第2-4位 | 所有者 (User) | rwx | 文件拥有者的权限 |
第5-7位 | 所属组 (Group) | r-x | 文件所属组成员的权限 |
第8-10位 | 其他人 (Other) | r-- | 既不是所有者也不在组中的其他人 |
字符 | 对文件的含义 | 对目录的含义 |
r (读) | 可查看文件内容 | 可列出目录内容(需要 x 配合) |
w (写) | 可修改/删除文件 | 可在目录中创建/删除文件(需要 x 配合) |
x (执行) | 可运行文件(脚本/程序) | 可进入目录(cd) |
一句话记忆:文件看内容,目录看路径。目录没有 x,r 和 w 都废了。二、怎么改权限:chown / chmod 两板斧
1.chown — 更改所有者/所属组
只改所有者
同时改所有者和组
chown alice:developers file.txt只改组(也可以用 chgrp)
chown :developers file.txt递归修改目录下所有文件
chown -R alice:developers /project/2.chmod — 更改权限
chmod u+x script.sh#所有者增加执行权限chmod g-w file.txt#组去掉写权限chmod o=r file.txt#其他人设为只读(覆盖原权限)chmod a+x script.sh#所有人增加执行权限(a = u+g+o)数字方式(高效):每个权限位对应一个数字:r=4, w=2, x=1rwxr-xr-x(所有者全权,组和其他人读+执行)
rw-r--r--(所有者读写,其他人只读)
rw-------(仅所有者读写)
数字 | 权限 | 适用场景 |
755 | rwxr-xr-x | 可执行程序、脚本目录 |
644 | rw-r--r-- | 普通配置文件 |
600 | rw------- | 私密文件(密钥、密码) |
777 | rwxrwxrwx | 极不推荐,任何用户都可改 |
三、三个特殊权限:SUID / SGID / Sticky
1. SUID (Set User ID) — 4xxx
作用:执行程序时,进程以文件所有者的身份运行,而非执行者。典型例子:/usr/bin/passwd(用户改密码时需要写入 /etc/shadow,但 shadow 只有 root 可写)设置:chmod u+s file 或 chmod 4755 file权限位显示:rwsr-xr-x(原 x 位置变成 s)2. SGID (Set Group ID) — 2xxx
对目录:在该目录下新建的文件/子目录,自动继承父目录的所属组(非常适用于团队协作目录)。设置:chmod g+s dir 或 chmod 2755 dir权限位显示:rwxr-sr-x 或 rwx--S---3. Sticky Bit — 1xxx
作用:在 sticky 目录下,只有文件所有者、目录所有者或root才能删除/改名文件,其他人即使有写权限也不行。典型例子:/tmp(任何人都能写,但不能删别人的临时文件)设置:chmod o+t dir 或 chmod 1777 dir权限位显示:rwxrwxrwt(原 x 位置变成 t)chmod 6770 shared_dir #SUID + SGID +目录权限rwxrws---四、umask — 控制新建文件的默认权限
umask是一个权限掩码,决定新文件/目录创建时去掉哪些权限。文件初始权限 = 666(rw-rw-rw-)减去 umask目录初始权限 = 777(rwxrwxrwx)减去 umaskumask | 文件默认权限 | 目录默认权限 | 说明 |
0022 | 644 (rw-r--r--) | 755 (rwxr-xr-x) | 常见默认值 |
0002 | 664 (rw-rw-r--) | 775 (rwxrwxr-x) | 适合团队协作 |
0077 | 600 (rw-------) | 700 (rwx------) | 偏严格 |
临时修改(仅当前会话)
永久修改:写入~/.bashrc 或 /etc/profile
五、ACL 权限 — 超出三元组限制的精细授权
传统权限只有「所有者、组、其他人」三档,ACL(Access Control List)可以对多个用户或组单独授权。查看 ACL
给用户 alice 读写权限
setfacl -m u:alice:rw file.txt给组 developers 读+执行权限
setfacl -m g:developers:rx /project删除某个用户的 ACL
setfacl -x u:alice file.txt递归设置目录及其所有子文件
setfacl -Rm u:bob:rwx /shared/mount | grep acl#大多数现代Linux默认开启使用场景:某个文件需要让特定同事(不在同组)有读写权限,但又不方便把他加进组里。六、sudo 权限委派 — 让普通用户干管理员的活
sudo允许普通用户以root(或其他用户)身份执行特定命令,通过 /etc/sudoers 文件配置(必须用 visudo 编辑)。配置行 | 含义 |
alice ALL=(ALL) ALL | alice 可以执行任何命令(等同于管理员) |
bob ALL=(ALL) /usr/bin/systemctl | bob 只能执行 systemctl |
%developers ALL=(ALL) NOPASSWD: /usr/bin/apt | developers 组成员执行 apt 免密码 |
jenkins ALL=(www-data) /usr/bin/rsync | jenkins 可以以 www-data 身份执行 rsync |
sudo -u www-data command#以www-data用户执行七、权限速查表
你要做什么 | 命令示例 |
查看文件权限 | ls -l file |
修改所有者 | chown alice:group file |
修改权限(数字) | chmod 755 script |
修改权限(符号) | chmod u+x,g-w script |
设置 SUID | chmod u+s file |
设置 SGID(目录) | chmod g+s shared_dir |
设置 Sticky Bit | chmod o+t /tmp |
查看 umask | umask |
设置 umask | umask 0027 |
给特定用户加 ACL 读权限 | setfacl -m u:alice:r file |
查看 ACL | getfacl file |
允许普通用户执行 systemctl | 编辑 sudoers: bob ALL=(ALL) /usr/bin/systemctl |
◆ 总结
避免 NOPASSWD: ALL:除非有特殊自动化需求审计日志:所有 sudo 操作都会记录在 /var/log/auth.log 或 /var/log/secure 中Linux 权限体系层层递进,理解后就能牢牢掌控系统的访问安全:基础权限(九宫格)—每个文件/目录的三元组(U/G/O)是根基。两板斧(chown/chmod)—日常最常用的修改工具,数字法 755、符号法 u+x 都要熟悉。三个特殊权限— SUID(提权)、SGID(继承组)、Sticky(保护文件不被乱删),特定场景利器。umask—控制新文件的默认权限,影响系统默认安全性。sudo—权限委派的最后一块拼图,让普通用户在授权范围内完成管理任务。掌握这些,你就能读懂 ls -l 的输出,也能设计出既安全又灵活的权限策略。掌握这套体系,不仅能保障系统安全,还能在团队协作、服务部署等场景中游刃有余。记住核心原则:最小权限原则——只授予完成任务所必需的权限,不多也不少。