📋 前言
操作环境:Xshell 7 + 腾讯云服务器(CentOS 7)
适合人群:Linux 零基础新手
系列文章:Linux专题链接🔗:https://blog.csdn.net/xiao_running/category_13167800.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=13167800&sharerefer=PC&sharesource=Xiao_running&sharefrom=from_link
大家好,我是正在学习 Linux 的小小风呀!
说实话,刚接触 Linux 权限的时候,我是一脸懵的。
什么rwx、chmod 755、chown、umask……一堆概念扑面而来,光是看ls -l的输出都觉得头大。
后来我静下心来,把权限相关的知识点一条条啃下来,整理成了这篇笔记。现在分享出来,希望能帮到和我一样正在入门 Linux 的同学。
本文覆盖的知识点:
- 权限的基本概念(谁有权限?有什么权限?)
- 如何修改权限(
chmod) - 如何修改文件归属(
chown/chgrp) - 新文件的默认权限是怎么来的(
umask) - 三个特殊权限位(SUID / SGID / Sticky Bit)
- 新手常见问题速查
每个知识点下面都有代码示例,可以直接在腾讯云服务器上敲一遍,印象会深刻很多。
文章思维导图
下图梳理了本文所有核心知识点,建议先浏览全图建立整体认知,再逐节深入阅读。
(建议右击图片 → "在新标签页中打开"查看高清大图)
📑 目录
- 一、权限基本概念
- 1. 为什么要有权限?
- 2. 用户分类:root 与普通用户
- 3. 身份切换:su 与 sudo
- 4. 角色分类:U / G / O
- 5. 文件权限:r / w / x
- 6. 目录权限:r / w / x 的含义不同!
- 7. 读懂 ls -l 的权限字符串
- 8. 权限的数字表示法
- 二、chmod —— 修改文件权限
- 语法形式
- 功能说明
- 代码示例
- 延伸扩展
- 三、chown —— 修改文件所有者
- 语法形式
- 功能说明
- 代码示例
- 延伸扩展
- 四、chgrp —— 修改文件所属组
- 语法形式
- 功能说明
- 代码示例
- 延伸扩展
- 五、umask —— 默认权限掩码
- 语法形式
- 功能说明
- 代码示例
- 延伸扩展
- 六、特殊权限(SUID / SGID / Sticky Bit)
- 6.1 SUID(Set User ID)
- 6.2 SGID(Set Group ID)
- 6.3 Sticky Bit(粘滞位)
- 七、新手常见问题速查
- 总结
一、权限基本概念
1. 为什么要有权限?
Linux 是一个多用户操作系统,同一台服务器上可能有多个用户同时登录(比如你们团队的几个人共用一台腾讯云服务器)。
如果大家都能随意修改彼此的文件,那不乱套了吗?
所以 Linux 设计了一套权限系统,主要目的有三个:
- 控制用户行为:防止误操作破坏系统文件
- 安全隔离:不同用户之间的数据相互隔离,A 用户看不到 B 用户的私密文件
- 权限 = 角色 + 目标属性:权限首先限制的是"角色"(你是谁),同时要求"目标"(文件/目录)必须具备对应的属性(是否允许读/写/执行)
2. 用户分类:root 与普通用户
Linux 把用户分为两大类:
| 用户类型 | 说明 | 权限范围 |
|---|---|---|
| root(超级管理员) | 系统最高权限用户,UID = 0 | 不受任何权限限制,可以对所有文件为所欲为 |
| 普通用户 | 日常使用的账号,如alice、bob | 权限受限,只能操作自己有权限的文件 |
⚠️重要:root 用户是不受权限约束的。即使某个文件的权限是
----------(所有人无任何权限),root 依然可以读写执行它。这是很多 Linux 安全问题的根源——如果黑客拿到了 root 权限,就等于掌控了整台服务器。
3. 身份切换:su 与 sudo
日常操作中,我们经常需要在普通用户和 root 之间切换。
su —— 切换用户身份
# 普通用户 → root(需要输入 root 密码) su # 切换到 root,当前目录不变 su - # 切换到 root,并跳转到 root 的家目录(/root) # root → 普通用户(无需密码) su alice # 切换到 alice 用户 su - alice # 切换到 alice,并跳转到 alice 的家目录 # 退出当前用户,回到上一个用户 exit # 或直接按 Ctrl + D💡
su与su -的区别:su只切换用户身份,但保留当前所在目录和环境变量;su -完全模拟一次登录,会切换到目标用户的家目录并加载其环境变量。
推荐用su -,环境更干净。
sudo —— 短暂提权(推荐!)
# 以 root 权限执行单条命令(输入的是当前用户的密码,不是 root 密码) sudo apt update # Ubuntu/Debian 系统 sudo yum install nginx # CentOS/RHEL 系统✅为什么推荐 sudo 而不是 su?
sudo只给单条命令提权,执行完就回到普通用户身份,降低误操作风险。su切换到 root 后,如果不小心敲了rm -rf /,就真的完了。
📌Ubuntu 的特殊之处:Ubuntu 默认禁用 root 远程登录,只能通过
sudo su切换到 root:sudo su # Ubuntu 上切换到 root 的正确方式
4. 角色分类:U / G / O
权限系统需要知道"谁在访问文件"。Linux 把访问者分为三类角色,简称UGO:
| 角色 | 缩写 | 全称 | 含义 |
|---|---|---|---|
| 拥有者 | u | User | 文件的创建者(owner) |
| 所属组 | g | Group | 文件所属的用户组(group) |
| 其他人 | o | Others | 既不是拥有者,也不在所属组中的用户 |
🤔为什么要有所属组?
假设你和同事bob、carol在同一个开发团队,需要共同维护/data/project目录。
如果只用"拥有者"和"其他人"两个角色,你要么给所有人开放权限(不安全),要么只能给自己开放(同事无法协作)。
引入"所属组"后,你可以把/data/project的组设为devteam,然后把bob和carol都加入这个组,这样组内的三个人都有相应权限,组外的人则没有。实现了精细化的权限管理。
5. 文件权限:r / w / x
对普通文件来说,三种权限的含义:
| 权限 | 符号 | 数值 | 对文件的意义 |
|---|---|---|---|
| 读 | r | 4 | 可以读取文件内容(如cat、less、vim打开查看) |
| 写 | w | 2 | 可以修改文件内容(如vim编辑并保存、echo >>追加) |
| 执行 | x | 1 | 可以作为程序/脚本执行(如./script.sh) |
⚠️注意:有
x权限只是"有机会"执行,文件本身需要是可执行程序(如编译后的二进制文件)或脚本(如.sh文件且开头有#!/bin/bash)才能真正运行。
6. 目录权限:r / w / x 的含义不同!
目录的权限含义和文件完全不同,这是新手最容易混淆的地方!
| 权限 | 符号 | 对目录的意义 |
|---|---|---|
| 读 | r | 可以列出目录内容(如ls命令能看到目录下有哪些文件) |
| 写 | w | 可以在目录中增删文件(如touch新建、rm删除、mv重命名) |
| 执行 | x | 可以进入目录(如cd到该目录),以及访问目录内文件的元数据 |
🔑核心要点:要操作目录里的文件,首先得有目录的
x权限!
举个例子:目录权限是r--(只有读,没有执行),你用ls能看到文件名,但用cat filename会报Permission denied,因为你没有x权限进入目录去访问文件内容。
7. 读懂 ls -l 的权限字符串
用ls -l命令可以查看文件的详细权限信息:
$ ls -l total 8 -rw-rw-r-- 1 alice alice 1024 Sep 24 19:06 my.txt drwxr-x--- 2 bob devs 4096 Sep 24 20:30 myproject/下面逐位解读第一列的权限字符串(以-rw-rw-r--为例):
- rw- rw- r-- │ │ │ └── 其他人(Others)的权限:r--(只读) │ │ └─────── 所属组(Group)的权限:rw-(读写,不可执行) │ └──────────── 拥有者(User)的权限:rw-(读写,不可执行) └──────────────── 文件类型:- 普通文件,d 目录,l 软链接| 位置 | 字符 | 含义 |
|---|---|---|
| 第 1 位 | -/d/l | 文件类型 |
| 第 2~4 位 | rw- | 拥有者(User)权限 |
| 第 5~7 位 | rw- | 所属组(Group)权限 |
| 第 8~10 位 | r-- | 其他人(Others)权限 |
再来看第二列1 alice alice的含义:
1:硬链接数量- 第一个
alice:拥有者(owner) - 第二个
alice:所属组(group)
8. 权限的数字表示法
除了用rwx字母表示,Linux 还支持用八进制数字来表示权限,这在chmod命令中非常常用。
计算方法:把r/w/x分别对应的数值相加。
| 权限 | 二进制 | 八进制 |
|---|---|---|
--- | 000 | 0 |
--x | 001 | 1 |
-w- | 010 | 2 |
-wx | 011 | 3 |
r-- | 100 | 4 |
r-x | 101 | 5 |
rw- | 110 | 6 |
rwx | 111 | 7 |
常见权限组合速查:
| 数字 | 权限字符串 | 含义 | 典型用途 |
|---|---|---|---|
644 | rw-r--r-- | 所有者读写,其他人只读 | 普通文件的默认权限 |
755 | rwxr-xr-x | 所有者全权限,其他人读和执行 | 可执行文件 / 目录的默认权限 |
600 | rw------- | 只有所有者读写 | 私密文件(如 SSH 私钥) |
700 | rwx------ | 只有所有者有全部权限 | 私密目录 |
777 | rwxrwxrwx | 所有人都有全部权限 | ⚠️ 谨慎使用! |
二、chmod —— 修改文件权限
语法形式
chmod [选项] <权限模式> <文件或目录>常用选项:
| 选项 | 说明 |
|---|---|
-R | 递归修改,将目录及其下所有内容一并修改权限 |
-v | 显示详细的修改过程(verbose) |
权限模式有两种写法:
① 数字模式(推荐,简洁高效)
chmod 755 filename # rwxr-xr-x chmod 644 filename # rw-r--r--② 符号模式(直观易读)
chmod u+x filename # 给拥有者(u)添加(+)执行(x)权限 chmod g-w filename # 给所属组(g)去掉(-)写(w)权限 chmod o=r filename # 将其他人(o)的权限精确设置为(=)只读(r) chmod a+x filename # 给所有人(a=all)添加执行权限符号模式中的操作符:
| 操作符 | 含义 |
|---|---|
+ | 添加权限(不影响已有权限) |
- | 去除权限 |
= | 精确设置权限(覆盖原有权限) |
功能说明
chmod(changemode)用于修改文件或目录的访问权限,是 Linux 权限管理中使用频率最高的命令。
✅谁可以执行 chmod?
文件的拥有者自己就能改,不需要 root 权限。当然 root 也可以改任何文件的权限。
代码示例
① 数字模式(最常用)
# 示例1:刚写好的部署脚本,需要添加执行权限 chmod 755 deploy.sh ls -l deploy.sh # 输出:-rwxr-xr-x 1 alice alice 2048 Sep 24 21:00 deploy.sh # 示例2:私密配置文件,只允许自己读写 chmod 600 /etc/myapp/config.conf ls -l /etc/myapp/config.conf # 输出:-rw------- 1 alice alice 512 Sep 24 21:05 config.conf # 示例3:网站根目录,标准权限 chmod 755 /var/www/html ls -ld /var/www/html # 输出:drwxr-xr-x 2 alice alice 4096 Sep 24 21:10 /var/www/html/② 符号模式(更直观)
# 示例1:给脚本添加执行权限(最常用场景) chmod u+x backup.sh # 示例2:去掉"其他人"的写权限(防止被篡改) chmod o-w important.txt # 示例3:同时操作多个角色 chmod u+rwx,g+rx,o-rx myapp # 含义:u加读写执行,g加读执行,o去掉读执行 # 示例4:用 = 精确设置权限 chmod u=rw,g=r,o= secret.txt # 含义:u=rw, g=r, o=无权限(等价于 chmod 640)③ 递归修改目录(部署时常用)
# 将整个网站目录递归设为 755 chmod -R 755 /var/www/mysite # 验证结果 ls -la /var/www/mysite | head -10延伸扩展
1. 刚创建的脚本无法直接运行?
这是新手最高频的问题!默认新建的.sh文件没有x权限运行时会报Permission denied./deploy.sh # bash: ./deploy.sh: Permission denied # 解决方法: chmod +x deploy.sh ./deploy.sh # 现在可以运行了
2. 不要随意使用 chmod 777!
chmod 777 /var/www/html # ❌ 危险!所有人都能读写执行777 意味着"任何人都可以修改这个文件/目录",在公网服务器上等于敞开大门欢迎黑客。
正确做法:先想清楚需要给哪些人什么权限,再用精准的权限设置(如 755、644)。
3. 权限匹配顺序:只匹配一次!
Linux 检查权限时是按顺序匹配的,而且只匹配一次:顺序:拥有者(u)→ 所属组(g)→ 其他人(o)举例:文件权限是
-rw-rw-r--,用户ggb来访问:
- 先检查:
ggb是拥有者吗?不是 → 继续- 再检查:
ggb在所属组whb里吗?不在 → 继续- 最后:
ggb属于其他人(o),使用r--权限重要:如果
ggb既是拥有者又在所属组里,系统只会按"拥有者"匹配一次,不会再去检查组权限。
三、chown —— 修改文件所有者
语法形式
chown [选项] <新所有者>[:<新所属组>] <文件或目录>常用选项:
| 选项 | 说明 |
|---|---|
-R | 递归修改目录及其下所有内容 |
-v | 显示修改详情 |
功能说明
chown(changeowner)用于修改文件或目录的拥有者,也可以同时修改所属组。
⚠️重要限制:只有 root 才能执行 chown!
普通用户(即使是文件的当前拥有者)也无法把文件"转让"给另一个用户。这和 Windows 不一样,Windows 里你可以把自己的文件赠予别人,但 Linux 不行。
原因:如果允许普通用户随意chown,他可以先把别人的文件chown给自己,修改完再chown回去,就能绕过权限限制了。
代码示例
① 只修改拥有者
# 把 myfile.txt 的拥有者改为 alice(需要 root 权限) sudo chown alice myfile.txt # 验证 ls -l myfile.txt # 输出:-rw-r--r-- 1 alice alice 0 Sep 24 21:30 myfile.txt # ↑ 拥有者已变为 alice② 同时修改拥有者和所属组
# 把 project/ 的拥有者改为 alice,所属组改为 devteam sudo chown alice:devteam project/ # 查看结果 ls -ld project/ # 输出:drwxr-xr-x 2 alice devteam 4096 Sep 24 21:35 project/ # 也可以只改组(保留冒号,省略拥有者) sudo chown :devteam myproject/③ 递归修改(部署 Web 项目时必用)
# 把网站目录的所有者和组都改为 nginx(Nginx 运行用户) sudo chown -R nginx:nginx /var/www/mysite # 验证 ls -la /var/www/mysite | head -5延伸扩展
1. 冒号(:)与点号(.)的区别
老版本 Linux 支持用点号.分隔拥有者和组chown alice.devteam project/ # 老写法,不推荐 chown alice:devteam project/ # 新写法,推荐现在统一用冒号
:,更清晰,也不会和文件名中的点号混淆。
2. 部署 Web 项目时的标准操作
在腾讯云服务器上部署网站,通常需要把网站目录的拥有者改为 Web 服务器运行用户# Nginx 用户通常是 nginx 或 www-data(取决于系统) sudo chown -R nginx:nginx /var/www/mysite sudo chmod -R 755 /var/www/mysite这样 Nginx 进程才能读取(和写入)网站文件。
3. chown vs chmod:别搞混!
chmod:改的是"权限"(谁能读/写/执行)→ 拥有者自己就能改chown:改的是"归属"(文件属于谁)→ 只有 root 能改
四、chgrp —— 修改文件所属组
语法形式
chgrp [选项] <新所属组> <文件或目录>常用选项:
| 选项 | 说明 |
|---|---|
-R | 递归修改目录及其下所有内容 |
功能说明
chgrp(changegroup)用于修改文件或目录的所属组。
其实chgrp能做的事,chown也能做(用chown :组名的语法)。chgrp作为一个独立命令存在,主要是语义更清晰——当你只想改组、不想改拥有者的时候,chgrp的意图更明确,不容易误操作。
代码示例
① 修改文件的所属组
# 把 report.txt 的组改为 finance(财务组) sudo chgrp finance report.txt # 验证 ls -l report.txt # 输出:-rw-r--r-- 1 alice finance 2048 Sep 24 21:40 report.txt # ↑ 组已变为 finance② 递归修改目录的所属组
# 把项目目录的组改为 developers sudo chgrp -R developers /data/project # 验证 ls -la /data/project | head -5③ chgrp 与 chown 的等价写法
# 以下两条命令效果完全相同: sudo chgrp developers myfile.txt sudo chown :developers myfile.txt延伸扩展
1. 如何查看系统中有哪些组?
# 查看所有组(每行格式:组名:x:GID:成员列表) cat /etc/group # 查看当前用户属于哪些组 groups # 输出:alice : alice devteam sudo # 查看指定用户属于哪些组 groups alice
2. 如何把用户加入某个组?
# 把用户 bob 加入 developers 组(需要 root) sudo usermod -aG developers bob⚠️ 注意:
-aG的a是 append(追加),如果漏掉a,会覆盖用户原有的组!
修改后需要重新登录才能生效。
3. 用组来管理团队权限(最佳实践)
场景:你和bob、carol需要共同维护/data/shared目录# 步骤1:创建 devteam 组(root 操作) sudo groupadd devteam # 步骤2:把三个人加入 devteam 组 sudo usermod -aG devteam alice sudo usermod -aG devteam bob sudo usermod -aG devteam carol # 步骤3:设置目录权限 sudo chgrp -R devteam /data/shared sudo chmod -R 2770 /data/shared # 2770 = rwxrws---(含 SGID,见第六节)这样,devteam 组内的三个人都有读写权限,组外人员完全无法访问。
五、umask —— 默认权限掩码
语法形式
umask # 查看当前 umask 值(数字形式) umask -S # 查看当前 umask 值(符号形式) umask <新值> # 临时修改 umask(仅当前 Shell 会话有效)功能说明
umask(user file-creationmask)是一个权限掩码,它决定了新创建的文件和目录的默认权限。
理解 umask 需要先知道两个"起始权限":
| 文件类型 | 起始权限(最大可能权限) | 含义 |
|---|---|---|
| 普通文件 | 666(rw-rw-rw-) | 文件默认不应该有执行权限 |
| 目录 | 777(rwxrwxrwx) | 目录需要 x 权限才能进入 |
🤔为什么文件的起始权限是 666 而不是 777?
因为 Linux 认为:一个普通文件被创建出来时,不应该自动获得执行权限。如果你需要执行它,必须明确地给它加x权限。这是安全设计——防止某些攻击手法通过上传文件+自动执行来入侵系统。
最终权限的计算公式(重要!):
最终权限 = 起始权限 & (~umask)这里的&是按位与,~是按位取反。umask 中起作用的位,会在最终权限中被"遮罩"掉。
代码示例
① 查看当前 umask
# 查看 umask 值 $ umask 0022 # 最前面的 0 是八进制前缀,实际 umask 值是 022 # 以符号形式查看(更直观) $ umask -S u=rwx,g=rx,o=rx # 含义:umask 遮罩掉了 g 的 w 权限和 o 的 w 权限② 验证 umask 对新文件/目录的影响
# 当前 umask = 022 $ umask 0022 # 创建一个新文件 $ touch testfile.txt $ ls -l testfile.txt -rw-r--r-- 1 alice alice 0 Sep 24 22:00 testfile.txt # 权限 = 644(计算过程见下方) # 创建一个新目录 $ mkdir testdir $ ls -ld testdir drwxr-xr-x 2 alice alice 4096 Sep 24 22:01 testdir/ # 权限 = 755(计算过程见下方)权限计算过程(umask = 022):
文件:起始 666,umask 022 666 = 110 110 110 (二进制) 022 = 000 010 010 (二进制) ~022 = 111 101 101 (二进制,按位取反) 666 & ~022 = 110 100 100 = 644 ✓ 目录:起始 777,umask 022 777 = 111 111 111 022 = 000 010 010 ~022 = 111 101 101 777 & ~022 = 111 101 101 = 755 ✓💡注意:umask 的计算是位运算,不是简单的减法。大多数情况下减法结果一样,但某些特殊值(如 umask=023)会有差异:
umask=023,文件权限: 错误算法:666 - 023 = 643(rw-r---wx)❌ 正确算法:666 & ~023 = 644(rw-r--r--)✓
③ 临时修改 umask
# 把 umask 改为 0077(只有拥有者有权限,组和其他人完全无权) $ umask 0077 $ umask 0077 # 此时新建文件的权限 $ touch private.txt $ ls -l private.txt -rw------- 1 alice alice 0 Sep 24 22:10 private.txt # 权限 = 600(666 & ~077 = 600)✓ # 注意:umask 修改只在当前 Shell 会话有效,退出后恢复默认延伸扩展
1. 如何永久修改 umask?
临时修改只对当前 Shell 有效。如需永久修改:# 修改当前用户的 umask(写入 ~/.bashrc) echo "umask 027" >> ~/.bashrc source ~/.bashrc # 修改系统全局 umask(影响所有用户,需 root) # 编辑 /etc/profile 或 /etc/login.defs sudo vim /etc/profile # 在文件中找到 umask 行,改为 umask 027
2. 常见 umask 值及其适用场景
umask 文件默认 目录默认 适用场景 022644 755 最常用默认值,平衡安全与便利 027640 750 更严格,组外用户无任何权限 077600 700 最严格,只有拥有者有权限 002664 775 团队协作环境,组成员也有写权限
六、特殊权限(SUID / SGID / Sticky Bit)
除了标准的rwx权限,Linux 还有三个特殊权限位,它们会改变权限检查的行为。
6.1 SUID(Set User ID)
语法形式
chmod u+s <可执行文件> # 设置 SUID chmod 4<权限> <文件> # 数字模式(4 代表 SUID) chmod u-s <文件> # 取消 SUID功能说明
SUID 只对可执行文件有效。设置了 SUID 后,无论谁执行这个程序,程序都会以文件拥有者的身份运行。
经典例子:passwd命令
$ ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 68208 Mar 14 2022 /usr/bin/passwd # ↑ 这个 s 就是 SUID 标志!普通用户alice执行passwd修改自己的密码时,需要写入/etc/shadow文件(这个文件只有 root 能写)。但因为passwd有 SUID,alice 执行passwd时,进程的实际有效用户 ID 变成了root,所以才能写入/etc/shadow。
代码示例
# 查看系统中的 SUID 程序 $ find /usr/bin -perm -4000 -type f 2>/dev/null /usr/bin/passwd /usr/bin/sudo /usr/bin/su # 这些程序都需要以 root 身份运行部分操作 # SUID 在 ls -l 中的显示 $ ls -l /usr/bin/passwd -rwsr-xr-x 1 root root ... # ↑ User 的 x 位显示为 s(小写)= SUID 生效 # 如果 User 本身没有 x 权限,会显示为大写 S(无效状态)延伸扩展
⚠️SUID 是双刃剑!
SUID 让普通用户能以高权限执行程序,如果被恶意利用,就是提权漏洞。
安全原则:
- 不要随意给程序设置 SUID
- 定期检查系统中的 SUID 文件:
find / -perm -4000 -type f 2>/dev/null- 重点排查:不属于系统默认、但是有 SUID 的程序
6.2 SGID(Set Group ID)
语法形式
chmod g+s <目录或文件> # 设置 SGID chmod 2<权限> <文件> # 数字模式(2 代表 SGID) chmod g-s <文件> # 取消 SGID功能说明
SGID 有两种作用:
① 对可执行文件:类似 SUID,执行时以文件所属组的身份运行(不常用)
② 对目录(常用!):在该目录下创建的新文件/子目录,会自动继承该目录的所属组(而不是创建者自己的默认组)
这是团队协作目录的最佳实践!
代码示例
6.3 Sticky Bit(粘滞位)
语法形式
chmod +t <目录> # 设置 Sticky Bit chmod 1<权限> <目录> # 数字模式(1 代表 Sticky Bit) chmod -t <目录> # 取消 Sticky Bit功能说明
Sticky Bit 只对目录有效。
设置了 Sticky Bit 的目录中,即使用户对目录有写权限(w),也只能删除自己创建的文件,不能删除别人的文件。
经典例子:/tmp目录
$ ls -ld /tmp drwxrwxrwt 15 root root 4096 Sep 24 22:40 /tmp/ # ↑ 最后的 t 就是 Sticky Bit 标志!/tmp是系统临时文件目录,权限是 777(所有人可读写),但有了 Sticky Bit,你只能删除自己创建的文件,不能删除别人的临时文件。
代码示例
# 创建一个公共上传目录,设置粘滞位 sudo mkdir /data/uploads sudo chmod 1777 /data/uploads $ ls -ld /data/uploads drwxrwxrwt 2 root root 4096 Sep 24 22:45 /data/uploads/ # ↑ Others 的 x 位显示为 t = Sticky Bit 生效 # 测试:alice 创建文件,bob 尝试删除 $ su - alice $ touch /data/uploads/alice_file.txt $ su - bob $ rm /data/uploads/alice_file.txt rm: cannot remove '/data/uploads/alice_file.txt': Operation not permitted # ✅ bob 无法删除 alice 的文件!延伸扩展
小写 t 和大写 T 的区别:
- 小写
t:Sticky Bit 生效(目录同时有x权限)- 大写
T:Sticky Bit 已设置,但目录没有x权限,实际上不生效$ chmod 1666 bad_dir $ ls -ld bad_dir drw-rw-rwT 2 root root 4096 ... # 大写 T = 无效!
七、新手常见问题速查
Q1:执行脚本时报Permission denied怎么办?
原因:脚本文件没有执行(x)权限。
解决:
chmod +x your_script.sh ./your_script.shQ2:chown时报Operation not permitted怎么办?
原因:chown需要 root 权限,普通用户不能执行。
解决:
sudo chown alice:alice myfile.txtQ3:新建文件的默认权限是什么?为什么是 644?
原因:由umask决定。默认umask=022时:
- 文件:
666 & ~022 = 644(rw-r--r--) - 目录:
777 & ~022 = 755(rwxr-xr-x)
修改默认权限:
umask 027 # 改为更严格的默认权限Q4:为什么我对文件有r权限,但cat文件时还是Permission denied?
原因:你可能没有目录的x权限!访问文件需要先"进入"目录(x权限),才能访问目录里的文件。
解决:给目录加上执行权限:
chmod +x /path/to/directoryQ5:特殊权限的数字是怎么算的?
| 特殊权限 | 数字 | 写法示例 |
|---|---|---|
| SUID | 4 | chmod 4755 file |
| SGID | 2 | chmod 2755 dir |
| Sticky Bit | 1 | chmod 1777 dir |
数字写法是把特殊权限数字放在普通权限数字的前面,如4755= SUID(4) + 755。
总结
恭喜你读完了本文!🎉 让我们用一张表回顾所有核心知识点:
| 命令/概念 | 作用 | 常用示例 | 注意事项 |
|---|---|---|---|
ls -l | 查看文件权限信息 | ls -l | 第一列是权限字符串 |
chmod | 修改文件/目录权限 | chmod 755 file | 拥有者自己就能改 |
chown | 修改文件拥有者(可同时改组) | sudo chown alice:devs file | 只有 root 能执行 |
chgrp | 修改文件所属组 | sudo chgrp devs file | 也可用chown :devs |
umask | 控制新文件的默认权限 | umask 022 | 修改后只对当前 Shell 有效 |
| SUID | 执行时以文件拥有者身份运行 | chmod 4755 /usr/bin/passwd | 有安全风险,谨慎使用 |
| SGID | 目录下新文件自动继承组 | chmod 2775 /data/shared | 团队协作目录必备 |
| Sticky Bit | 只能删除自己的文件 | chmod 1777 /tmp | 公共目录必备 |
权限数字速查表
| 数字 | 权限 | 用途 |
|---|---|---|
644 | rw-r--r-- | 普通文件默认值 |
755 | rwxr-xr-x | 可执行文件 / 目录默认值 |
600 | rw------- | 私密文件(SSH密钥等) |
700 | rwx------ | 私密目录 |
777 | rwxrwxrwx | ⚠️ 所有人全权限,慎用! |
📝下一篇预告:《Linux 文本编辑器 Vim 从入门到实用》—— 再也不用担心"怎么退出 Vim"了!
如果本文对你有帮助,欢迎点赞 👍 收藏 ⭐ 关注 ➕!
有任何问题欢迎在评论区留言,博主会及时回复 😊
关注我,持续更新「从零开始学习 Linux」系列教程!