如何用脚本批量创建FTP账号?

wen 实用脚本 1

如何用脚本批量创建FTP账号?完整指南与实战代码

📚 目录导读

  1. 为什么需要批量创建FTP账号?
  2. 准备工作:环境与依赖
  3. Shell脚本批量创建(推荐)
  4. Python脚本实现跨平台管理
  5. 常见问题与解答(FAQ)
  6. 安全注意事项与最佳实践

为什么需要批量创建FTP账号?

在企业运维场景中,当需要为几十甚至上百名用户、合作伙伴或项目成员开通FTP访问权限时,手动逐条创建账号不仅效率低下,还容易因人为疏忽导致配置错误(如权限设置不一致、目录路径错乱等)。脚本批量创建能实现:

如何用脚本批量创建FTP账号?

  • 自动化:一次编写,多次执行。
  • 标准化:确保所有账号遵循相同的目录结构、权限策略和密码规则。
  • 可审计:生成操作日志,便于后续排查。
  • 节省时间:手动创建100个账号约需2-3小时,脚本只需3秒。

准备工作:环境与依赖

1 操作系统与FTP服务

本文以 CentOS 7/8 + vsftpd 为例(Ubuntu系统逻辑类似,仅包名略有差异),需已安装vsftpd:

sudo yum install vsftpd -y   # CentOS
sudo apt-get install vsftpd -y  # Ubuntu

2 准备用户列表文件

创建一个 user_list.txt 文件,每行格式为:用户名 密码 家目录路径(以空格或Tab分隔),示例:

ftpuser1 Pass@123 /data/ftp/users/ftpuser1
ftpuser2 Pass@456 /data/ftp/users/ftpuser2
ftpuser3 Pass@789 /data/ftp/users/ftpuser3

注意:密码建议用mkpasswdopenssl预加密,避免明文传输。


方法一:Shell脚本批量创建(推荐)

1 脚本核心逻辑

  • 读取user_list.txt
  • 调用useradd创建系统用户(vsftpd可基于系统用户或虚拟用户)。
  • 设置密码并使用chpasswd加密写入。
  • 创建家目录并设置权限(750,属主为对应用户)。
  • 限制用户只能通过FTP访问(usermod -s /sbin/nologin)。

2 完整脚本源码

#!/bin/bash
# batch_create_ftp_users.sh
FTP_BASE_DIR="/data/ftp/users"
USER_LIST="user_list.txt"
# 检查依赖
if ! command -v mkpasswd &> /dev/null; then
    echo "正在安装mkpasswd..." ; yum install -y expect
fi
while IFS=' ' read -r username passwd homedir; do
    # 跳过空行和注释
    [[ -z "$username" || "$username" == \#* ]] && continue
    # 检查用户是否存在
    if id "$username" &>/dev/null; then
        echo "警告:用户 $username 已存在,跳过创建"
        continue
    fi
    # 创建系统用户
    useradd -d "$FTP_BASE_DIR/$username" -s /sbin/nologin -m "$username"
    # 设置密码(使用chpasswd加密)
    echo "$username:$passwd" | chpasswd
    # 创建家目录(如果useradd未自动创建)
    mkdir -p "$FTP_BASE_DIR/$username"
    chown -R "$username:$username" "$FTP_BASE_DIR/$username"
    chmod 750 "$FTP_BASE_DIR/$username"
    echo "成功创建FTP账号:$username"
done < "$USER_LIST"
echo "所有账号创建完成!共处理 $(wc -l < "$USER_LIST") 个条目。"

3 如何运行?

chmod +x batch_create_ftp_users.sh
sudo ./batch_create_ftp_users.sh

方法二:Python脚本实现跨平台管理

如果FTP服务运行在Windows Server(如FileZilla Server)或需要更复杂的逻辑(如随机密码生成、数据库存储),推荐使用Python。

1 脚本特点

  • 自动生成12位随机密码(包含大小写字母+数字+特殊字符)。
  • 支持Windows/Linux双平台。
  • 通过subprocess调用系统命令或直接操作FTP服务配置文件。

2 示例代码(Linux + vsftpd)

#!/usr/bin/env python3
# batch_create_ftp.py
import os, subprocess, string, random
def generate_password(length=12):
    chars = string.ascii_letters + string.digits + "@#$!"
    return ''.join(random.choice(chars) for _ in range(length))
def create_ftp_user(username, base_dir="/data/ftp/users"):
    password = generate_password()
    home_dir = f"{base_dir}/{username}"
    # 创建系统用户
    subprocess.run(["useradd", "-d", home_dir, "-s", "/sbin/nologin", username], check=True)
    # 设置密码
    proc = subprocess.Popen(["chpasswd"], stdin=subprocess.PIPE)
    proc.communicate(input=f"{username}:{password}".encode())
    # 创建目录
    os.makedirs(home_dir, exist_ok=True)
    os.chown(home_dir, uid := pwd.getpwnam(username).pw_uid, gid := pwd.getpwnam(username).pw_gid)
    os.chmod(home_dir, 0o750)
    return username, password
# 批量创建:读取CSV或循环生成
users = ["dev01", "dev02", "market01"]
for user in users:
    u, p = create_ftp_user(user)
    print(f"用户:{u} | 密码:{p} | 保存此记录!")

补充:Windows环境下可用wmi模块或直接调用net user命令创建本地账号。


常见问题与解答(FAQ)

Q1:创建的FTP账号无法登录,提示“530 Login incorrect”怎么办?

A:依次排查:

  • 密码是否加密格式错误?用chpasswd替代直接passwd传参。
  • 检查vsfatpd配置:/etc/vsftpd/vsftpd.conf,确保local_enable=YESwrite_enable=YES
  • 重启服务:systemctl restart vsftpd

Q2:如何限制用户只能访问自己的家目录(chroot)?

A:在/etc/vsftpd/vsftpd.conf中设置:

chroot_local_user=YES
allow_writeable_chroot=YES

并确保家目录不可被属主以外的人写(即chmod 750)。

Q3:能否批量删除这些账号?

A:可以,编写相反脚本,循环读取用户列表,执行userdel -r $username(需谨慎!)。

Q4:密码如何记录与分发?

A:通过邮件或企业IM自动发送,或生成加密的CSV文件,切勿将明文密码写在脚本中,建议在脚本末尾将用户名密码输出到/root/ftp_accounts.csv并设置600权限。


安全注意事项与最佳实践

1 密码安全策略

  • 使用mkpasswd -l 16 -d 4生成复杂密码。
  • 脚本运行后立即删除包含密码的临时文件。
  • 强制用户首次登录修改密码(chage -d 0 $username)。

2 访问控制

  • 限制登录IP:在/etc/hosts.allow/etc/hosts.deny配置。
  • 禁用匿名登录:anonymous_enable=NO
  • 启用日志审计:xferlog_enable=YES

3 资源隔离

  • 使用磁盘配额(quota)限制每个用户的最大空间。
  • 单独挂载FTP目录分区,防止系统盘被填满。

4 定期审计

  • 每月运行脚本扫描未使用的账号(userdel -r)。
  • 检查/var/log/vsftpd.log异常登录记录。

通过以上方法,你可以快速从手动操作中解脱出来。建议先在一台测试服务器上验证脚本,确认无误后再批量应用,根据实际需求选择Shell(简单快速)或Python(灵活跨平台)方案,配合规范的密码管理与权限控制,实现安全高效的FTP账号生命周期管理。

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