如何用脚本批量添加RADIUS用户?

wen 实用脚本 2

本文目录导读:

如何用脚本批量添加RADIUS用户?

  1. 方法一:通过 MySQL 数据库批量添加(最推荐,适用于 FreeRADIUS + Daloradius 或纯数据库存储)
  2. 方法二:通过 FreeRADIUS 的 users 文件批量添加(适用于简单文件存储)
  3. 辅助:生成随机密码的脚本(配合方法一使用)
  4. 重要提示

批量添加 RADIUS 用户通常需要操作 RADIUS 的后端数据库(常见的是 MySQL/MariaDB),或者直接修改其配置文件(如 usersclients.conf,取决于你的 RADIUS 软件和配置)。

以下提供两种最常见场景的批量添加脚本方法,请根据你的实际情况选择


通过 MySQL 数据库批量添加(最推荐,适用于 FreeRADIUS + Daloradius 或纯数据库存储)

大多数现代 RADIUS 系统(如 FreeRADIUS 配合 MySQL)的用户认证信息存储在数据库的 radcheckraduser 等表中。

以下是一个 Shell 脚本 示例,从 CSV 文件中读取用户名和密码,批量插入到 radcheck 表。

准备用户 CSV 文件 (users.csv)

user1,password123
user2,password456
user3,password789

Shell 批量添加脚本 (add_radius_users.sh)

#!/bin/bash
# 数据库连接信息 (根据你的环境修改)
DB_HOST="localhost"
DB_USER="radius"
DB_PASS="your_db_password"
DB_NAME="radius"
# CSV 文件路径
CSV_FILE="users.csv"
# 检查 CSV 文件是否存在
if [ ! -f "$CSV_FILE" ]; then
    echo "错误: 文件 $CSV_FILE 不存在"
    exit 1
fi
# 读取每一行并插入数据库
while IFS=',' read -r username password; do
    # 跳过空行或格式错误的行
    if [ -z "$username" ] || [ -z "$password" ]; then
        echo "跳过无效行: $username,$password"
        continue
    fi
    # 清理可能的空格
    username=$(echo "$username" | xargs)
    password=$(echo "$password" | xargs)
    echo "正在添加用户: $username"
    # 插入用户名和密码到 radcheck 表
    # 注意:这里假设密码使用 Cleartext-Password (明文),生产环境建议使用 MD5 或 NT-Password
    mysql -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" <<EOF
    INSERT INTO radcheck (username, attribute, op, value)
    VALUES ('$username', 'Cleartext-Password', ':=', '$password');
EOF
    # 检查插入是否成功
    if [ $? -eq 0 ]; then
        echo "成功: $username"
    else
        echo "错误: 插入 $username 失败"
    fi
done < "$CSV_FILE"
echo "批量添加完成"

运行脚本

# 给脚本执行权限
chmod +x add_radius_users.sh
# 运行
./add_radius_users.sh

通过 FreeRADIUS 的 users 文件批量添加(适用于简单文件存储)

如果你的 RADIUS 使用传统的 /etc/freeradius/3.0/users 文件(或 /etc/raddb/users),你可以通过脚本生成文件内容。

准备用户列表文件 (user_list.txt)

user1   Cleartext-Password := "password123"
user2   Cleartext-Password := "password456"

脚本:生成并追加到 users 文件

#!/bin/bash
# users 文件路径 (根据你的发行版调整)
USERS_FILE="/etc/freeradius/3.0/users"
# 用户列表文件
LIST_FILE="user_list.txt"
# 安全备份原文件
cp "$USERS_FILE" "$USERS_FILE.bak.$(date +%Y%m%d%H%M%S)"
echo "已备份原文件"
# 逐行读取并追加
while IFS= read -r line; do
    # 跳过空行和注释行
    [[ -z "$line" || "$line" =~ ^# ]] && continue
    echo "$line" >> "$USERS_FILE"
    echo "添加: $line"
done < "$LIST_FILE"
echo "批量添加完成,请重启 RADIUS 服务生效"

注意:修改 users 文件后,必须重启 RADIUS 服务:

sudo systemctl restart freeradius

或者

sudo service freeradius restart

辅助:生成随机密码的脚本(配合方法一使用)

如果你想批量生成随机密码,可以使用以下命令:

#!/bin/bash
for i in $(seq 1 10); do
    username="user$(printf "%03d" $i)"
    password=$(openssl rand -base64 12 | tr -dc 'a-zA-Z0-9' | head -c12)
    echo "$username,$password"
done > new_users.csv

这将生成 10 个用户名(如 user001)并附带随机 12 位密码,输出到 new_users.csv


重要提示

  1. 密码加密:示例中使用的是 Cleartext-Password(明文密码),出于安全考虑,生产环境建议使用加密方式:
    • 在 SQL 插入时使用 MD5-PasswordNT-Password(SMB 哈希)。
    • 或者使用 FreeRADIUS 的 radcrypt 工具生成密码哈希。
  2. 权限问题:如果你使用 users 文件,确保脚本以 rootfreerad 用户运行,否则无法写入。
  3. 测试:在大规模添加前,先添加一个测试用户验证配置是否正确。
  4. 日志检查:添加后检查 RADIUS 日志(常见位置:/var/log/radius/radutmp/var/log/freeradius/radius.log)确保没有错误。

如果你使用的是其他 RADIUS 软件(如 Windows NPS、Cisco ACS),实现方式完全不同,请提供更多细节以便给出针对性建议。

抱歉,评论功能暂时关闭!