Linux 权限、用户、用户组内容介绍

前言

Linux 是一个多用户操作系统,权限体系是它安全机制的核心。服务器上多人协作、程序运行、文件访问控制,全都依赖用户、用户组和文件权限这套体系。很多新手在部署项目、启动服务、访问日志时经常遇到 Permission denied,本质都是权限没有理清楚。今天我们系统梳理 Linux 用户、用户组、文件权限、特殊权限以及权限修改实操。

一、用户与用户组基础

1. 用户是什么

Linux 下每个登录操作系统、执行程序的主体都是用户,每个用户都有唯一标识:UID(用户ID)。

  • root:超级管理员,UID=0,拥有系统最高权限,可以做任何操作
  • 普通用户:手动创建,UID一般从1000开始,权限受限,只能操作自己有权限的文件
  • 系统用户:给服务使用(nginx、mysql、www),一般不允许登录服务器,UID通常1~999

查看当前登录用户:

bash 复制代码
whoami

查看系统所有用户:

bash 复制代码
cat /etc/passwd

/etc/passwd 存储用户基础信息,每行格式:用户名:密码占位符:UID:GID:注释:家目录:登录shell

2. 用户组是什么

用户组(group)是用户的集合,方便批量授权。一个用户必须属于一个主组,同时可以加入多个附加组。

  • GID:用户组ID
  • 配置文件:/etc/group

查看所有用户组:

bash 复制代码
cat /etc/group

查看某个用户属于哪些组:

bash 复制代码
id username

3. 用户、用户组常用命令

用户操作
bash 复制代码
# 创建用户,自动创建同名组和家目录
useradd testuser
# 设置密码
passwd testuser
# 删除用户(-r 同时删除家目录和邮件)
userdel -r testuser
# 修改用户信息,比如修改用户名、附加组
usermod
用户组操作
bash 复制代码
# 创建用户组
groupadd dev
# 删除用户组
groupdel dev
# 将用户加入附加组
usermod -aG dev testuser
# 把用户从组移除
gpasswd -d testuser dev

重点:usermod -aG 的 -a 不能丢,不加 -a 会覆盖原有附加组!

二、Linux 文件基础权限

执行 ls -l 我们就能看到文件权限字符串,示例:

bash 复制代码
-rw-r--r--  1 root root  123 Oct 25 10:00 test.txt

第一位:文件类型

  • - 普通文件
  • d 目录
  • l 软链接
  • b 块设备、c字符设备

后面9位,分成3组,每组3位:属主权限 | 属组权限 | 其他用户权限

每组顺序固定:r 读 w 写 x 执行

符号 含义 文件 目录
r read 读 读取文件内容 列出目录里面的文件(ls)
w write 写 修改、覆盖文件 在目录新建、删除、重命名文件
x execute 执行 可以运行脚本/程序 进入目录(cd)

非常容易踩坑:目录必须有x权限才能cd进去,只有r没有x,只能看文件名,无法访问里面内容;目录的w权限可以删除里面文件,哪怕文件本身没有写权限!

数字权限(八进制权限,运维最常用)

r=4,w=2,x=1,权限相加得到数字:

  • rwx = 4+2+1 = 7
  • rw- = 4+2 = 6
  • r-- = 4
  • --- = 0

常见权限组合:

  • 644:文件默认推荐,属主读写,组和其他只读 -rw-r--r--
  • 755:目录/脚本推荐,属主读写执行,组和其他读、执行 drwxr-xr-x
  • 700:私密文件目录,仅属主可访问

修改权限 chmod

两种写法:符号模式 / 数字模式

bash 复制代码
# 数字方式(推荐)
chmod 644 test.txt
chmod 755 mydir

# 符号方式
# u属主 g属组 o其他 a全部
chmod u+x test.sh
chmod g-w test.txt
chmod a-r test.txt

# 递归修改目录下所有文件权限(-R)
chmod -R 755 mydir/

修改属主、属组 chown

chown 用来改变文件属于哪个用户、哪个组

bash 复制代码
# 修改属主
chown testuser test.txt
# 同时修改属主和属组
chown testuser:dev test.txt
# 递归修改目录
chown -R testuser:dev mydir/

三、三个特殊权限(SUID、SGID、Sticky位)

普通rwx之外还有3个高级权限,生产场景偶尔会用到

  1. SUID(4000) :文件执行时,以文件属主身份 运行,不是执行者身份
    • 典型例子 /usr/bin/passwd,普通用户可以改密码,本质就是SUID
    • 只对二进制程序生效,脚本无效
  2. SGID(2000)
    • 文件:同SUID,以属组身份运行
    • 目录:在这个目录新建文件,自动继承目录的属组(团队共享目录很适合)
  3. Sticky 粘滞位(1000) :目录开启后,用户只能删除自己创建的文件
    • 典型目录 /tmp,所有人都能读写,但不能删别人的临时文件
    • 标识:权限最后一位变成t,如 drwxrwxrwt

设置特殊权限示例:

bash 复制代码
chmod 4755 file    # SUID
chmod 2755 dir     # SGID
chmod 1777 /tmp    # Sticky

四、默认权限:umask

新建文件、目录不会直接是777,由umask掩码控制默认权限

  • 目录原始最大权限 777
  • 文件原始最大权限 666(默认新建文件没有执行权限,安全)
  • 最终权限 = 原始权限 - umask

查看umask:

bash 复制代码
umask

一般服务器默认 022

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

注意:umask是掩码,不是简单减法,是位运算,记住常用022、002即可。

五、实操避坑&常见问题

  1. Permission denied 排查思路
    ① 先看文件属主属组 ls -l
    ② 检查上级目录权限(能不能cd进去,有没有x权限!很多人忽略)
    ③ 确认当前用户是否在目标用户组里
  2. 不要随便给777权限!777代表所有人可读可写可执行,线上服务器尽量避免,安全风险极高
  3. chmod -R、chown -R 慎用,递归操作改错会大面积破坏系统权限
  4. 普通用户修改自己密码不需要root,修改别人密码必须root

六、小结

简单总结这套关系:

  • 用户:登录身份,UID标识
  • 用户组:批量管理一组用户,GID标识
  • 文件权限:分三块(u/g/o),rwx控制读写执行
  • chmod改权限,chown改归属,umask控制新建文件默认权限
  • SUID/SGID/Sticky是进阶特殊权限,适合共享目录、特殊程序场景

Linux权限没有想象复杂,但非常严谨。掌握这套体系,排查日志、部署项目、搭建共享目录、服务权限报错基本都能独立解决。

相关推荐
代码方舟1 小时前
零信任架构实战:基于天远企业二要素验证构建自动化小微快贷法人资质核验网关
运维·人工智能·架构·自动化
拂拉氏1 小时前
【知识讲解】 Linux信号的认识与使用
linux·信号
Web3&Basketball1 小时前
从0到1落地AI Agent沙箱隔离Docker实战:踩坑全记录
运维·docker·容器·agent·容器安全·沙箱隔离
无毁的湖光-Al1 小时前
高可用之路-观测篇-那些年遇到过的指标幻觉
linux·数据库·tcp
叼烟扛炮1 小时前
Linux 学习笔记(二十九):进程信号(上)—— 信号捕捉与异步魔法
linux·运维·笔记·学习·1024程序员节
lingran__1 小时前
Linux进程万字详解(四) | 进程地址空间深度剖析:虚拟内存、页表映射与缺页中断
linux·虚拟地址空间·虚拟内存·1024程序员节·页表·物理内存·缺页中断
wuminyu1 小时前
JVM规范学习总结-Class文件结构
java·linux·c语言·jvm·c++
m0_547486661 小时前
《Linux操作系统应用项目教程》全套PPT课件2026
linux·运维·操作系统
西索斯coding2 小时前
qwen3.8-max 和 minimax-m3 改后端仓库实测复核:补丁通过率与调用成本别急着排冠军
linux·运维·ubuntu·ai