Linux 用户与组管理详解
一、核心配置文件
1.1 用户相关配置文件
/etc/passwd # 用户账户信息
/etc/shadow # 用户密码信息(加密)
/etc/login.defs # 用户创建的默认设置
/etc/default/useradd # useradd命令的默认值
/etc/skel/ # 新用户的家目录模板
1.2 组相关配置文件
/etc/group # 组账户信息
/etc/gshadow # 组密码信息
二、用户管理命令
2.1 用户创建与删除
useradd - 创建用户
# 基本用法
useradd [选项] 用户名
# 常用选项
useradd -m username # 创建用户并建立家目录
useradd -u 1001 username # 指定UID
useradd -g users username # 指定主组
useradd -G wheel,dev username # 指定附加组
useradd -s /bin/bash username # 指定shell
useradd -d /home/custom username # 指定家目录路径
useradd -c "用户描述" username # 添加描述信息
# 查看默认设置
useradd -D
adduser - 交互式创建用户(部分发行版)
adduser username # 交互式创建,会提示输入密码等信息
userdel - 删除用户
userdel username # 删除用户但保留家目录
userdel -r username # 删除用户同时删除家目录和邮件
userdel -f username # 强制删除(即使用户已登录)
2.2 用户修改
usermod - 修改用户属性
# 修改用户信息
usermod -c "新描述" username # 修改描述
usermod -d /new/home username # 修改家目录
usermod -m -d /new/home username # 移动家目录到新位置
usermod -s /bin/zsh username # 修改shell
usermod -L username # 锁定账户
usermod -U username # 解锁账户
# 修改组关系
usermod -g newgroup username # 修改主组
usermod -G group1,group2 username # 修改附加组(覆盖原有)
usermod -aG groupname username # 追加附加组(推荐方式)
usermod -l newname oldname # 修改用户名
usermod -u 新UID username # 修改UID
chage - 修改密码过期信息
chage -l username # 查看密码过期信息
chage -M 90 username # 设置密码有效天数
chage -d 0 username # 强制下次登录修改密码
chage -E "2024-12-31" username # 设置账户过期时间
chage -m 7 username # 设置密码最短使用天数
chage -W 14 username # 密码过期前警告天数
2.3 密码管理
passwd - 密码管理
passwd username # 为用户设置密码(root权限)
passwd # 修改当前用户密码
passwd -l username # 锁定用户密码
passwd -u username # 解锁用户密码
passwd -d username # 删除用户密码
passwd -S username # 查看密码状态
passwd -e username # 强制用户下次登录修改密码
三、组管理命令
3.1 组创建与删除
# 创建组
groupadd groupname
groupadd -g 1005 groupname # 指定GID
groupadd -r groupname # 创建系统组(GID<1000)
# 删除组
groupdel groupname # 删除组(组不能是用户的主组)
3.2 组修改
groupmod -n newname oldname # 修改组名
groupmod -g 新GID groupname # 修改GID
四、用户信息查看
4.1 查看用户信息
id username # 显示用户UID、GID和组信息
id -u username # 只显示UID
id -g username # 只显示主组GID
id -Gn username # 显示用户所在的所有组
whoami # 显示当前用户名
who # 显示已登录用户
w # 显示已登录用户及活动
last # 显示用户登录历史
lastlog # 显示所有用户最后登录时间
4.2 查看配置文件内容
cat /etc/passwd # 查看所有用户
cat /etc/group # 查看所有组
cat /etc/shadow # 查看密码信息(需root)
五、特殊权限管理
5.1 sudo权限配置
# 编辑sudoers文件(使用visudo命令)
visudo
# sudoers文件示例配置
# 允许wheel组的所有权限
%wheel ALL=(ALL) ALL
# 允许用户执行特定命令
username ALL=(ALL) /usr/bin/systemctl, /usr/bin/apt
# 无需密码执行
username ALL=(ALL) NOPASSWD: ALL
5.2 切换用户
su username # 切换用户(保留环境变量)
su - username # 切换用户(加载目标用户环境)
sudo -u username command # 以指定用户执行命令
六、用户配置文件详解
6.1 /etc/passwd 文件格式
username:x:UID:GID:描述:家目录:shell
字段说明:
1. 用户名
2. 密码占位符(x表示密码在/etc/shadow)
3. UID(用户ID)
4. GID(主组ID)
5. 用户描述信息
6. 家目录路径
7. 登录shell
6.2 /etc/shadow 文件格式
username:加密密码:最后修改:最小天数:最大天数:警告期:失效期:保留
字段说明:
1. 用户名
2. 加密密码(!或*表示锁定)
3. 最后修改时间(1970-1-1至今的天数)
4. 密码最小使用天数
5. 密码最大使用天数
6. 密码过期前警告天数
7. 密码过期后账户失效天数
8. 账户失效日期(1970-1-1至今的天数)
9. 保留字段
6.3 /etc/group 文件格式
组名:组密码:GID:组成员
七、UID和GID范围
| 范围 |
用途 |
说明 |
| 0 |
root用户 |
超级管理员 |
| 1-999 |
系统用户 |
系统服务使用的用户 |
| 1000-60000 |
普通用户 |
手动创建的用户 |
| 65534 |
nobody用户 |
无特权用户 |
八、实用脚本示例
8.1 批量创建用户
#!/bin/bash
# batch_create_users.sh
USER_LIST="user1 user2 user3"
DEFAULT_PASS="ChangeMe123!"
for USER in $USER_LIST; do
# 创建用户
useradd -m -s /bin/bash -c "批量创建用户" $USER
# 设置初始密码
echo "$USER:$DEFAULT_PASS" | chpasswd
# 强制首次登录修改密码
chage -d 0 $USER
echo "用户 $USER 创建成功"
done
8.2 检查系统用户
#!/bin/bash
# check_system_users.sh
echo "=== 系统用户检查 ==="
echo "1. 空密码用户:"
awk -F: '($2 == "") {print $1}' /etc/shadow
echo -e "\n2. UID为0的用户:"
awk -F: '($3 == 0) {print $1}' /etc/passwd
echo -e "\n3. 无家目录的用户:"
awk -F: '($6 == "" || $6 == "/") {print $1}' /etc/passwd
echo -e "\n4. 无效shell的用户:"
awk -F: '($7 == "/bin/false" || $7 == "/usr/sbin/nologin") {print $1}' /etc/passwd
8.3 迁移用户到新系统
#!/bin/bash
# migrate_user.sh
OLD_USER="olduser"
NEW_USER="newuser"
# 1. 创建用户(保持相同UID/GID)
OLD_UID=$(id -u $OLD_USER)
OLD_GID=$(id -g $OLD_USER)
useradd -u $OLD_UID -g $OLD_GID -m -d /home/$NEW_USER $NEW_USER
# 2. 复制家目录内容
cp -ra /home/$OLD_USER/. /home/$NEW_USER/
# 3. 设置正确的权限
chown -R $NEW_USER:$NEW_USER /home/$NEW_USER
# 4. 迁移cron任务
crontab -u $OLD_USER -l | crontab -u $NEW_USER -
echo "用户 $OLD_USER 已迁移到 $NEW_USER"
九、安全最佳实践
9.1 账户安全策略
# 设置密码策略
# 编辑 /etc/pam.d/common-password
# 添加:password requisite pam_pwquality.so retry=3 minlen=12 difok=3
# 编辑 /etc/login.defs
PASS_MAX_DAYS 90 # 密码最大使用天数
PASS_MIN_DAYS 7 # 密码最小使用天数
PASS_WARN_AGE 14 # 密码过期前警告天数
LOGIN_RETRIES 5 # 登录重试次数
LOGIN_TIMEOUT 60 # 登录超时时间
9.2 审计与监控
# 查看失败登录尝试
lastb
# 查看授权日志
grep "Failed password" /var/log/auth.log
grep "Accepted password" /var/log/auth.log
# 检查空密码账户
awk -F: '($2 == "") {print $1}' /etc/shadow
十、故障排查
10.1 常见问题及解决
问题1:用户无法登录
# 检查账户状态
passwd -S username
# 解锁账户
usermod -U username
# 重置密码
passwd username
问题2:权限不足
# 检查用户所在组
id username
# 添加到所需组
usermod -aG groupname username
问题3:家目录权限错误
# 修复家目录权限
chown -R username:username /home/username
chmod 700 /home/username
十一、相关命令速查表
| 命令 |
功能 |
常用选项 |
useradd |
创建用户 |
-m, -s, -g, -G, -u |
usermod |
修改用户 |
-L, -U, -aG, -d, -s |
userdel |
删除用户 |
-r, -f |
groupadd |
创建组 |
-g, -r |
groupmod |
修改组 |
-n, -g |
groupdel |
删除组 |
无 |
passwd |
密码管理 |
-l, -u, -d, -S |
chage |
密码过期 |
-l, -M, -E, -W |
id |
用户信息 |
-u, -g, -Gn |
su |
切换用户 |
-, -c |
sudo |
提权执行 |
-u, -l |
注意:
- 使用
visudo 而不是直接编辑 /etc/sudoers 文件
- 谨慎使用
userdel -r,会删除用户所有数据
- 定期审计系统账户和权限
- 遵循最小权限原则分配sudo权限