CentOS下自动化创建用户、设置密码及配置sudo权限的Shell脚本实现


阅读 6 次

需求场景

在CentOS服务器运维中,经常需要批量创建系统账号并配置管理权限。特别是在以下场景:

  • VPS多用户管理
  • 自动化部署系统
  • 后台服务账户管理

核心脚本实现

以下是一个完整的Bash脚本示例,实现用户创建、密码设置和sudo权限配置的一体化操作:

#!/bin/bash
# 定义用户名和密码变量
USERNAME="newuser"
PASSWORD="your_secure_password"

# 创建用户
useradd $USERNAME
if [ $? -eq 0 ]; then
    echo "用户 $USERNAME 创建成功"
else
    echo "用户创建失败"
    exit 1
fi

# 设置密码
echo "$PASSWORD" | passwd --stdin $USERNAME
if [ $? -eq 0 ]; then
    echo "密码设置成功"
else
    echo "密码设置失败"
    exit 1
fi

# 配置sudo权限
echo "$USERNAME ALL=(ALL) ALL" >> /etc/sudoers
if [ $? -eq 0 ]; then
    echo "sudo权限配置成功"
else
    echo "sudo权限配置失败"
    exit 1
fi

安全增强方案

实际生产环境中,建议采用以下安全措施:

# 随机密码生成
PASSWORD=$(date +%s | sha256sum | base64 | head -c 16)

# 使用visudo安全编辑
echo "$USERNAME ALL=(ALL) NOPASSWD:ALL" | EDITOR='tee -a' visudo >/dev/null

批量处理实现

对于需要批量创建多个用户的情况,可以结合CSV文件处理:

#!/bin/bash
while IFS=, read -r username password
do
    useradd $username
    echo "$password" | passwd --stdin $username
    echo "$username ALL=(ALL) ALL" >> /etc/sudoers.d/$username
    chmod 440 /etc/sudoers.d/$username
done < users.csv

错误处理机制

完善的脚本应该包含错误检测和日志记录:

LOG_FILE="/var/log/user_creation.log"

{
    useradd $USERNAME || exit 1
    echo "$PASSWORD" | passwd --stdin $USERNAME || exit 1
    echo "$USERNAME ALL=(ALL) ALL" | tee -a /etc/sudoers.d/$USERNAME || exit 1
} 2>&1 | tee -a $LOG_FILE

实际应用建议

  • 建议将脚本放在/usr/local/bin目录下
  • 通过chmod +x赋予可执行权限
  • 可以结合crontab实现定时任务