Linux权限详解:从入门到掌握

Linux权限详解:从入门到掌握
在Linux系统中,权限管理是一个核心概念。如果你是初学者,可能会觉得它有些抽象,但只要理解了设计思想,你会发现它既严谨又优雅。本文将带你深入理解Linux权限体系,让你轻松管理文件和目录的访问控制。
一、Linux中的两类用户
Linux系统将用户分为两种:
| 用户类型 | 提示符 | 权限范围 |
|---|---|---|
| 超级用户(root) | # | 可以在系统中做任何事情,不受限制 |
| 普通用户 | $ | 只能做有限的操作,无法影响系统核心 |
切换用户命令:su
bash
# 从普通用户切换到root(需要输入root密码) su root # 从root切换到普通用户 su username 💡 小贴士:日常操作建议使用普通用户,只有在需要系统级配置时才切换到root,这样更安全。
二、文件访问者的三类身份
Linux将访问文件的用户划分为三个角色:
| 角色 | 代号 | 说明 |
|---|---|---|
| 所有者(User) | u | 创建文件的用户,拥有最高控制权 |
| 所属组(Group) | g | 与所有者同组的用户,用于团队协作 |
| 其他人(Others) | o | 既不是所有者也不在所属组中的用户 |
这种设计非常巧妙:既保证了文件主人的控制权,又允许灵活的团队共享。
三、文件类型与基本权限
3.1 文件类型(第一个字符)
执行 ls -l 时,第一个字符表示文件类型:
| 字符 | 含义 | 示例 |
|---|---|---|
- | 普通文件 | 文本、可执行程序 |
d | 目录 | 文件夹 |
l | 软链接 | 类似Windows快捷方式 |
b | 块设备 | 硬盘、光驱 |
c | 字符设备 | 屏幕、串口 |
p | 管道文件 | 进程间通信 |
s | 套接字文件 | 网络通信 |
3.2 三种基本权限(后面9个字符)
| 权限 | 对文件的意义 | 对目录的意义 | 数值 |
|---|---|---|---|
| 读(r) | 可读取文件内容 | 可浏览目录中的文件列表 | 4 |
| 写(w) | 可修改文件内容 | 可在目录中创建/删除文件 | 2 |
| 执行(x) | 可执行该文件(如脚本) | 可cd进入该目录 | 1 |
⚠️ 重点:目录的x权限决定能否cd进入,即使你有r权限,没有x也无法进入目录!
四、权限的两种表示方法
4.1 字符表示法
rwxr-xr-- 这样的格式,每三个一组:所有者/所属组/其他人。
4.2 八进制数值表示法
| 权限组合 | 数值 |
|---|---|
--- | 0 |
--x | 1 |
-w- | 2 |
-wx | 3 |
r-- | 4 |
r-x | 5 |
rw- | 6 |
rwx | 7 |
例如:rwxr-xr-- = 7(所有者) + 5(所属组) + 4(其他人) = 754
五、修改权限的命令
5.1 chmod — 修改权限
字符方式:
bash
# 给所有者增加执行权限 chmod u+x file.txt # 取消所属组的写权限 chmod g-w file.txt # 设置其他人的权限为只读 chmod o=r file.txt # 给所有角色添加读权限 chmod a+r file.txt 数值方式(推荐):
bash
# 设置权限为 rw-r--r-- chmod 644 file.txt # 设置权限为 rwxr-x--- chmod 750 script.sh # 递归修改目录下所有文件 chmod -R 755 myfolder/ 5.2 chown — 修改所有者
bash
# 修改文件所有者 chown alice file.txt # 同时修改所有者和所属组 chown alice:developers file.txt # 递归修改目录 chown -R alice myfolder/ 5.3 chgrp — 修改所属组
bash
# 修改文件所属组 chgrp developers file.txt # 递归修改 chgrp -R developers myfolder/ 六、umask — 默认权限掩码
当你创建一个文件或目录时,系统会赋予一个默认权限:
- 普通文件默认:
666(rw-rw-rw-) - 目录默认:
777(rwxrwxrwx)
但实际创建出来的权限会受umask影响。最终权限 = 默认权限 & (~umask)
bash
# 查看当前umask umask # 输出:0022 (普通用户通常是0002) # 设置新的umask umask 027 计算示例(umask=0022):
- 新建文件:
666 & (~022)=666 & 755= 644(rw-r–r–) - 新建目录:
777 & (~022)=777 & 755= 755(rwxr-xr-x)
💡 root用户的默认umask通常是0022,普通用户是0002。
七、目录权限的特殊注意事项
目录权限的行为与文件略有不同,这里有一个常见误区:
| 权限组合 | 能否cd进入 | 能否ls列出内容 | 能否创建/删除文件 |
|---|---|---|---|
r-- (4) | ❌ 不能 | ❌ 不能 | ❌ 不能 |
r-x (5) | ✅ 能 | ✅ 能 | ❌ 不能 |
rwx (7) | ✅ 能 | ✅ 能 | ✅ 能 |
关键结论:
- 进入目录需要
x权限 - 列出目录内容需要
r权限 - 创建/删除文件需要
w权限
八、粘滞位(Sticky Bit)— 解决“删别人文件”的问题
问题场景
如果某个目录对所有人开放了w权限(如/tmp),那么任何用户都可以删除目录中的任何文件,哪怕文件不属于自己。这显然不合理!
解决方案
粘滞位(Sticky Bit)正是为了解决这个问题。设置粘滞位后,目录中的文件只能由以下角色删除:
- 超级管理员(root)
- 目录的所有者
- 文件的所有者
设置方法
bash
# 给目录添加粘滞位 chmod +t /shared # 查看效果(权限末尾出现t) ls -ld /shared # 输出:drwxrwxrwt. 2 root root 4096 ... 📌 /tmp 目录就是一个经典的粘滞位例子,任何用户都可以在里面创建临时文件,但只能删除自己的。九、总结速查表
| 命令 | 作用 | 示例 |
|---|---|---|
chmod 755 file | 设置权限 | 所有者全权,组和其他人读+执行 |
chmod u+x file | 给所有者加执行 | 常用在脚本上 |
chown user:group file | 修改所有者和组 | 转移文件归属 |
chgrp group file | 修改所属组 | 让团队共享 |
umask 027 | 设置默认掩码 | 新文件默认640 |
chmod +t dir | 设置粘滞位 | 保护共享目录 |
最后的话
Linux权限体系的设计思想可以概括为:最小权限原则 — 每个用户和进程只拥有完成工作所必需的最小权限。理解并善用这套机制,是保障系统安全的基础。
希望这篇文章能帮你建立起对Linux权限的清晰认识。如果有任何疑问,欢迎在评论区留言讨论!