/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}
🏆 本文收录于 《滚雪球学 Ubuntu》 专栏。 本专栏面向有一定计算机基础,但尚未系统学习 Linux / Ubuntu 的读者,采用“滚雪球式学习法”:先装好、再会用、再理解、再优化、再实战,带你从第一次进入 Ubuntu 桌面 / 终端开始,逐步掌握 Ubuntu 的日常使用、命令操作、软件安装、系统配置、开发环境搭建与服务器部署能力。 🎯 适合人群: Linux 初学者、Ubuntu 新手、计算机专业学生、后端 / 运维 / 测试入门同学、想搭建 Linux 开发环境的开发者、准备学习服务器部署的同学,以及想从 Windows 过渡到 Ubuntu 工作流的用户。
从“会打开终端”到“能管理系统”,从“复制命令”到“理解 Linux 思维”,这一次,我们不零散学,而是一路滚雪球! 🎉 限时福利:当前专栏活动中,一次订阅,终身阅读,后续更新章节全部免费解锁 👉 立即查看 👈️
演示环境说明:
- 开发工具:Visual Studio Code / JetBrains 系列 IDE / Vim / Nano
- Ubuntu版本:Ubuntu 22.04 LTS / Ubuntu 24.04 LTS,推荐 Ubuntu 24.04 LTS
- Linux内核版本:Linux Kernel 6.x 或更高
- 终端环境:Bash / Zsh
- 包管理工具:APT / Snap / Flatpak
- 远程连接工具:OpenSSH / Windows Terminal / MobaXterm / Termius
- 虚拟化环境:VMware Workstation / VirtualBox / WSL2 / 云服务器
- 容器环境:Docker / Docker Compose
- 操作系统:Ubuntu Desktop / Ubuntu Server
全文目录:
-
- 一、前言:权限体系里那个\”被遗忘的角落\”
- 二、本节要解决什么问题
- 三、回顾:Linux 权限体系基础
-
- 3.1 标准的九位权限
- 3.2 权限模型的局限性
- 四、特殊权限的全景概览
- 五、SUID:以文件属主身份执行
-
- 5.1 什么是 SUID
- 5.2 SUID 的工作机制
- 5.3 SUID 的典型案例:passwd 命令
- 5.4 如何设置和查看 SUID
- 5.5 SUID 的安全风险
- 5.6 SUID 在目录上没有意义
- 六、SGID:以文件属组身份执行,以及目录协作神器
-
- 6.1 什么是 SGID
- 6.2 SGID 作用于可执行文件
- 6.3 SGID 作用于目录:这才是日常用得最多的场景
- 6.4 如何设置和查看 SGID
- 6.5 SGID 在团队协作中的实际价值
- 七、Sticky Bit:谁的文件只有谁能删
-
- 7.1 什么是 Sticky Bit
- 7.2 Sticky Bit 最经典的案例:/tmp 目录
- 7.3 如何设置和查看 Sticky Bit
- 7.4 Sticky Bit 的实际应用场景
- 八、特殊权限的数字表示法
- 九、实验环境准备
- 十、案例一:理解 SUID 的运行机制(入门级)
-
- 案例目标
- 步骤一:观察系统中已有的 SUID 文件
- 步骤二:创建一个简单的 SUID 演示程序
- 案例一命令解析
- 十一、案例二:用 SGID 搭建多人协作目录(真实开发场景)
-
- 案例目标
- 背景描述
- 步骤一:不使用 SGID 的问题复现
- 步骤二:创建正确的 SGID 协作目录
- 步骤三:添加第三个用户 carol 并验证
- 步骤四:处理 umask 带来的潜在问题
- 案例二命令解析
- 十二、案例三:Sticky Bit + SGID 构建工程级共享目录(运维增强)
-
- 案例目标
- 背景描述
- 步骤一:准备用户和组
- 步骤二:创建 Sticky Bit + SGID 目录
- 步骤三:验证行为
- 步骤四:配置安全加固——监控特殊权限文件变化
- 案例三命令解析
- 十三、特殊权限的组合使用与流程图解析
- 十四、核心命令与配置解析
-
- chmod 设置特殊权限
- ls 和 stat 查看特殊权限
- find 查找特殊权限文件
- 十五、查找系统中已设置特殊权限的文件
- 十六、常见问题与踩坑总结
-
- Q1:为什么我设置了 SUID,但用户执行后还是没有提权效果?
- Q2:SGID 设置了,为什么新建文件的属组还是我自己的主组?
- Q3:Sticky Bit 设置了,但 root 用户还是能删除我的文件?
- Q4:chmod -R 2775 /data/project 会不会把文件也设置 SGID?
- Q5:为什么 /tmp 目录的权限是 1777 而不是 1775?
- Q6:SUID 和 sudo 有什么关系?
- Q7:我在自己的程序里用了 SUID,部署到 Docker 容器里有效吗?
- Q8:看到 ls -l 输出里有 \’T\’(大写),是什么意思?
- Q9:SUID 对 shell 脚本真的完全无效吗?
- Q10:chmod 修改了权限,重启系统后权限还在吗?
- 十七、安全审计与特殊权限的生产实践
-
- 17.1 建立 SUID 文件基线
- 17.2 定期安全扫描与告警
- 17.3 最小化 SUID 原则
- 十八、最佳实践建议
-
- 关于 SUID
- 关于 SGID
- 关于 Sticky Bit
- 关于数字权限记忆
- 关于安全审计
- 十九、扩展知识:capabilities 机制——SUID 的现代替代方案
-
- 19.1 什么是 Linux Capabilities
- 19.2 ping 从 SUID 迁移到 Capabilities 的案例
- 19.3 如何给程序设置 Capabilities
- 19.4 SUID vs Capabilities:怎么选
- 二十、完整操作流程回顾
- 二十一、总结与下节预告
-
- 本节学到了什么
- 学习路径建议
- 一点学习心得
- 🧧 学习福利 · 限时开放 🧧
- 🫵 Who am I?
一、前言:权限体系里那个\”被遗忘的角落\”
学 Linux 权限的时候,绝大多数人都能很快掌握 rwx 这三个字母的含义——读、写、执行,这没什么难的。但如果你仔细观察过系统中某些文件的权限输出,会发现有时候那九个字母里会出现一些奇怪的符号:
-rwsr-xr-x 1 root root 68208 Mar 14 2024 /usr/bin/passwd
drwxrwsr-x 2 root staff 4096 Jun 1 09:12 /var/local
drwxrwxrwt 10 root root 4096 Jun 10 08:45 /tmp
看到了吗?那个 s,那个 t——它们不是普通的读写执行权限,而是 Linux 权限体系里的特殊权限位,也叫\”特殊文件权限\”。
我第一次看到 /usr/bin/passwd 上面的那个 s 的时候,完全没有意识到它的存在。那会儿刚开始用 Ubuntu,只知道 chmod 755 和 chmod 644,觉得权限就那么回事。直到有一次在自己搭建的文件共享目录里,发现不同用户创建的文件互相删不掉,也改不了,翻来覆去排查才发现是 Sticky Bit 的问题——那才第一次认真去看这三个特殊权限到底是干什么的。
说实话,SUID、SGID 和 Sticky Bit 是 Linux 权限体系里比





