1. 首页 > Linux教程 > 正文

Linux教程FG085-命令行批量创建用户并设置初始密码

更多视频教程www.fgedu.net.cn

Part01-基础概念与理论知识

1.1 批量用户创建的应用场景

批量创建用户在以下场景中非常有用:

  • 新员工入职:公司新员工入职时需要批量创建账户
  • 学生账户:教育机构为学生批量创建学习账户
  • 系统迁移:系统迁移时需要批量重建用户账户
  • 测试环境:测试环境需要批量创建测试用户
  • 服务账户:为应用程序批量创建服务账户

1.2 用户创建相关命令

命令 功能 常用选项
useradd 创建用户账户 -m(创建家目录)、-g(指定主组)、-G(指定附加组)
passwd 设置用户密码 –stdin(从标准输入读取密码)
usermod 修改用户账户 -aG(添加到附加组)、-s(修改登录Shell)
chage 修改密码过期策略 -d 0(强制首次登录修改密码)

1.3 密码管理最佳实践

  • 强密码策略:设置最小密码长度和复杂度要求
  • 首次登录修改:强制用户首次登录时修改密码
  • 密码过期:设置密码过期时间,定期更换密码
  • 密码历史:记录密码历史,防止重复使用
  • 账户锁定:设置登录失败次数,防止暴力破解

Part02-实战环境准备与配置

2.1 创建用户列表文件

# 1. 创建用户列表文件(格式:用户名:用户组:全名)
# cat > /tmp/user_list.txt << 'EOF' alice:devteam:Alice Johnson bob:devteam:Bob Smith charlie:qa:Charlie Brown david:qa:David Wilson eve:ops:Eve Davis frank:ops:Frank Miller grace:devteam:Grace Lee henry:qa:Henry Taylor irene:ops:Irene Anderson jack:devteam:Jack Thomas EOF # 2. 查看用户列表 # cat /tmp/user_list.txt alice:devteam:Alice Johnson bob:devteam:Bob Smith charlie:qa:Charlie Brown david:qa:David Wilson eve:ops:Eve Davis frank:ops:Frank Miller grace:devteam:Grace Lee henry:qa:Henry Taylor irene:ops:Irene Anderson jack:devteam:Jack Thomas # 3. 验证文件格式 # awk -F: '{print "用户名:", $1, "用户组:", $2, "全名:", $3}' /tmp/user_list.txt 用户名: alice 用户组: devteam 全名: Alice Johnson 用户名: bob 用户组: devteam 全名: Bob Smith 用户名: charlie 用户组: qa 全名: Charlie Brown 用户名: david 用户组: qa 全名: David Wilson 用户名: eve 用户组: ops 全名: Eve Davis 用户名: frank 用户组: ops 全名: Frank Miller 用户名: grace 用户组: devteam 全名: Grace Lee 用户名: henry 用户组: qa 全名: Henry Taylor 用户名: irene 用户组: ops 全名: Irene Anderson 用户名: jack 用户组: devteam 全名: Jack Thomas

2.2 创建用户组

# 1. 检查用户组是否存在
# grep -E “devteam|qa|ops” /etc/group

# 2. 创建用户组
# groupadd devteam
# groupadd qa
# groupadd ops

# 3. 验证用户组创建
# grep -E “devteam|qa|ops” /etc/group
devteam:x:1001:
qa:x:1002:
ops:x:1003:

# 4. 查看用户组详细信息
# getent group devteam qa ops
devteam:x:1001:
qa:x:1002:
ops:x:1003:

Part03-核心命令实操演示

3.1 基础批量用户创建脚本

# 1. 创建批量用户创建脚本
# cat > /tmp/batch_create_users.sh << 'EOF' #!/bin/bash # 批量用户创建脚本 # 功能:从文件读取用户列表并批量创建用户 # 作者:fgedu # 日期:2026-04-02 # 定义变量 USER_FILE="/tmp/user_list.txt" LOG_FILE="/tmp/user_creation_$(date +%Y%m%d_%H%M%S).log" DEFAULT_PASS="Temp@123" # 创建日志函数 log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE" } # 创建分隔线函数 separator() { echo "==========================================" | tee -a "$LOG_FILE" } # 开始创建用户 separator log "开始批量创建用户" separator log "用户列表文件:$USER_FILE" log "默认密码:$DEFAULT_PASS" separator # 检查用户文件是否存在 if [ ! -f "$USER_FILE" ]; then log "错误:用户文件 $USER_FILE 不存在" exit 1 fi # 初始化统计变量 total_users=0 success_users=0 failed_users=0 skipped_users=0 # 读取用户文件 while IFS=':' read -r username group comment; do # 跳过空行和注释 [ -z "$username" ] && continue [[ "$username" =~ ^#.* ]] && continue total_users=$((total_users + 1)) log "处理用户:$username" # 检查用户是否已存在 if id "$username" &>/dev/null; then
log “警告:用户 $username 已存在,跳过”
skipped_users=$((skipped_users + 1))
continue
fi

# 检查用户组是否存在
if ! grep -q “^${group}:” /etc/group; then
log “警告:用户组 $group 不存在,跳过用户 $username”
failed_users=$((failed_users + 1))
continue
fi

# 创建用户
log “创建用户:$username”
useradd -g “$group” -c “$comment” -m “$username” 2>> “$LOG_FILE”

# 检查用户创建是否成功
if [ $? -eq 0 ]; then
# 设置默认密码
echo “$DEFAULT_PASS” | passwd –stdin “$username” &>> “$LOG_FILE”

# 强制用户首次登录时修改密码
chage -d 0 “$username” 2>> “$LOG_FILE”

log “用户 $username 创建成功”
log “默认密码:$DEFAULT_PASS”
log “首次登录需要修改密码”
success_users=$((success_users + 1))
else
log “错误:无法创建用户 $username”
failed_users=$((failed_users + 1))
fi

separator
done < "$USER_FILE" # 显示统计信息 separator log "用户创建完成" separator log "总用户数:$total_users" log "成功创建:$success_users" log "创建失败:$failed_users" log "跳过用户:$skipped_users" separator log "日志文件:$LOG_FILE" separator exit 0 EOF # 2. 设置脚本执行权限 # chmod +x /tmp/batch_create_users.sh # 3. 执行脚本 # /tmp/batch_create_users.sh ========================================== [2026-04-02 12:00:00] 开始批量创建用户 ========================================== [2026-04-02 12:00:00] 用户列表文件:/tmp/user_list.txt [2026-04-02 12:00:00] 默认密码:Temp@123 ========================================== [2026-04-02 12:00:00] 处理用户:alice [2026-04-02 12:00:00] 创建用户:alice [2026-04-02 12:00:00] 用户 alice 创建成功 [2026-04-02 12:00:00] 默认密码:Temp@123 [2026-04-02 12:00:00] 首次登录需要修改密码 ========================================== [2026-04-02 12:00:00] 处理用户:bob [2026-04-02 12:00:00] 创建用户:bob [2026-04-02 12:00:00] 用户 bob 创建成功 [2026-04-02 12:00:00] 默认密码:Temp@123 [2026-04-02 12:00:00] 首次登录需要修改密码 ========================================== [2026-04-02 12:00:00] 处理用户:charlie [2026-04-02 12:00:00] 创建用户:charlie [2026-04-02 12:00:00] 用户 charlie 创建成功 [2026-04-02 12:00:00] 默认密码:Temp@123 [2026-04-02 12:00:00] 首次登录需要修改密码 ========================================== [2026-04-02 12:00:00] 处理用户:david [2026-04-02 12:00:00] 创建用户:david [2026-04-02 12:00:00] 用户 david 创建成功 [2026-04-02 12:00:00] 默认密码:Temp@123 [2026-04-02 12:00:00] 首次登录需要修改密码 ========================================== [2026-04-02 12:00:00] 处理用户:eve [2026-04-02 12:00:00] 创建用户:eve [2026-04-02 12:00:00] 用户 eve 创建成功 [2026-04-02 12:00:00] 默认密码:Temp@123 [2026-04-02 12:00:00] 首次登录需要修改密码 ========================================== [2026-04-02 12:00:00] 处理用户:frank [2026-04-02 12:00:00] 创建用户:frank [2026-04-02 12:00:00] 用户 frank 创建成功 [2026-04-02 12:00:00] 默认密码:Temp@123 [2026-04-02 12:00:00] 首次登录需要修改密码 ========================================== [2026-04-02 12:00:00] 处理用户:grace [2026-04-02 12:00:00] 创建用户:grace [2026-04-02 12:00:00] 用户 grace 创建成功 [2026-04-02 12:00:00] 默认密码:Temp@123 [2026-04-02 12:00:00] 首次登录需要修改密码 ========================================== [2026-04-02 12:00:00] 处理用户:henry [2026-04-02 12:00:00] 创建用户:henry [2026-04-02 12:00:00] 用户 henry 创建成功 [2026-04-02 12:00:00] 默认密码:Temp@123 [2026-04-02 12:00:00] 首次登录需要修改密码 ========================================== [2026-04-02 12:00:00] 处理用户:irene [2026-04-02 12:00:00] 创建用户:irene [2026-04-02 12:00:00] 用户 irene 创建成功 [2026-04-02 12:00:00] 默认密码:Temp@123 [2026-04-02 12:00:00] 首次登录需要修改密码 ========================================== [2026-04-02 12:00:00] 处理用户:jack [2026-04-02 12:00:00] 创建用户:jack [2026-04-02 12:00:00] 用户 jack 创建成功 [2026-04-02 12:00:00] 默认密码:Temp@123 [2026-04-02 12:00:00] 首次登录需要修改密码 ========================================== [2026-04-02 12:00:00] 用户创建完成 ========================================== [2026-04-02 12:00:00] 总用户数:10 [2026-04-02 12:00:00] 成功创建:10 [2026-04-02 12:00:00] 创建失败:0 [2026-04-02 12:00:00] 跳过用户:0 ========================================== [2026-04-02 12:00:00] 日志文件:/tmp/user_creation_20260402_120000.log ========================================== # 4. 查看创建的用户 # grep -E "alice|bob|charlie|david|eve|frank|grace|henry|irene|jack" /etc/passwd alice:x:1001:1001:Alice Johnson:/home/alice:/bin/bash bob:x:1002:1001:Bob Smith:/home/bob:/bin/bash charlie:x:1003:1002:Charlie Brown:/home/charlie:/bin/bash david:x:1004:1002:David Wilson:/home/david:/bin/bash eve:x:1005:1003:Eve Davis:/home/eve:/bin/bash frank:x:1006:1003:Frank Miller:/home/frank:/bin/bash grace:x:1007:1001:Grace Lee:/home/grace:/bin/bash henry:x:1008:1002:Henry Taylor:/home/henry:/bin/bash irene:x:1009:1003:Irene Anderson:/home/irene:/bin/bash jack:x:1010:1001:Jack Thomas:/home/jack:/bin/bash

3.2 增强版批量用户创建脚本

# 1. 创建增强版批量用户创建脚本
# cat > /tmp/advanced_batch_users.sh << 'EOF' #!/bin/bash # 增强版批量用户创建脚本 # 功能:支持自定义密码、附加组、Shell等高级选项 # 作者:fgedu # 日期:2026-04-02 # 定义变量 USER_FILE="/tmp/user_list_advanced.txt" LOG_FILE="/tmp/user_creation_advanced_$(date +%Y%m%d_%H%M%S).log" PASSWORD_FILE="/tmp/user_passwords_$(date +%Y%m%d_%H%M%S).txt" # 创建日志函数 log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE" } # 创建分隔线函数 separator() { echo "==========================================" | tee -a "$LOG_FILE" } # 开始创建用户 separator log "开始批量创建用户(增强版)" separator log "用户列表文件:$USER_FILE" log "密码文件:$PASSWORD_FILE" separator # 检查用户文件是否存在 if [ ! -f "$USER_FILE" ]; then log "错误:用户文件 $USER_FILE 不存在" exit 1 fi # 初始化统计变量 total_users=0 success_users=0 failed_users=0 skipped_users=0 # 创建密码文件 > “$PASSWORD_FILE”

# 读取用户文件
while IFS=’:’ read -r username group comment password shell additional_groups; do
# 跳过空行和注释
[ -z “$username” ] && continue
[[ “$username” =~ ^#.* ]] && continue

total_users=$((total_users + 1))
log “处理用户:$username”

# 检查用户是否已存在
if id “$username” &>/dev/null; then
log “警告:用户 $username 已存在,跳过”
skipped_users=$((skipped_users + 1))
continue
fi

# 检查用户组是否存在
if ! grep -q “^${group}:” /etc/group; then
log “警告:用户组 $group 不存在,跳过用户 $username”
failed_users=$((failed_users + 1))
continue
fi

# 设置默认值
password=${password:-“Temp@123”}
shell=${shell:-“/bin/bash”}

# 创建用户
log “创建用户:$username”
useradd -g “$group” -c “$comment” -m -s “$shell” “$username” 2>> “$LOG_FILE”

# 检查用户创建是否成功
if [ $? -eq 0 ]; then
# 设置密码
echo “$password” | passwd –stdin “$username” &>> “$LOG_FILE”

# 强制用户首次登录时修改密码
chage -d 0 “$username” 2>> “$LOG_FILE”

# 添加附加组
if [ -n “$additional_groups” ]; then
log “添加附加组:$additional_groups”
usermod -aG “$additional_groups” “$username” 2>> “$LOG_FILE”
fi

# 记录密码
echo “$username:$password” >> “$PASSWORD_FILE”

log “用户 $username 创建成功”
log “密码:$password”
log “Shell:$shell”
log “主组:$group”
[ -n “$additional_groups” ] && log “附加组:$additional_groups”
success_users=$((success_users + 1))
else
log “错误:无法创建用户 $username”
failed_users=$((failed_users + 1))
fi

separator
done < "$USER_FILE" # 显示统计信息 separator log "用户创建完成" separator log "总用户数:$total_users" log "成功创建:$success_users" log "创建失败:$failed_users" log "跳过用户:$skipped_users" separator log "日志文件:$LOG_FILE" log "密码文件:$PASSWORD_FILE" separator # 设置密码文件权限 chmod 600 "$PASSWORD_FILE" log "密码文件权限已设置为600" exit 0 EOF # 2. 创建增强版用户列表文件 # cat > /tmp/user_list_advanced.txt << 'EOF' alice:devteam:Alice Johnson:alice123@:/bin/bash:qa bob:devteam:Bob Smith:bob456@:/bin/bash:ops charlie:qa:Charlie Brown:charlie789@:/bin/bash:devteam david:qa:David Wilson:david012@:/bin/bash:ops eve:ops:Eve Davis:eve345@:/bin/bash:devteam EOF # 3. 查看用户列表 # cat /tmp/user_list_advanced.txt alice:devteam:Alice Johnson:alice123@:/bin/bash:qa bob:devteam:Bob Smith:bob456@:/bin/bash:ops charlie:qa:Charlie Brown:charlie789@:/bin/bash:devteam david:qa:David Wilson:david012@:/bin/bash:ops eve:ops:Eve Davis:eve345@:/bin/bash:devteam # 4. 设置脚本执行权限 # chmod +x /tmp/advanced_batch_users.sh # 5. 执行脚本 # /tmp/advanced_batch_users.sh ========================================== [2026-04-02 12:01:00] 开始批量创建用户(增强版) ========================================== [2026-04-02 12:01:00] 用户列表文件:/tmp/user_list_advanced.txt [2026-04-02 12:01:00] 密码文件:/tmp/user_passwords_20260402_120100.txt ========================================== [2026-04-02 12:01:00] 处理用户:alice [2026-04-02 12:01:00] 创建用户:alice [2026-04-02 12:01:00] 添加附加组:qa [2026-04-02 12:01:00] 用户 alice 创建成功 [2026-04-02 12:01:00] 密码:alice123@ [2026-04-02 12:01:00] Shell:/bin/bash [2026-04-02 12:01:00] 主组:devteam [2026-04-02 12:01:00] 附加组:qa ========================================== [2026-04-02 12:01:00] 处理用户:bob [2026-04-02 12:01:00] 创建用户:bob [2026-04-02 12:01:00] 添加附加组:ops [2026-04-02 12:01:00] 用户 bob 创建成功 [2026-04-02 12:01:00] 密码:bob456@ [2026-04-02 12:01:00] Shell:/bin/bash [2026-04-02 12:01:00] 主组:devteam [2026-04-02 12:01:00] 附加组:ops ========================================== [2026-04-02 12:01:00] 处理用户:charlie [2026-04-02 12:01:00] 创建用户:charlie [2026-04-02 12:01:00] 添加附加组:devteam [2026-04-02 12:01:00] 用户 charlie 创建成功 [2026-04-02 12:01:00] 密码:charlie789@ [2026-04-02 12:01:00] Shell:/bin/bash [2026-04-02 12:01:00] 主组:qa [2026-04-02 12:01:00] 附加组:devteam ========================================== [2026-04-02 12:01:00] 处理用户:david [2026-04-02 12:01:00] 创建用户:david [2026-04-02 12:01:00] 添加附加组:ops [2026-04-02 12:01:00] 用户 david 创建成功 [2026-04-02 12:01:00] 密码:david012@ [2026-04-02 12:01:00] Shell:/bin/bash [2026-04-02 12:01:00] 主组:qa [2026-04-02 12:01:00] 附加组:ops ========================================== [2026-04-02 12:01:00] 处理用户:eve [2026-04-02 12:01:00] 创建用户:eve [2026-04-02 12:01:00] 添加附加组:devteam [2026-04-02 12:01:00] 用户 eve 创建成功 [2026-04-02 12:01:00] 密码:eve345@ [2026-04-02 12:01:00] Shell:/bin/bash [2026-04-02 12:01:00] 主组:ops [2026-04-02 12:01:00] 附加组:devteam ========================================== [2026-04-02 12:01:00] 用户创建完成 ========================================== [2026-04-02 12:01:00] 总用户数:5 [2026-04-02 12:01:00] 成功创建:5 [2026-04-02 12:01:00] 创建失败:0 [2026-04-02 12:01:00] 跳过用户:0 ========================================== [2026-04-02 12:01:00] 日志文件:/tmp/user_creation_advanced_20260402_120100.log [2026-04-02 12:01:00] 密码文件:/tmp/user_passwords_20260402_120100.txt [2026-04-02 12:01:00] 密码文件权限已设置为600 ========================================== # 6. 查看密码文件 # cat /tmp/user_passwords_20260402_120100.txt alice:alice123@ bob:bob456@ charlie:charlie789@ david:david012@ eve:eve345@ # 7. 查看密码文件权限 # ls -l /tmp/user_passwords_20260402_120100.txt -rw-------. 1 root root 85 Apr 2 12:01:00 /tmp/user_passwords_20260402_120100.txt

3.3 验证用户创建

# 1. 查看所有创建的用户
# grep -E “alice|bob|charlie|david|eve” /etc/passwd
alice:x:1001:1001:Alice Johnson:/home/alice:/bin/bash
bob:x:1002:1001:Bob Smith:/home/bob:/bin/bash
charlie:x:1003:1002:Charlie Brown:/home/charlie:/bin/bash
david:x:1004:1002:David Wilson:/home/david:/bin/bash
eve:x:1005:1003:Eve Davis:/home/eve:/bin/bash

# 2. 查看用户组信息
# groups alice
alice : devteam qa

# groups bob
bob : devteam ops

# groups charlie
charlie : qa devteam

# groups david
david : qa ops

# groups eve
eve : ops devteam

# 3. 查看用户密码状态
# passwd -S alice
alice PS 2026-04-02 0 99999 7 -1 (Password set, SHA512 crypt.)

# passwd -S bob
bob PS 2026-04-02 0 99999 7 -1 (Password set, SHA512 crypt.)

# 4. 查看用户家目录
# ls -la /home/ | grep -E “alice|bob|charlie|david|eve”
drwx——. 2 alice devteam 4096 Apr 2 12:01 alice
drwx——. 2 bob devteam 4096 Apr 2 12:01 bob
drwx——. 2 charlie qa 4096 Apr 2 12:01 charlie
drwx——. 2 david qa 4096 Apr 2 12:01 david
drwx——. 2 eve ops 4096 Apr 2 12:01 eve

# 5. 测试用户登录
# su – alice
$ whoami
alice
$ pwd
/home/alice
$ exit
logout

# 6. 查看用户登录Shell
# grep -E “alice|bob|charlie|david|eve” /etc/passwd | cut -d: -f1,7
alice:/bin/bash
bob:/bin/bash
charlie:/bin/bash
david:/bin/bash
eve:/bin/bash

Part04-生产环境实战案例

4.1 批量删除用户脚本

# 1. 创建批量删除用户脚本
# cat > /tmp/batch_delete_users.sh << 'EOF' #!/bin/bash # 批量删除用户脚本 # 功能:从文件读取用户列表并批量删除用户 # 作者:fgedu # 日期:2026-04-02 # 定义变量 USER_FILE="/tmp/user_list_delete.txt" LOG_FILE="/tmp/user_deletion_$(date +%Y%m%d_%H%M%S).log" BACKUP_DIR="/tmp/user_backups/$(date +%Y%m%d_%H%M%S)" # 创建日志函数 log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE" } # 创建分隔线函数 separator() { echo "==========================================" | tee -a "$LOG_FILE" } # 开始删除用户 separator log "开始批量删除用户" separator log "用户列表文件:$USER_FILE" log "备份目录:$BACKUP_DIR" separator # 检查用户文件是否存在 if [ ! -f "$USER_FILE" ]; then log "错误:用户文件 $USER_FILE 不存在" exit 1 fi # 创建备份目录 mkdir -p "$BACKUP_DIR" # 初始化统计变量 total_users=0 success_users=0 failed_users=0 skipped_users=0 # 读取用户文件 while read -r username; do # 跳过空行和注释 [ -z "$username" ] && continue [[ "$username" =~ ^#.* ]] && continue total_users=$((total_users + 1)) log "处理用户:$username" # 检查用户是否存在 if ! id "$username" &>/dev/null; then
log “警告:用户 $username 不存在,跳过”
skipped_users=$((skipped_users + 1))
continue
fi

# 备份用户家目录
if [ -d “/home/$username” ]; then
log “备份用户家目录:/home/$username”
tar -czf “$BACKUP_DIR/${username}_home.tar.gz” -C /home “$username” 2>> “$LOG_FILE”
fi

# 删除用户
log “删除用户:$username”
userdel -r “$username” 2>> “$LOG_FILE”

# 检查用户删除是否成功
if [ $? -eq 0 ]; then
log “用户 $username 删除成功”
success_users=$((success_users + 1))
else
log “错误:无法删除用户 $username”
failed_users=$((failed_users + 1))
fi

separator
done < "$USER_FILE" # 显示统计信息 separator log "用户删除完成" separator log "总用户数:$total_users" log "成功删除:$success_users" log "删除失败:$failed_users" log "跳过用户:$skipped_users" separator log "日志文件:$LOG_FILE" log "备份目录:$BACKUP_DIR" separator exit 0 EOF # 2. 创建要删除的用户列表 # cat > /tmp/user_list_delete.txt << 'EOF' alice bob charlie EOF # 3. 设置脚本执行权限 # chmod +x /tmp/batch_delete_users.sh # 4. 执行脚本 # /tmp/batch_delete_users.sh ========================================== [2026-04-02 12:02:00] 开始批量删除用户 ========================================== [2026-04-02 12:02:00] 用户列表文件:/tmp/user_list_delete.txt [2026-04-02 12:02:00] 备份目录:/tmp/user_backups/20260402_120200 ========================================== [2026-04-02 12:02:00] 处理用户:alice [2026-04-02 12:02:00] 备份用户家目录:/home/alice [2026-04-02 12:02:00] 删除用户:alice [2026-04-02 12:02:00] 用户 alice 删除成功 ========================================== [2026-04-02 12:02:00] 处理用户:bob [2026-04-02 12:02:00] 备份用户家目录:/home/bob [2026-04-02 12:02:00] 删除用户:bob [2026-04-02 12:02:00] 用户 bob 删除成功 ========================================== [2026-04-02 12:02:00] 处理用户:charlie [2026-04-02 12:02:00] 备份用户家目录:/home/charlie [2026-04-02 12:02:00] 删除用户:charlie [2026-04-02 12:02:00] 用户 charlie 删除成功 ========================================== [2026-04-02 12:02:00] 用户删除完成 ========================================== [2026-04-02 12:02:00] 总用户数:3 [2026-04-02 12:02:00] 成功删除:3 [2026-04-02 12:02:00] 删除失败:0 [2026-04-02 12:02:00] 跳过用户:0 ========================================== [2026-04-02 12:02:00] 日志文件:/tmp/user_deletion_20260402_120200.log [2026-04-02 12:02:00] 备份目录:/tmp/user_backups/20260402_120200 ========================================== # 5. 查看备份文件 # ls -lh /tmp/user_backups/20260402_120200/ total 24K -rw-r--r--. 1 root root 8.0K Apr 2 12:02:00 alice_home.tar.gz -rw-r--r--. 1 root root 8.0K Apr 2 12:02:00 bob_home.tar.gz -rw-r--r--. 1 root root 8.0K Apr 2 12:02:00 charlie_home.tar.gz

4.2 用户密码批量修改脚本

# 1. 创建用户密码批量修改脚本
# cat > /tmp/batch_change_passwords.sh << 'EOF' #!/bin/bash # 用户密码批量修改脚本 # 功能:从文件读取用户列表并批量修改密码 # 作者:fgedu # 日期:2026-04-02 # 定义变量 USER_FILE="/tmp/user_password_change.txt" LOG_FILE="/tmp/password_change_$(date +%Y%m%d_%H%M%S).log" NEW_PASSWORD="NewPass@2026" # 创建日志函数 log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE" } # 创建分隔线函数 separator() { echo "==========================================" | tee -a "$LOG_FILE" } # 开始修改密码 separator log "开始批量修改用户密码" separator log "用户列表文件:$USER_FILE" separator # 检查用户文件是否存在 if [ ! -f "$USER_FILE" ]; then log "错误:用户文件 $USER_FILE 不存在" exit 1 fi # 初始化统计变量 total_users=0 success_users=0 failed_users=0 skipped_users=0 # 读取用户文件 while read -r username; do # 跳过空行和注释 [ -z "$username" ] && continue [[ "$username" =~ ^#.* ]] && continue total_users=$((total_users + 1)) log "处理用户:$username" # 检查用户是否存在 if ! id "$username" &>/dev/null; then
log “警告:用户 $username 不存在,跳过”
skipped_users=$((skipped_users + 1))
continue
fi

# 修改密码
log “修改用户密码:$username”
echo “$NEW_PASSWORD” | passwd –stdin “$username” &>> “$LOG_FILE”

# 检查密码修改是否成功
if [ $? -eq 0 ]; then
# 强制用户下次登录修改密码
chage -d 0 “$username” 2>> “$LOG_FILE”

log “用户 $username 密码修改成功”
log “新密码:$NEW_PASSWORD”
log “下次登录需要修改密码”
success_users=$((success_users + 1))
else
log “错误:无法修改用户 $username 的密码”
failed_users=$((failed_users + 1))
fi

separator
done < "$USER_FILE" # 显示统计信息 separator log "密码修改完成" separator log "总用户数:$total_users" log "成功修改:$success_users" log "修改失败:$failed_users" log "跳过用户:$skipped_users" separator log "日志文件:$LOG_FILE" separator exit 0 EOF # 2. 创建要修改密码的用户列表 # cat > /tmp/user_password_change.txt << 'EOF' david eve grace henry irene jack EOF # 3. 设置脚本执行权限 # chmod +x /tmp/batch_change_passwords.sh # 4. 执行脚本 # /tmp/batch_change_passwords.sh ========================================== [2026-04-02 12:03:00] 开始批量修改用户密码 ========================================== [2026-04-02 12:03:00] 用户列表文件:/tmp/user_password_change.txt ========================================== [2026-04-02 12:03:00] 处理用户:david [2026-04-02 12:03:00] 修改用户密码:david [2026-04-02 12:03:00] 用户 david 密码修改成功 [2026-04-02 12:03:00] 新密码:NewPass@2026 [2026-04-02 12:03:00] 下次登录需要修改密码 ========================================== [2026-04-02 12:03:00] 处理用户:eve [2026-04-02 12:03:00] 修改用户密码:eve [2026-04-02 12:03:00] 用户 eve 密码修改成功 [2026-04-02 12:03:00] 新密码:NewPass@2026 [2026-04-02 12:03:00] 下次登录需要修改密码 ========================================== [2026-04-02 12:03:00] 处理用户:grace [2026-04-02 12:03:00] 修改用户密码:grace [2026-04-02 12:03:00] 用户 grace 密码修改成功 [2026-04-02 12:03:00] 新密码:NewPass@2026 [2026-04-02 12:03:00] 下次登录需要修改密码 ========================================== [2026-04-02 12:03:00] 处理用户:henry [2026-04-02 12:03:00] 修改用户密码:henry [2026-04-02 12:03:00] 用户 henry 密码修改成功 [2026-04-02 12:03:00] 新密码:NewPass@2026 [2026-04-02 12:03:00] 下次登录需要修改密码 ========================================== [2026-04-02 12:03:00] 处理用户:irene [2026-04-02 12:03:00] 修改用户密码:irene [2026-04-02 12:03:00] 用户 irene 密码修改成功 [2026-04-02 12:03:00] 新密码:NewPass@2026 [2026-04-02 12:03:00] 下次登录需要修改密码 ========================================== [2026-04-02 12:03:00] 处理用户:jack [2026-04-02 12:03:00] 修改用户密码:jack [2026-04-02 12:03:00] 用户 jack 密码修改成功 [2026-04-02 12:03:00] 新密码:NewPass@2026 [2026-04-02 12:03:00] 下次登录需要修改密码 ========================================== [2026-04-02 12:03:00] 密码修改完成 ========================================== [2026-04-02 12:03:00] 总用户数:6 [2026-04-02 12:03:00] 成功修改:6 [2026-04-02 12:03:00] 修改失败:0 [2026-04-02 12:03:00] 跳过用户:0 ========================================== [2026-04-02 12:03:00] 日志文件:/tmp/password_change_20260402_120300.log ==========================================

Part05-风哥经验总结与分享

5.1 批量用户管理最佳实践

风哥经验分享:

  • 备份优先:在批量删除用户前,务必备份用户数据和配置
  • 测试验证:在生产环境执行前,先在测试环境验证脚本
  • 日志记录:详细记录每个操作,便于审计和问题追踪
  • 分批处理:对于大批量用户,建议分批处理,避免系统负载过高
  • 密码安全:密码文件应设置严格的权限,避免泄露

5.2 密码管理建议

密码管理建议:

  • 强制修改:使用chage -d 0强制用户首次登录修改密码
  • 密码策略:设置密码复杂度要求和过期策略
  • 定期更换:建立定期更换密码的机制
  • 密码历史:记录密码历史,防止重复使用
  • 账户锁定:设置登录失败次数,防止暴力破解

5.3 安全注意事项

安全注意事项:

  • 密码文件应设置为600权限,仅root可读写
  • 避免在脚本中硬编码密码,使用加密存储
  • 定期审计用户账户,删除不活跃账户
  • 限制sudo权限,避免权限滥用
  • 监控异常登录行为,及时发现安全威胁

5.4 常见问题与解决方案

问题 原因 解决方案
用户创建失败 用户组不存在、UID冲突 检查用户组是否存在,使用-u指定UID
密码设置失败 密码不符合策略、权限不足 检查密码策略,使用root权限执行
家目录创建失败 磁盘空间不足、权限问题 检查磁盘空间,检查目录权限
用户无法登录 Shell设置错误、账户被锁定 检查Shell设置,解锁账户
风哥总结:
批量用户管理是系统运维的常见任务,一个好的批量用户管理脚本应该具备完善的日志记录、错误处理、数据备份等功能。在生产环境中,建议先在测试环境验证脚本,确保脚本的正确性和安全性。同时,要建立完善的用户管理制度,定期审计用户账户,及时发现和处理安全隐患。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息