
文章目录1. 用户角色与提权机制root / 普通用户 / sudo1.1 root 用户超级管理员 / God Mode1.2 普通用户Standard User1.3 sudo 命令SuperUser Do2. 用户与用户组User Group2.1 关键系统文件2.2 用户与组管理命令实操3. 深入理解 Linux 文件权限3.1 权限位r, w, x的含义4. 修改权限与所有者4.1 修改文件权限chmod1. 数字表示法最常用2. 符号表示法4.2 修改文件所有者与所属组chown5. 生产环境常见安全实战场景部署一个部署脚本 deploy.sh6. 总结在 Linux 系统中权限与用户管理是保证系统安全与稳定运行的基石。Linux 是一个天然的多用户、多任务操作系统。不同的用户拥有不同的身份而系统通过一套严密的文件权限机制精确控制每个用户能够对文件或目录执行哪些操作读取、修改还是执行。本文将带你理清用户/用户组模型并掌握文件权限的查看、修改与实战运用。1. 用户角色与提权机制root / 普通用户 / sudo在深入具体的权限位之前我们需要先搞清楚 Linux 中三种核心的用户身份与协作关系。这三者构成了 Linux 权限体系的基础框架理解它们之间的区别与联系是掌握整个权限管理的前提。┌─────────────────────────────────────────┐ │ root 用户 (超级管理员) │ │ UID 0, 拥有绝对掌控权 │ └────────────────────┬────────────────────┘ │ (通过 sudo 授权高危命令) │ ┌────────────────────▼────────────────────┐ │ 普通用户 (受限环境) │ │ UID 1000, 仅能修改自己的家目录与文件 │ └─────────────────────────────────────────┘1.1 root 用户超级管理员 / God Mode标识用户 IDUID固定为0命令行提示符通常是#。这是系统中最特殊的用户UID 为 0 意味着它拥有对所有文件和进程的完全控制权。权限无限权限。可以读取、修改、删除系统中的任何文件可以强行终止任何进程甚至可以一条命令抹掉整个系统。无论是系统配置文件、其他用户的私有数据还是内核级别的操作root 都可以执行。风险没有撤销按钮。敲错一个空格如rm -rf / tmp/就可能导致生产环境彻底崩溃。更严重的是如果 root 账号被黑客攻破攻击者将获得整个系统的完全控制权可以植入后门、窃取数据、破坏服务后果不堪设想。使用建议在日常操作中应尽量避免直接使用 root 登录。即使是系统管理员也建议通过普通用户身份配合sudo来执行需要特权的命令这样既能完成任务又能保留操作审计记录。1.2 普通用户Standard User标识UID 通常 1000命令行提示符通常是$。系统安装时创建的第一个用户通常就是普通用户后续添加的用户也默认属于此类。权限受限权限。默认只能在其家目录如/home/alex和/tmp目录下自由创建/修改文件。无法修改系统核心配置如/etc、无法安装全局软件、无法重启系统服务。这些操作都需要通过sudo提权才能完成。目的实现环境隔离防止单个用户的误操作或恶意行为破坏整个操作系统。在多用户服务器上每个用户都拥有独立的家目录和私有文件彼此之间互不干扰这大大提升了系统的稳定性和安全性。实际场景在开发环境中普通用户可以在自己的家目录下自由安装开发工具、创建项目文件、运行测试程序而不会影响系统其他部分。即使某个用户的操作导致其家目录损坏也不会影响其他用户和系统核心功能。1.3 sudo 命令SuperUser Do定位一种安全提权机制。它架起了普通用户与 root 权限之间的桥梁让系统管理变得更加灵活和安全。作用允许被授权的普通用户以root或其他特权用户的身份来执行某一条特定的命令而无需知道 root 的真实密码。这意味着你可以精确控制哪些用户能执行哪些特权命令而不是把所有 root 密码告诉所有人。安全机制执行sudo时系统提示输入的是普通用户自己的密码且密码在一定时间内默认 15 分钟会被缓存无需频繁重复输入。这个超时时间可以通过修改/etc/sudoers文件中的timestamp_timeout参数来调整。权限控制通过编辑/etc/sudoers文件建议使用visudo命令管理员可以精细控制每个用户的 sudo 权限。例如可以只允许某个用户执行特定的命令而不授予其完整的 root 权限。审计追踪所有sudo执行的操作都会被记录在系统日志中如/var/log/auth.log管理员可以随时查看谁在什么时候执行了什么特权操作这为安全审计提供了重要依据。最佳实践在生产环境中“平时用普通用户敏感操作用 sudo禁用 root 直接远程登录”是最核心的安全准则。具体来说日常开发、文件操作使用普通用户需要安装软件、修改系统配置时使用sudo同时修改 SSH 配置/etc/ssh/sshd_config中的PermitRootLogin no彻底禁止 root 远程登录从源头上降低安全风险。2. 用户与用户组User GroupLinux 将访问系统的个体划分为三种主体角色用户User / Owner文件的拥有者通常是创建该文件的用户。用户组Group具有相同权限需求的多个用户的集合。将权限赋予用户组可以方便地进行批量权限管理。其他人Others既不是文件拥有者也不属于该文件所属用户组的系统其他所有用户。除此之外系统中还有一个最高特权身份root超级管理员。root拥有系统的绝对控制权可以跨越绝大多数普通权限限制。2.1 关键系统文件Linux 将用户和组的信息存储在以下配置文件中/etc/passwd存储用户账号的基本信息用户名、UID、默认 Shell 等。/etc/group存储用户组的信息组名、GID、组成员等。/etc/shadow存储加密后的用户密码仅root可读。2.2 用户与组管理命令实操实操案例 1创建用户并将其加入开发组# 1. 创建一个新的用户组devteamsudogroupadddevteam# 2. 创建新用户 alex并将其加入 devteam 组同时为其创建家目录sudouseradd-m-gdevteam alex# 3. 为 alex 设置密码sudopasswdalex# 4. 查看 alex 的身份信息UID、GID 及所属组idalex# 输出示例: uid1001(alex) gid1001(devteam) groups1001(devteam)# 5. 将 alex 赋予 sudo 权限将其加入 sudo 组sudousermod-aGsudoalex3. 深入理解 Linux 文件权限使用ls -l命令查看文件或目录时输出的第一列就是权限字符串。ls-l/var/www/html/index.html# 输出: -rwxr-xr-- 1 alex devteam 2048 Aug 27 10:00 /var/www/html/index.html将权限字符串-rwxr-xr--拆解如下- rwx r-x r-- │ │ │ └── [第 7-9 位] 其他人 (Others) 的权限: 可读 (r) │ │ └─────── [第 4-6 位] 所属组 (Group) 的权限: 可读 (r)、可执行 (x) │ └───────────── [第 1-3 位] 所有者 (User/Owner) 的权限: 可读 (r)、可写 (w)、可执行 (x) └────────────────── [第 0 位] 文件类型: - 表示普通文件, d 表示目录, l 表示软链接3.1 权限位r, w, x的含义读r、写w、执行x在普通文件与目录上的含义完全不同这是初学者最容易混淆的地方权限符号对应数值对普通文件的含义对目录的含义r(Read)4可以查看文件内容如cat、less可以列出目录内的文件列表如lsw(Write)2可以修改文件内容如vim可以在目录内创建、删除、重命名文件x(Execute)1可以作为程序/脚本执行如./script.sh可以进入该目录如cd以及访问其内部文件的属性⚠️重要细节如果对一个目录只有r权限而没有x权限你能看到目录下的文件名但无法进入该目录也无法查看文件的具体属性或内容。4. 修改权限与所有者4.1 修改文件权限chmod修改权限有两种常用方式数字法和字母法。1. 数字表示法最常用将r4, w2, x1相加算出每一组的权值范围 0~7rwx 4 2 1 7全权限rw- 4 2 0 6读写r-x 4 1 0 5读与执行r-- 4 0 0 4只读# 将 index.html 设置为所有者可读写执行(7)所属组可读执行(5)其他人只读(4)chmod754index.html# 常用将脚本设置为所有者可读写执行其他人可读执行chmod755deploy.sh# 常用将私钥文件设置为仅所有者可读写其他人无任何权限SSH 私钥硬性要求chmod600id_rsa2. 符号表示法角色u(user),g(group),o(others),a(all)操作(增加),-(减少),(赋予)# 为文件所有者增加执行权限chmodux build.sh# 移除其他人对该文件的写权限chmodo-w config.json# 递归-R将整个项目目录的所有者权限设为读写其他人无权限chmod-RurwX,goproject/4.2 修改文件所有者与所属组chown只有文件所有者或root用户才能修改文件的属主或属组。实操案例 2 Web 服务器目录权限重置# 1. 将 /var/www/html 目录及其内部所有文件的所有者改为 www-data所属组改为 devteamsudochown-Rwww-data:devteam /var/www/html# 2. 仅修改所属组为 devteamsudochown:devteam /var/www/html/index.html5. 生产环境常见安全实战场景部署一个部署脚本deploy.sh当你新建一个 Shell 脚本时默认通常是没有执行权限的touchdeploy.shls-ldeploy.sh# 输出: -rw-r--r-- 1 alex devteam 0 Aug 27 10:15 deploy.sh# 此时直接运行会报错: Permission denied (权限被拒绝)./deploy.sh# 赋予执行权限并再次运行chmodx deploy.sh ./deploy.sh# 运行成功6. 总结需求场景推荐命令 / 权限值说明赋予脚本执行权限chmod x script.sh或chmod 755保证当前用户或所有人能够直接./script.sh运行保护敏感配置文件/密钥chmod 600 id_rsa/chmod 640 config.env防止敏感数据被其他人或组外成员读取修改网站静态资源归属sudo chown -R www-data:www-data /var/www让 Nginx/Apache 进程拥有对网页目录的访问权限解决 Permission denied排查ls -l查看当前身份对应的r/w/x权限优先通过chmod或chown精确赋权**切忌盲目chmod 777**安全提示不要给生产环境的文件随意使用chmod 777这会让所有用户都具备读、写、执行权限。按需赋权、最小权限原则才是保障 Linux 安全的核心。 感谢阅读想了解更多 我的博客网站 | 记录思考分享干货 我的个人主页 | 关于我、开源项目