Linux用户权限与文件权限完整体系|账号管控、Sudo提权、rwx、特殊权限全解
Linux是典型的多用户多任务操作系统。权限体系分为两大模块:身份主体(用户、用户组)和资源客体(文件、目录权限属性)。
很多新手操作服务器习惯直接使用root做所有操作,线上随便执行chmod 777,遇到权限报错只会盲目加权限,完全不理解底层逻辑,会带来极高的安全风险。
一、Linux用户身份底层概念
1.1 用户分类
系统依靠**UID(用户ID)**识别用户身份,而非用户名,用户分为三类:
| | |
|---|
| | 拥有系统全部权限,可执行任意命令、修改任意文件。生产环境禁止日常登录使用 |
| | 无交互式登录Shell,专供后台服务进程使用,例如nginx、mysql。服务使用独立系统账号运行,降低入侵风险 |
| | 人为创建的登录账号,权限受限,默认仅对自己家目录拥有完整读写权限,用于运维人员日常登录操作 |
1.2 用户核心配置文件
/etc/passwd —— 用户信息主文件
每一行代表一个用户,冒号:分割7个字段:
用户名:密码占位符:UID:GID:注释信息:家目录:登录shell
x:密码占位符,真实加密密码不存于此,存储在/etc/shadowGID- 家目录:普通用户默认
/home/用户名;root家目录/root - 登录shell:
/bin/bash允许登录;/sbin/nologin禁止交互式登录(系统服务账号)
/etc/shadow —— 用户密码安全文件
保存加密后的用户密码、密码有效期、过期策略;文件权限严格控制,仅root可读,是账号安全管控核心文件。
二、用户组底层原理
用户组是用户的集合,实现批量权限管理。把多个用户加入同一组,给组配置权限,组内所有用户自动继承权限。
- 主组(初始组):每个用户必有一个主组,创建用户时自动生成,对应用户GID。
- 附加组:一个用户可以归属多个附加组,实现多业务权限复用。
核心配置文件:
三、用户与用户组全套实操命令
账号修改类操作大多需要root权限执行。
3.1 用户管理:useradd / passwd / usermod / userdel
# 创建普通用户,自动生成家目录与主组useradd user01# 创建用户,指定UID与附加组useradd -u 1200 -G wheel user02# 设置用户密码,root可给任意用户设置密码passwd user01# 普通用户不加用户名,仅修改自身密码passwd# usermod 修改已有用户属性# -aG 追加附加组,千万不要直接用-G,会覆盖原有全部附加组usermod -aG wheel user01# 修改shell为不可登录,转为程序账号usermod -s /sbin/nologin user01# 删除用户userdel user01# 删除用户,保留家目录userdel -r user01# 删除用户同时删除家目录与邮件
3.2 用户组管理:groupadd / groupdel / groupmod
# 创建用户组groupadd ops# 删除用户组(组内不能存在有效用户)groupdel ops# 修改组名称groupmod -n new_ops ops
3.3 身份查询命令
whoami# 查看当前登录用户id# 查看当前用户UID、GID、全部所属组id user01# 查看指定用户身份信息
四、Sudo提权体系|生产最小权限核心
4.1 sudo的作用
root权限风险巨大,运维日常使用普通账号,遇到高权限操作,通过sudo临时借用root身份执行单条命令,输入自己账号密码完成校验,所有操作留有审计日志,实现最小权限原则。
sudo不会把普通用户变成root,只是授予部分高权限指令执行权限。
4.2 sudo配置与编辑工具
配置文件路径:/etc/sudoers
禁止直接vim编辑,语法错误会直接导致sudo整体失效。专用编辑命令:visudo,保存前自动校验语法。
4.3 配置语法
示例:
# user01可以在本机以root执行全部命令(生产尽量避免)user01 ALL=(ALL) ALL# 最小权限:仅允许管理nginx服务user01 ALL=(ALL) /usr/bin/systemctl start nginx,/usr/bin/systemctl stop nginx,/usr/bin/systemctl restart nginx,/usr/bin/systemctl status nginx
4.4 wheel用户组(CentOS/RHEL系列)
系统内置wheel组,组内成员默认拥有完整sudo权限。
# 将用户加入wheel附加组,获得完整sudo能力usermod -aG wheel user01
4.5 sudo日常实操
# 普通用户使用sudo执行高权限命令sudo cat /etc/shadow# 查看当前账号拥有的sudo授权sudo -l
sudo操作日志记录:/var/log/secure,可追溯谁执行过哪些高权限操作。
4.6 sudo生产最佳实践
- 业务服务禁止直接使用root运行,使用独立系统账号
综合案例:新建运维账号授予nginx管理权限
# 创建普通用户useradd opspasswd ops# visudo增加配置ops ALL=(ALL) /usr/bin/systemctl start nginx,/usr/bin/systemctl stop nginx,/usr/bin/systemctl restart nginx,/usr/bin/systemctl status nginx# 切换账号测试su - opssudo systemctl restart nginxsudo -l
五、文件系统基础权限rwx|9位权限位模型
身份主体讲完之后,进入文件与目录本身的权限属性。
执行ls -l可以查看权限字符串:
-rw-r--r-- 1 root root 124 Aug 20 10:00 test.conf
- 后面9位分为三组,每组3位:u属主(user)|g属组(group)|o其他用户(other)
root超级用户不受这套权限规则限制。
5.1 rwx在文件、目录语义完全不同
普通文件:
| |
|---|
| |
| 修改覆盖文件内容;删除文件不由本w控制,由父目录权限决定 |
| 可把文件当作脚本/二进制程序执行;没有x权限脚本无法运行 |
目录:
目录存储内部文件列表,权限控制访问行为。
| |
|---|
| |
| 目录内新建、删除、重命名文件;仅有w没有x,w权限完全失效 |
| 允许cd进入目录,访问目录内部元数据;目录必须具备x权限才有访问意义 |
⚠️ 生产高频坑:目录只给w不给x,权限异常失效;目录常规组合r+x。
六、chmod符号权限 & 数字八进制权限
6.1 符号模式chmod
u/g/o/a对象;+增加、-移除、=直接设置权限
chmod u+x test.shchmod o-w test.confchmod u=rw,g=r,o=r test.conf
6.2 数字权限原理
r=4,w=2,x=1,每组权限数值相加,三组数字依次对应u g o。
示例:
chmod 644 test.conf# 6 → u:rw-# 4 → g:r--# 4 → o:r--
企业标准权限参考:
⚠️ 严禁线上随意chmod 777,所有用户读写执行,存在严重安全隐患。
七、chown修改属主、属组
chmod修改权限;chown修改文件归属用户与组。
# 修改属主chown user01 test.txt# 同时修改属主+属组chown user01:ops test.txt# -R 递归修改目录下所有子文件子目录chown -R user01:ops /data/project/
⚠️ -R递归操作谨慎执行,不要递归修改系统目录归属,会直接造成系统故障。
八、三大特殊权限SUID / SGID / Sticky Bit
9位基础权限之外的高级权限,面试高频考点。
8.1 SUID 设置用户ID(仅二进制可执行文件)
- 典型案例:
/usr/bin/passwd,普通用户修改密码需要读写root专属的/etc/shadow,依靠SUID临时拿到root能力
chmod u+s /bin/mycmdchmod u-s /bin/mycmd
🚨 安全警告:不要随意给自定义程序设置SUID,极易引发提权漏洞。
8.2 SGID 设置组ID(文件、目录均可,目录场景更常用)
- 目录:目录下新建文件/子目录,自动继承目录的属组,而不是创建用户默认组
chmod g+s /data/share_opschmod g-s /data/share_ops
8.3 Sticky Bit 粘滞位(仅对目录生效)
- 效果:目录拥有w写入权限,开启粘滞位后,用户只能删除自己创建的文件,不能删除别人的文件
chmod o+t /data/publicchmod o-t /data/public
业务场景:公共上传目录,防止用户误删他人业务文件。
九、umask权限掩码|新建文件目录默认权限
新建文件、目录不会直接是777,会被umask扣除部分权限:
示例umask=022:
umask控制系统新建资源的默认安全权限,root与普通用户默认umask不同。
- 永久修改:写入
~/.bashrc或者/etc/profile
十、案例
案例1:多人协作共享目录
需求:/data/ops_share,ops组内成员可读写,不可删除别人文件;新建文件自动归属ops组。
mkdir -p /data/ops_sharechown :ops /data/ops_share# 2770 数字特殊位:2代表SGID,开启Sticky;权限770仅属主属组访问chmod 2770 /data/ops_share
案例2:脚本权限修复
chmod 755 deploy.shchown ops:ops deploy.sh
觉得有收获,欢迎点赞+在看+关注,系统化从零吃透Linux运维!