🏆 本文收录于 《滚雪球学 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 学习中最绕不开的坎
- 二、本文要解决什么问题
- 三、Linux 权限模型的历史背景与设计哲学
- 3.1 多用户操作系统的起源
- 3.2 最小权限原则
- 3.3 Linux 权限模型的三个核心维度
- 四、核心概念:用户、用户组与文件所有权
- 4.1 用户(User)
- 4.2 用户组(Group)
- 4.3 文件的所有者与所属组
- 五、权限的三种类型与九位权限字符串
- 5.1 三种权限
- 5.2 三类对象
- 5.3 九位权限字符串
- 5.4 权限检查的顺序
- 六、实验环境准备
- 6.1 确认 Ubuntu 版本
- 6.2 创建实验目录
- 6.3 创建实验用的测试用户和用户组
- 七、案例一:认识权限——用 ls -l 读懂文件权限输出
- 7.1 基础权限查看
- 7.2 更详细的权限信息查看
- 7.3 查看隐藏文件的权限
- 7.4 案例一命令解析
- 八、案例二:修改权限——chmod、chown、chgrp 的真实使用场景
- 8.1 chmod:修改文件权限
- 符号模式
- 数字模式(八进制)
- 递归修改权限
- 8.2 chown:修改文件所有者
- 8.3 chgrp:单独修改所属组
- 8.4 真实场景:部署 Web 应用时的权限配置
- 8.5 案例二命令解析
- 九、案例三:工程化权限管理——多用户协作、服务部署与安全加固
- 9.1 场景描述
- 9.2 创建用户和用户组
- 9.3 创建项目目录结构并设置权限
- 9.4 设置 SGID 实现目录内文件自动继承组权限
- 9.5 配置 SSH 的权限要求
- 9.6 部署脚本中的权限检查
- 9.7 案例三命令解析
- 十、特殊权限:SUID、SGID 与 Sticky Bit
- 10.1 SUID(Set User ID)
- 10.2 SGID(Set Group ID)
- 10.3 Sticky Bit(粘滞位)
- 10.4 特殊权限总结
- 十一、数字权限(八进制)与符号权限的对照与选择
- 11.1 完整的权限数字对照表
- 11.2 常见权限组合速查
- 11.3 什么时候用符号模式,什么时候用数字模式
- 十二、权限模型流程图
- 12.1 Linux 权限检查流程
- 12.2 文件权限位的结构
- 12.3 chmod 操作流程
- 十三、ACL 扩展权限:当标准三元组不够用时
- 13.1 什么是 ACL
- 13.2 检查文件系统是否支持 ACL
- 13.3 安装和使用 ACL 工具
- 13.4 设置 ACL
- 13.5 删除 ACL
- 13.6 ACL 与标准权限的关系
- 十四、umask:新建文件时的默认权限从哪里来
- 14.1 umask 是什么
- 14.2 umask 的计算方式
- 14.3 修改 umask
- 14.4 服务器环境中 umask 的实践意义
- 十五、sudo 与 root:权限提升的正确姿势
- 15.1 sudo 的本质
- 15.2 sudo 的权限配置
- 15.3 su 与 sudo 的区别
- 15.4 权限提升流程图
- 十六、核心命令与配置解析汇总
- 16.1 权限相关命令速查
- 16.2 权限配置的关键配置文件
- 十七、常见问题与踩坑总结
- Q1:为什么我是文件所有者,但 ls -l 显示权限是 `---rwxrwx`,我反而没有权限?
- Q2:为什么 `chmod 777 /var/www/myapp` 之后,Nginx 还是报 Permission denied?
- Q3:`chmod -R 777 /opt/myapp` 执行完发现很多东西都乱了,怎么修复?
- Q4:为什么 SSH 登录时提示 "WARNING: UNPROTECTED PRIVATE KEY FILE!"?
- Q5:我新创建的文件为什么默认是 664 而不是 644?
- Q6:为什么把用户加入了用户组,但权限还是没变?
- Q7:为什么设置了 SUID 的脚本,普通用户运行时还是没有 root 权限?
- Q8:find / -perm -4000 找到了很多系统文件,需要把它们的 SUID 都去掉吗?
- Q9:sudo 和 su 有什么本质区别,什么时候该用哪个?
- Q10:生产服务器上,Web 目录权限应该怎么设置最合理?
- Q11:为什么 Linux 的 rm 命令不像 Windows 那样进入回收站,误删了能找回来吗?
- Q12:如何判断一个权限错误是因为文件权限不对,还是因为目录权限不对?
- 十八、Ubuntu 文件权限最佳实践
- 18.1 版本和环境选择
- 18.2 用户与权限设计原则
- 18.3 sudo 使用规范
- 18.4 文件权限配置规范
- 18.5 配置文件修改习惯
- 18.6 服务目录权限规划
- 18.7 安全审计建议
- 18.8 Docker 环境中的权限注意事项
- 18.9 故障排查思路
- 十九、扩展知识点
- 19.1 Linux Capabilities:比 SUID 更精细的权限控制
- 19.2 AppArmor:强制访问控制
- 19.3 文件不可变属性(chattr)
- 19.4 /proc 和 /sys 中的权限
- 二十、完整操作流程回顾
- 二十一、总结
- 🧧 学习福利 · 限时开放 🧧
- 🫵 Who am I?
一、前言:权限问题是 Linux 学习中最绕不开的坎
我在刚开始使用 Ubuntu 的时候,碰到最多的问题不是命令记不住,也不是软件装不上,而是各种各样的权限错误。
Permission denied。
这四个英文单词,相信任何一个学过 Linux 的人都不陌生。第一次看到这条报错时,很多人的第一反应是:在命令前面加一个sudo就完事了。这个操作有时候确实奏效,但这只是在蒙混过关,并没有真正理解权限是怎么工作的。更糟糕的是,有人为了彻底"解决"权限问题,直接把整个目录chmod 777,或者干脆一直用 root 用户操作。这种做法在自己的测试机上可能无所谓,但放在真实服务器上,轻则配置混乱,重则安全漏洞。
我见过不止一个开发同学,因为把 Web 服务的根目录设置成 777,结果被人上传了 WebShell,整台服务器沦陷。这不是危言耸听,而是真实发生过的事。
所以这篇文章,我想系统地把 Linux 的文件权限模型讲清楚。不是那种列出chmod语法就完事的讲法,而是从设计思想讲起,讲到实际的使用场景,讲到工程化的权限管理,讲到初学者最常犯的错误。
权限是 Linux 安全模型的基础,也是每一个使用 Ubuntu 的人都必须真正搞懂的知识。搞懂了它,你才能在 Ubuntu 的世界里走得更稳、更远。
二、本文要解决什么问题
在阅读这篇文章之前,先问问自己,下面这些问题你能不能清晰地回答出来: