当前位置:首页>Linux>Linux 文件权限与用户管理:深入原理与实践指南

Linux 文件权限与用户管理:深入原理与实践指南

  • 2026-09-03 20:51:56
Linux 文件权限与用户管理:深入原理与实践指南

引言:为什么理解 Linux 权限至关重要?

在现代软件部署架构中,Linux 几乎是服务器端操作系统的绝对主流。无论是运行 Java 应用的 Tomcat、Spring Boot 内嵌容器,还是 Kafka、Redis、MySQL 等中间件,它们都运行在 Linux 环境下。而这些服务能否安全、稳定、高效地运行,很大程度上依赖于底层文件系统的权限控制和用户隔离机制。

一个常见的生产事故场景是:开发人员将应用日志目录权限设为 777,导致任意用户可写入甚至删除日志;或者数据库配置文件被错误地赋予了全局读权限,造成敏感信息泄露。这些问题的根源,往往是对 Linux 权限模型理解不深。

本文将从零开始,系统性地讲解 Linux 的文件权限体系、用户与组管理、特殊权限位(SUID/SGID/Sticky Bit)、ACL 扩展权限、umask 机制、以及在容器化时代(如 Docker)中的权限实践。


第一章:Linux 文件权限基础模型

1.1 三元权限结构:User / Group / Others

Linux 的权限模型基于“三元主体”设计:

  • User (Owner):
    文件的创建者或所有者
  • Group:
    文件所属的用户组
  • Others:
    既不是所有者也不在所属组中的其他用户

每个主体拥有三种基本权限:

权限
符号
数值
含义(文件)
含义(目录)
读
r
4
可查看内容
可列出目录内容 (ls)
写
w
2
可修改内容
可创建/删除文件 (touch, rm)
执行
x
1
可作为程序运行
可进入目录 (cd)

⚠️ 注意:对目录而言,执行权限(x)是访问的前提。没有 x 权限,即使有 r 权限也无法 ls 目录内容(会提示 "Permission denied")。

1.2 权限表示法:符号 vs 数值

符号表示法(Symbolic Notation)

-rwxr-xr-- 1 alice dev 1024 Feb 21 15:35 app.jar

分解如下:

[文件类型][User][Group][Others]    -      rwx    r-x     r--
  • 首字符 - 表示普通文件(d=目录,l=软链接,c=字符设备等)
  • rwx:所有者有读、写、执行权限
  • r-x:组成员有读、执行权限(无写)
  • r--:其他用户仅有读权限

数值表示法(Octal Notation)

每组权限可用三位二进制表示,再转为八进制:

  • rwx = 111₂ = 7₈
  • r-x = 101₂ = 5₈
  • r-- = 100₂ = 4₈

因此 rwxr-xr-- = 754

常用权限组合:

场景
推荐权限
说明
可执行脚本
755
所有者可改,他人可读可执行
配置文件
644
所有者可改,他人只读
私密文件
600
仅所有者可读写
Web 根目录
755
允许 Web 服务器进入
日志目录
750
组内可写,外部不可见

1.3 查看与修改权限

查看权限

ls -l filename          # 查看单个文件ls -ld dirname          # 查看目录自身权限(非内容)stat filename           # 显示更详细信息(含 inode、访问时间等)

修改权限:`chmod`

# 符号模式chmod u+x script.sh     # 所有者加执行chmod g-w file.txt      # 组移除写权限chmod o=r file.conf     # 其他用户设为只读chmod a+r public.txt    # 所有用户加读(a=all)# 数值模式chmod 755 deploy.shchmod 644 config.yamlchmod 600 private.key

💡 提示:chmod -R 可递归修改目录及子项,但需谨慎使用,避免误授高权限。

修改所有者与组:`chown` / `chgrp`

chown alice:dev app.jar       # 同时改用户和组chown alice app.jar           # 仅改用户chgrp ops app.jar             # 仅改组chown :ops app.jar            # 仅改组(冒号前留空)

Linux 权限三元模型


第二章:用户与组管理机制

2.1 用户账户的本质

在 Linux 中,每个用户由一个唯一的 用户 ID(UID) 标识,而非用户名。用户名只是 UID 的别名,便于人类记忆。

关键配置文件:

  • /etc/passwd:存储用户基本信息(不含密码)
  • /etc/shadow:存储加密后的密码(仅 root 可读)
  • /etc/group:存储组信息
  • /etc/gshadow:存储组密码(极少使用)

`/etc/passwd` 结构(以冒号分隔)

alice:x:1001:1001:Alice Smith:/home/alice:/bin/bash

字段含义:

  1. 用户名
  2. 密码占位符(x 表示密码在 /etc/shadow)
  3. UID
  4. GID(主组 ID)
  5. 用户描述(GECOS)
  6. 家目录
  7. 登录 Shell

📌 默认 UID 范围:

  • 0:root(超级用户)
  • 1–999:系统用户(服务账户)
  • 1000+:普通用户

2.2 创建与管理用户

创建用户

# 基础创建(自动创建家目录、设置默认 shell)sudo useradd -m alice# 指定 UID、家目录、shellsudo useradd -u 2000 -d /opt/alice -s /bin/zsh -m bob# 创建但不设密码(常用于服务账户)sudo useradd --system --no-create-home nginx

设置密码

sudo passwd alice        # 交互式输入echo"password" | sudo passwd --stdin alice  # 非交互(某些系统支持)

删除用户

sudo userdel alice          # 保留家目录sudo userdel -r alice       # 同时删除家目录和邮件池

2.3 用户组管理

每个用户有一个 主组(Primary Group),还可加入多个 附加组(Supplementary Groups)。

创建组

sudo groupadd developerssudo groupadd -g 3000 ops    # 指定 GID

将用户加入组

# 方法1:usermod(永久生效,需重新登录)sudo usermod -aG developers alice# 方法2:临时加入(当前会话有效)newgrp developers

⚠️ -aG 中的 -a(append)极其重要!若省略,会覆盖用户原有附加组。

查看用户所属组

groups alice        # 查看 alice 的所有组id alice            # 显示 UID、GID、附加组

用户与组关系模型


第三章:特殊权限位(Special Permission Bits)

除了基本的 r/w/x,Linux 还提供三种特殊权限位,用于实现高级控制。

3.1 SUID(Set User ID)

  • 作用:
    当可执行文件设置了 SUID,任何用户执行它时,进程将以文件所有者的身份运行。
  • 典型应用:
    passwd 命令(普通用户可修改 /etc/shadow)
ls -l /usr/bin/passwd# -rwsr-xr-x 1 root root ... passwd#     ↑#     s 表示 SUID 已设置
  • 设置方式:

chmod u+s programchmod 4755 program   # 4 = SUID

🔒 安全风险:若 SUID 程序存在漏洞,攻击者可获得所有者权限(通常是 root)。切勿随意给自定义程序加 SUID!

3.2 SGID(Set Group ID)

  • 作用(文件):
    执行时以文件所属组身份运行(较少用)
  • 作用(目录):
    在该目录下创建的文件/子目录自动继承父目录的组
mkdir sharedchgrp developers sharedchmod g+s shared        # 设置 SGIDchmod 2775 shared       # 2 = SGID# 此后,alice 和 bob 在 shared 中创建的文件都属于 developers 组
  • 设置方式:

chmod g+s file_or_dirchmod 2755 dir

3.3 Sticky Bit(粘滞位)

  • 作用:
    仅用于目录。设置后,只有文件所有者或 root 才能删除该目录下的文件,即使其他用户有写权限。
  • 典型应用:
    /tmp 目录(防止用户互相删除文件)
ls -ld /tmp# drwxrwxrwt 10 root root ... /tmp#           ↑#           t 表示 Sticky Bit
  • 设置方式:

chmod +t directorychmod 1777 /tmp

特殊权限位对比

最新文章

随机文章