author
type
Post
status
Published
date
Feb 16, 2026
slug
summary
tags
Linux
category
运维
icon
password
基本概念
在 Linux 中,每个进程都以某个用户身份运行,系统的资源访问控制依赖于“用户”和“组”的权限机制。
核心概念
名称 | 说明 |
UID | 用户 ID(User ID),系统识别用户的唯一数字标识。如 root 的 UID 是 0 |
GID | 组 ID(Group ID),用于标识主组或附加组 |
用户名 | 人类可读的名称(如 alice),对应一个 UID |
主组(Primary Group) | 用户默认归属的组,创建文件时自动设置为该组 |
附加组(Supplementary Group) | 可加入多个组以获取额外权限 |
示例: 用户devuser主组为developers,附加组包括docker,sudo—— 可运行 Docker 并提权执行sudo
用户相关文件
这些是系统中存储用户和组信息的核心配置文件:
文件路径 | 功能描述 |
/etc/passwd | 存储所有用户基本信息(不包含密码!)格式: 用户名:passwd占位符:UID:GID:描述:家目录:Shell |
/etc/shadow | 加密保存用户密码哈希(仅 root 可读),含密码过期策略 |
/etc/group | 定义组名、GID 及成员列表 |
/etc/gshadow | 组密码与管理员(极少使用) |
🔍 查看示例:
用户管理命令
命令 | 功能 | 推荐使用场景 |
adduser | 交互式添加用户(Debian/Ubuntu 推荐) | 初学者友好,自动建家目录、设 Shell |
useradd | 底层命令,功能强大但需手动配置 | 需精细控制时使用(如无家目录账户) |
deluser / userdel | 删除用户 | Ubuntu 用 deluser,其他多用 userdel |
passwd | 设置或修改密码 | 所有用户均可改自身密码;root 可改为他人 |
id | 查看用户的 UID、GID 和所属组 | id alice |
whoami | 显示当前登录用户名 | 快速确认身份 |
su | 切换用户身份 | su - alice(推荐加 - 加载完整环境) |
sudo | 以管理员权限运行命令 | 非 root 用户提权执行敏感操作 |
✅ 用户管理常用命令示例
组管理命令
命令 | 功能 |
groupadd | 创建新组 |
groupdel | 删除组 |
groups | 查看用户所属的所有组 |
usermod | 修改用户属性,如添加/删除组 |
🧩 常见组操作命令
❗ 注意:-aG中的-a表示“追加”,否则会覆盖原有附加组!
权限与组的关系
文件权限回顾
- 当用户
bob属于developers组时,他对这个文件拥有 只读权限。
- 因此:将用户加入特定组是实现协作与权限共享的关键方式之一
典型应用场景
组名 | 用途 |
sudo / wheel | 允许用户使用 sudo 提权(取决于发行版) |
docker | 允许无需 root 运行 Docker 命令 |
www-data | Web 服务相关的权限控制 |
plugdev | USB 设备插拔权限(桌面环境) |
✅ 示例:让开发人员无需密码运行 Docker
实用技巧
🔐 使用 sudo 替代频繁切换 root
- 编辑 sudoers:
sudo visudo
- 允许用户免密运行 sudo(谨慎!):
- 更安全做法:只允许某些命令
📁 锁定/解锁账户
🧼 清理无效用户
常见问题解答
❓ Q:
adduser 和 useradd 有什么区别?
✅ A:adduser是 Perl 脚本,在 Ubuntu 上提供交互体验,自动创建家目录、复制配置文件等。
useradd是底层二进制命令,行为更灵活但也更复杂,常用于自动化脚本。
❓ Q:为什么新用户加入组后还要重新登录?
✅ A:
用户的组成员信息是在登录时加载到会话中的。如果不重新登录,
groups 命令仍显示旧信息。可用以下方法刷新:⚠️ 注意:newgrp只影响当前 shell 会话,并不会永久改变主组。
❓ Q:如何批量创建用户?
✅ A:使用脚本 +
useradd❓ Q:怎样查看谁有
sudo 权限?
✅ A:📌 场景示例
✅ 场景 1:为新员工创建账号并授权
✅ 场景 2:禁止普通用户登录,仅用于服务运行
✅ 场景 3:快速列出所有具有 sudo 权限的用户
📘 学习建议
- ✅ 不要在生产机上随意删除用户
- 若不确定,先禁用账户(
passwd -l),观察是否影响服务。
- 🔁 掌握“最小权限原则”
- 不要轻易将用户加入
sudo组,应通过精确授权控制风险。
- 🔎 熟悉
/etc/passwd和/etc/group结构 - 手动查看比盲敲命令更能理解底层机制。
- 🛠️ 动手搭建测试环境
- 使用 VirtualBox 或 WSL 创建 Ubuntu 虚拟机进行练习。
- 🤖 尝试写用户管理脚本
- 自动化创建用户、分配组、生成报告等任务。
- 作者:NotionNext
- 链接:https://tangly1024.com/article/309db897-8f81-807c-ab9f-fa1913ffec6b
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。











