Linux 用户、组与权限管理
用户管理
用户相关文件
| 文件 | 说明 |
|---|---|
/etc/passwd |
用户账户信息 |
/etc/shadow |
用户密码(加密) |
/etc/group |
组信息 |
/etc/gshadow |
组密码 |
/etc/login.defs |
用户账号限制默认值 |
/etc/default/useradd |
用户创建默认配置 |
/etc/passwd 格式(7 个字段,冒号分隔):
1 | 用户名:密码占位符:UID:GID:描述:家目录:登录 shell |
示例:root:x:0:0:root:/root:/bin/bash
/etc/shadow 格式(9 个字段,冒号分隔):
1 | 用户名:加密密码:最后修改时间:最小间隔:最大天数:警告天数:宽限天数:失效日期:保留 |
创建用户
sudo useradd username - 基本创建(使用默认配置)
-d /home/custom指定家目录-u 1001- 指定UID-g groupname- 指定主组-G group1,group2- 指定附加组-s /bin/zsh- 指定登录 shell-c "Full Name,Dept"- 创建时设置注释信息-M- 创建时不创建家目录-r- 创建系统用户(UID < 1000)-e 2026-12-31- 设置密码过期时间-p "password"- 设置密码
sudo adduser username - 交互式创建(更友好,Debian/Ubuntu) # Debian/Ubuntu
修改用户
sudo usermod [Option] username - 修改用户账户
-l newname- 将用户名修改为新的名称-u 1002- 修改 UID-d /new/home- 修改家目录-m- 移动家目录文件,配合-d使用-g newgroup- 修改主组-G group1,group2- 修改附加组(覆盖)-aG group1,group2- 添加附加组(追加)-s /bin/bash- 修改登录 shell-L- 锁定用户-U- 解锁用户
sudo chage [Option] username - 修改密码过期
-E 2026-12-31- 设置密码过期时间-M 90- 设置密码最大有效天数-m 7- 设置密码最小更新周期,7 表示修改密码7天内无法更新密码,设置为0表示可以随时更新密码
删除用户
sudo userdel username - 删除用户(默认保留家目录)
-r- 删除家目录-f- 强制删除
密码管理
sudo passwd [Option] username - 修改密码
-l- 锁定密码(禁止登录)-u- 解锁密码-e- 强制用户下次登录修改密码-d- 删除密码(无密码登录)
查看用户信息
finger username - 查看用户详细信息(需安装finger)
groups username - 查看用户所属组
whoami - 查看当前用户
id [Option] username - 查看用户信息
-u- 仅显示 UID-g- 仅显示 GID-G- 显示所有组
查看用户密码信息:
sudo grep username /etc/shadow- 查看用户密码信息sudo chage -l username- 查看用户密码过期信息
查看最后登录:
last username- 查看用户最后登录信息lastlog -u username- 查看用户最后登录信息
切换用户
su username- 切换用户su - username- 切换用户并加载环境变量su -c "command"- 以指定用户执行命令exit- 退出当前 shell
组管理
创建组
sudo groupadd [Option] groupname - 创建组
-g 1001- 指定 GID-r- 创建系统组
修改组
sudo groupmod [Option] groupname - 修改组
-n newname- 修改组名-g 1002- 修改 GID
删除组
sudo groupdel [Option] groupname - 删除组
-f- 强制删除(即使为某用户主组)
组操作
添加用户到组:
sudo usermod -aG groupname username- 添加用户到组sudo gpasswd -a username groupname- 添加用户到组
从组中移除用户:
sudo gpasswd -d username groupname- 从组中移除用户
设置组管理员:
sudo gpasswd -A user1,user2 groupname- 设置组管理员sudo gpasswd -M user1,user2,user3 groupname- 设置组成员(覆盖现有成员)
查看组信息:
getent group groupname- 查看组信息grep groupname /etc/group- 查看组信息
查看组所有成员:
members groupname- 查看组所有成员(需安装 members 包)
文件权限
权限基础
Linux 权限分为三类用户:
- u (user/owner): 文件所有者
- g (group): 文件所属组
- o (other): 其他用户
三种基本权限:
| 权限 | 字母 | 数字 | 文件含义 | 目录含义 |
|---|---|---|---|---|
| 读 | r | 4 | 查看内容 | 列出目录内容 |
| 写 | w | 2 | 修改内容 | 创建/删除文件 |
| 执行 | x | 1 | 执行程序 | 进入目录 |
查看权限
ls -l [Option] file - 查看文件权限
-l- 详细列表-a- 包含隐藏文件-d- 查看目录本身而非内容
修改权限(chmod)
1 | # 符号模式 |
修改所有者(chown)
1 | # 修改所有者 |
常用权限组合
| 场景 | 权限 | 命令 |
|---|---|---|
| 私钥文件 | 600 | chmod 600 id_rsa |
| 公钥/脚本 | 644/755 | chmod 644 file |
| 网站目录 | 755/644 | chmod -R 755 /var/www |
| 上传目录 | 777 | chmod 777 uploads |
| 家目录 | 700 | chmod 700 ~ |
| 敏感配置 | 600 | chmod 600 .ssh/config |
特殊权限
SUID (Set UID)
当可执行文件设置了 SUID 位时,用户执行该文件时将以文件所有者的身份运行。
1 | # 查看 SUID 文件 |
SGID (Set GID)
- 对文件:执行时以文件所属组身份运行
- 对目录:目录中创建的文件继承目录的组
1 | # 查看 SGID 文件 |
Sticky Bit (粘滞位)
通常用于公共目录,用户只能删除自己创建的文件。
1 | # 查看粘滞位目录 |
特殊权限速查
| 权限 | 符号 | 数字位 | 设置命令 |
|---|---|---|---|
| SUID | s/S | 4 | chmod u+s / chmod 4xxx |
| SGID | s/S | 2 | chmod g+s / chmod 2xxx |
| Sticky | t/T | 1 | chmod +t / chmod 1xxx |
注意:小写 s/t 表示有执行权限,大写 S/T 表示无执行权限
访问控制列表 ACL
ACL 提供更细粒度的权限控制,可针对特定用户/组设置权限。
ACL 基本操作
1 | # 查看 ACL |
ACL 权限掩码
1 | # 设置掩码(限制最大权限) |
ACL 示例
1 | # 项目协作目录 |
sudo 权限配置
sudoers 文件
/etc/sudoers 文件控制 sudo 权限,必须使用 visudo 编辑。
1 | # 安全编辑 |
sudoers 语法
1 | # 格式 |
常用配置示例
1 | # /etc/sudoers.d/deploy |
sudo 使用
1 | # 以 root 执行 |
用户环境配置
家目录结构
1 | /home/username/ |
环境变量
1 | # 系统级环境变量 |
用户限制
1 | # /etc/security/limits.conf |
PAM 配置
1 | # PAM 配置文件位置 |
实用命令速查
| 命令 | 功能 |
|---|---|
id |
显示用户/组 ID |
whoami |
显示当前用户名 |
users |
显示登录用户 |
w |
显示登录用户及活动 |
last |
显示最后登录记录 |
lastlog |
显示所有用户最后登录 |
passwd |
修改密码 |
chage |
修改密码过期策略 |
sudo |
以其他用户执行命令 |
su |
切换用户 |
useradd/userdel/usermod |
用户管理 |
groupadd/groupdel/groupmod |
组管理 |
chmod |
修改权限 |
chown |
修改所有者 |
chgrp |
修改组 |
getfacl/setfacl |
ACL 管理 |
visudo |
编辑 sudoers |
安全建议
- 最小权限原则:只授予必要的权限
- 定期审计:检查 SUID/SGID 文件和高权限账户
- 禁用 root 登录:使用 sudo 代替直接 root 登录
- 密码策略:设置合理的密码复杂度要求和过期策略
- 监控日志:关注
/var/log/auth.log或/var/log/secure - 及时清理:删除不需要的用户账户