当前位置:首页>Linux>还在用 root 操作服务器?Linux 权限体系一篇讲透,告别 chmod 777

还在用 root 操作服务器?Linux 权限体系一篇讲透,告别 chmod 777

  • 2026-09-10 23:49:11
还在用 root 操作服务器?Linux 权限体系一篇讲透,告别 chmod 777

Linux用户权限与文件权限完整体系|账号管控、Sudo提权、rwx、特殊权限全解

Linux是典型的多用户多任务操作系统。权限体系分为两大模块:身份主体(用户、用户组)和资源客体(文件、目录权限属性)。

很多新手操作服务器习惯直接使用root做所有操作,线上随便执行chmod 777,遇到权限报错只会盲目加权限,完全不理解底层逻辑,会带来极高的安全风险。


一、Linux用户身份底层概念

1.1 用户分类

系统依靠**UID(用户ID)**识别用户身份,而非用户名,用户分为三类:

用户类型
UID范围
特点
超级用户root
UID=0
拥有系统全部权限,可执行任意命令、修改任意文件。生产环境禁止日常登录使用
系统用户(程序用户)
UID 1-999
无交互式登录Shell,专供后台服务进程使用,例如nginx、mysql。服务使用独立系统账号运行,降低入侵风险
普通用户
UID ≥1000
人为创建的登录账号,权限受限,默认仅对自己家目录拥有完整读写权限,用于运维人员日常登录操作

1.2 用户核心配置文件

/etc/passwd —— 用户信息主文件

每一行代表一个用户,冒号:分割7个字段:

用户名:密码占位符:UID:GID:注释信息:家目录:登录shell
  • x
    :密码占位符,真实加密密码不存于此,存储在/etc/shadow
  • GID
    :对应用户初始用户组ID
  • 家目录:普通用户默认/home/用户名;root家目录/root
  • 登录shell:/bin/bash允许登录;/sbin/nologin禁止交互式登录(系统服务账号)

/etc/shadow —— 用户密码安全文件

保存加密后的用户密码、密码有效期、过期策略;文件权限严格控制,仅root可读,是账号安全管控核心文件。


二、用户组底层原理

用户组是用户的集合,实现批量权限管理。把多个用户加入同一组,给组配置权限,组内所有用户自动继承权限。

  • 主组(初始组):每个用户必有一个主组,创建用户时自动生成,对应用户GID。
  • 附加组:一个用户可以归属多个附加组,实现多业务权限复用。

核心配置文件:

  • /etc/group
    :全部用户组信息
  • /etc/gshadow
    :用户组密码,生产环境极少使用

三、用户与用户组全套实操命令

账号修改类操作大多需要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生产最佳实践

  1. 优先最小权限,尽量不要授予ALL全部命令权限
  2. 统一使用visudo编辑sudo配置
  3. 一人一号,禁止多人共用账号,便于审计
  4. 业务服务禁止直接使用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
  • 第一位代表文件类型:-普通文件、d目录、l软链接
  • 后面9位分为三组,每组3位:u属主(user)|g属组(group)|o其他用户(other)
    • u:文件拥有者
    • g:文件归属用户组,组内全部成员
    • o:既不是属主,也不在属组内的其余所有用户

root超级用户不受这套权限规则限制。

5.1 rwx在文件、目录语义完全不同

普通文件:

权限
作用
r
读取文件内容
w
修改覆盖文件内容;删除文件不由本w控制,由父目录权限决定
x
可把文件当作脚本/二进制程序执行;没有x权限脚本无法运行

目录:

目录存储内部文件列表,权限控制访问行为。

权限
作用
r
ls列出目录内文件名,但不能cd进入目录
w
目录内新建、删除、重命名文件;仅有w没有x,w权限完全失效
x
允许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。

示例:

  • rwx
     = 4+2+1 = 7
  • rw-
     = 4+2 = 6
  • r--
     = 4 = 4
chmod 644 test.conf# 6 → u:rw-# 4 → g:r--# 4 → o:r--

企业标准权限参考:

权限值
适用场景
644
普通配置文件
755
shell脚本可执行文件
700
私有目录

⚠️ 严禁线上随意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(仅二进制可执行文件)

  • 标识:属主执行位显示小写s
  • 效果:普通用户执行该程序时,临时获得文件属主身份
  • 典型案例:/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 粘滞位(仅对目录生效)

  • 标识:其他用户执行位显示小写t
  • 效果:目录拥有w写入权限,开启粘滞位后,用户只能删除自己创建的文件,不能删除别人的文件
  • 系统示例:/tmp临时目录
chmod o+t /data/publicchmod o-t /data/public

业务场景:公共上传目录,防止用户误删他人业务文件。


九、umask权限掩码|新建文件目录默认权限

新建文件、目录不会直接是777,会被umask扣除部分权限:

  • 目录最大初始权限:777
  • 文件最大初始权限:666(文件默认不带执行权限)
# 查看umask值umask

示例umask=022:

  • 目录:777-022 = 755
  • 文件:666-022 = 644

umask控制系统新建资源的默认安全权限,root与普通用户默认umask不同。

  • 临时修改:umask 027
  • 永久修改:写入~/.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运维!

最新文章

随机文章