cxl
Published on 2026-08-30 / 22 Visits
0
0

linux-权限

Linux 用户、用户组与权限:从入门到实践

理解 Linux 权限模型,是掌握 Linux 系统管理的基石

为什么需要理解 Linux 权限?

Linux 是一个多用户、多任务的操作系统。无论是服务器还是个人桌面,权限管理都直接关系到系统安全。想象一下:如果任何人都能修改系统配置文件,或者读取你的私人数据,后果将不堪设想(其实是在我使用过程当中记不起想着命令了—_—)。

Linux 权限模型的核心思想很简单:谁 可以对 什么资源 做 什么操作。

一、用户管理基础

1.1 用户相关文件

Linux 的用户信息存储在以下三个关键文件中:

文件 作用
/etc/passwd 存储用户账户信息
/etc/shadow 存储用户密码(加密形式)
/etc/group 存储用户组信息

查看用户信息的命令:

 # 查看当前登录用户
 whoami

 # 查看当前用户ID信息
 id

 # 查看所有用户
 cat /etc/passwd

 # 查看密码信息(需要root权限)
 sudo cat /etc/shadow

1.2 用户管理操作

创建用户

 # 基本创建
 sudo useradd alice

 # 指定选项创建(推荐)
 sudo useradd -m -s /bin/bash alice
 # -m: 创建家目录
 # -s: 指定默认shell

 # 设置密码
 sudo passwd alice

修改和删除用户

 # 修改用户信息
 sudo usermod -s /bin/zsh alice  # 修改shell
 sudo usermod -aG sudo alice     # 追加到sudo组

 # 删除用户
 sudo userdel -r alice  # -r: 同时删除家目录和邮件池

1.3 /etc/passwd 文件格式

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

各字段含义:

  1. 用户名
  2. 密码占位符(x表示密码存储在shadow中)
  3. UID(用户ID)
  4. GID(主组ID)
  5. 用户描述信息
  6. 家目录路径
  7. 登录Shell

二、用户组管理

2.1 用户组的作用

用户组方便管理员批量管理权限。例如:将开发人员加入 dev 组,统一赋予项目目录的读写权限。

2.2 组管理操作

 # 创建组
 sudo groupadd developers

 # 添加用户到组
 sudo usermod -aG developers alice

 # 从组中移除用户
 sudo gpasswd -d alice developers

 # 删除组
 sudo groupdel developers

 # 查看用户所属组
 groups alice
 # 或者
 id alice

2.3 主要组 vs 附加组

  • 主要组(Primary Group):用户在 /etc/passwd 中指定的组。用户创建文件时,默认所属组为主要组。
  • 附加组(Supplementary Groups):用户额外加入的组,用于获取额外权限。
 # 修改用户的主要组
 sudo usermod -g developers alice

三、Linux 权限模型

3.1 权限的三类对象

每个文件/目录有三种访问者:

角色 标识 说明
所有者 u (user) 文件创建者
所属组 g (group) 文件所属组的成员
其他人 o (other) 以上两者之外的任何人

3.2 权限的三种操作

权限 对文件的作用 对目录的作用
读 (r=4) 查看文件内容 列出目录内容
写 (w=2) 修改文件内容 创建/删除文件
执行 (x=1) 运行可执行文件 进入目录

3.3 查看权限

 ls -l
 # 输出示例:
 # -rw-r--r-- 1 alice developers 1024 Jan 15 10:00 file.txt
 # drwxr-x--- 2 alice developers 4096 Jan 15 10:00 folder/

权限字符串 -rw-r--r-- 分解:

 -  rw-  r--  r--
 │  │    │    │
 │  │    │    └── 其他人权限 (只读)
 │  │    └─────── 组权限 (只读)
 │  └──────────── 所有者权限 (读写)
 └─────────────── 文件类型 (-普通文件, d目录, l链接)

3.4 修改权限

符号模式:

 # 为所有者添加执行权限
 chmod u+x script.sh

 # 移除组的写权限
 chmod g-w file.txt

 # 为所有用户添加读权限
 chmod a+r file.txt

 # 设置精确权限(所有者读写,组读,其他人无权限)
 chmod u=rw,g=r,o= file.txt

数字模式(八进制):

 # 权限的数字表示
 # r=4, w=2, x=1
 # rwx = 7, r-x = 5, r-- = 4

 chmod 755 script.sh  # 所有者rwx,组r-x,其他人r-x
 chmod 644 file.txt   # 所有者rw-,组r--,其他人r--
 chmod 700 secret/    # 只有所有者可读写执行

3.5 修改所有者和组

 # 修改所有者
 sudo chown alice file.txt

 # 同时修改所有者和组
 sudo chown alice:developers file.txt

 # 递归修改目录
 sudo chown -R alice:developers /project/

四、特殊权限

4.1 SUID (Set User ID)

当可执行文件设置SUID位后,任何用户执行该文件时,都以文件所有者的身份运行。

 # 典型例子:/usr/bin/passwd
 ls -l /usr/bin/passwd
 # -rwsr-xr-x 1 root root ...

 # 设置SUID(在所有者执行权限位置显示s)
 chmod u+s /path/to/program
 chmod 4755 /path/to/program  # 4表示SUID

4.2 SGID (Set Group ID)

  • 作用于文件:以文件所属组的身份执行
  • 作用于目录:新创建的文件继承目录的所属组
 # 设置SGID(在组执行权限位置显示s)
 chmod g+s /shared/directory/
 chmod 2755 /shared/directory/

4.3 Sticky Bit

只对目录有效,防止用户删除其他人创建的文件(典型应用:/tmp)

 ls -ld /tmp
 # drwxrwxrwt 10 root root ...

 # 设置Sticky Bit(在其他执行权限位置显示t)
 chmod o+t /shared/temp/
 chmod 1777 /shared/temp/

五、实战场景

场景1:创建共享项目目录

 # 创建共享组
 sudo groupadd project_alpha

 # 将团队成员加入组
 sudo usermod -aG project_alpha alice
 sudo usermod -aG project_alpha bob

 # 创建项目目录
 sudo mkdir /srv/project_alpha

 # 设置权限
 sudo chown root:project_alpha /srv/project_alpha
 sudo chmod 2775 /srv/project_alpha
 # 2=SGID,确保新建文件继承组
 # 7=所有者rwx,7=组rwx,5=其他人r-x

场景2:安全部署Web应用

 # 文件权限原则:最小权限
 # Web目录权限示例

 # 所有者为Web用户,组为开发者
 sudo chown -R www-data:developers /var/www/myapp/

 # 目录:755 (所有者读写执行,其他人只读执行)
 find /var/www/myapp/ -type d -exec chmod 755 {} \;

 # 文件:644 (所有者读写,其他人只读)
 find /var/www/myapp/ -type f -exec chmod 644 {} \;

 # 上传目录需要写权限
 chmod 775 /var/www/myapp/uploads/

场景3:用户切换和权限提升

 # 切换用户(需要密码)
 su - alice

 # 以其他用户身份执行命令
 sudo -u alice whoami

 # 查看当前用户可执行的sudo命令
 sudo -l

 # 临时获取root shell
 sudo -i

六、常见问题排查

6.1 “Permission denied”

排查步骤:

  1. 检查你是谁:whoami
  2. 检查文件权限:ls -la
  3. 检查父目录权限(特别是执行权限)
  4. 检查文件是否被锁定:lsof

6.2 无法进入目录

进入目录需要执行权限(x),不只是读权限。

 # 修复:添加执行权限
 chmod +x /path/to/directory

6.3 新建文件权限不对

检查umask设置:

 # 查看当前umask
 umask
 # 022 表示新建文件权限为 755 (目录) / 644 (文件)

 # 临时设置
 umask 002  # 允许同组用户写

 # 永久设置(在 ~/.bashrc 中添加)
 echo "umask 002" >> ~/.bashrc

七、最佳实践总结

  1. 最小权限原则:只赋予完成任务所需的最小权限
  2. 定期审查:使用 last、lastlog、who 等命令监控用户活动
  3. 使用组管理:通过组管理权限,而非逐个用户设置
  4. 谨慎使用sudo:/etc/sudoers 配置要精细,避免 ALL=(ALL) ALL
  5. 定期修改密码:尤其是高权限账户
  6. 审计关键文件:/etc/passwd、/etc/shadow、/etc/sudoers 的变更

八、快速参考卡片

需求 命令
创建用户 sudo useradd -m -s /bin/bash username
删除用户 sudo userdel -r username
修改密码 sudo passwd username
创建组 sudo groupadd groupname
加入组 sudo usermod -aG groupname username
修改权限 chmod [ugo][±=][rwx] file
修改所有者和组 sudo chown user:group file
查看权限 ls -la
查看用户信息 id
切换用户 su - username
以root执行 sudo command

掌握了 Linux 用户、用户组和权限管理,你就拥有了构建安全、稳定系统的基础能力。在实际工作中,谨慎而合理地分配权限,是系统管理员最重要的职责之一。

本文是对 Linux 权限模型的系统性梳理,欢迎收藏和分享。如有任何问题或建议,欢迎在评论区讨论交流!


Comment