怎样用脚本批量删除FTP账号?

wen 实用脚本 1

本文目录导读:

怎样用脚本批量删除FTP账号?

  1. Linux 环境 (vsftpd / pure-ftpd)
  2. Windows 环境 (IIS FTP)
  3. 通用方法:读取文件列表批量删除
  4. ⚠️ 重要安全建议

要批量删除FTP账号,可以通过编写脚本调用系统命令或FTP管理命令来实现,下面提供几种常见场景的脚本方法(基于 Linux 系统 vsftpd 或 pure-ftpd,以及 Windows IIS FTP)。


Linux 环境 (vsftpd / pure-ftpd)

删除 vsftpd 虚拟用户(基于文本数据库)

假设用户信息存储在 /etc/vsftpd/virtual_users.txt 文件中,格式为:

username1
password1
username2
password2

删除用户的核心逻辑:从文件中移除对应行

脚本示例 (bash)

#!/bin/bash
# 要删除的用户列表
users_to_delete=("user1" "user2" "user3")
# 用户数据库文件
db_file="/etc/vsftpd/virtual_users.txt"
# 逐行读取原文件,跳过要删除的用户
tmp_file=$(mktemp)
while IFS= read -r line; do
    # 跳过用户名行(奇数行)且用户名在删除列表中
    if (( count % 2 == 0 )) && [[ " ${users_to_delete[*]} " =~ " $line " ]]; then
        # 跳过该用户名及其下一行的密码
        read -r skip_password
    else
        echo "$line" >> "$tmp_file"
    fi
    ((count++))
done < "$db_file"
# 覆盖原文件
mv "$tmp_file" "$db_file"
# 重建数据库(根据实际配置)
# /usr/bin/db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db
echo "已删除指定用户"

注意:如果用户少,建议直接用 sed
sed -i '/^user1$/,+1d' /etc/vsftpd/virtual_users.txt


删除 pure-ftpd 用户(基于系统账户或 MySQL)

系统账户

#!/bin/bash
users=("ftpuser1" "ftpuser2")
for user in "${users[@]}"; do
    userdel -r "$user" 2>/dev/null
    echo "已删除系统用户: $user"
done

pure-ftpd + MySQL

#!/bin/bash
db_host="localhost"
db_user="root"
db_pass="password"
db_name="pureftpd"
users=("user1" "user2")
for user in "${users[@]}"; do
    mysql -h "$db_host" -u "$db_user" -p"$db_pass" "$db_name" \
        -e "DELETE FROM users WHERE User='$user';"
done
echo "MySQL用户已删除"

Windows 环境 (IIS FTP)

使用 IIS 管理器或 AppCmd.exe 删除用户(需管理员权限)。

脚本 (PowerShell):

# 要删除的用户列表
$users = @("ftpuser1", "ftpuser2")
# 方法1:通过本地用户和组删除FTP用户(如果是Windows账户)
foreach ($user in $users) {
    try {
        Remove-LocalUser -Name $user -ErrorAction Stop
        Write-Host "已删除本地用户: $user"
    } catch {
        Write-Warning "用户 $user 不存在或无法删除: $($_.Exception.Message)"
    }
}
# 方法2:如果FTP用户是IIS管理器中的单独设置(非Windows账户)
Import-Module WebAdministration
foreach ($user in $users) {
    # 具体路径取决于你的FTP站点名称,quot;MyFtpSite"
    $path = "IIS:\Sites\MyFtpSite\ftpusers\$user"
    if (Test-Path $path) {
        Remove-Item $path -Recurse
        Write-Host "已删除IIS FTP用户: $user"
    } else {
        Write-Warning "用户 $user 在IIS中不存在"
    }
}

通用方法:读取文件列表批量删除

如果用户信息保存在一个文本文件中(每行一个用户名):

#!/bin/bash
# 文件 userlist.txt 内容:user1\nuser2\n...
while IFS= read -r user; do
    # 根据你的FTP服务调用删除命令
    # vsftpd:
    # sed -i "/^$user$/,+1d" /etc/vsftpd/virtual_users.txt
    # 或 pure-ftpd:
    # pure-pw userdel "$user"
    echo "正在删除: $user"
done < userlist.txt

⚠️ 重要安全建议

  1. 备份:操作前备份用户数据库文件(如 /etc/vsftpd/virtual_users.txt)。
  2. 测试:先用少量用户测试脚本。
  3. 权限:脚本需以 root 或管理员权限运行。
  4. 停止服务:某些FTP服务(如 vsftpd)可能需要重启或重载配置才能生效:
    systemctl restart vsftpd   # 或 service vsftpd restart
  5. 验证删除:删除后确认用户已无法登录。

如果需要针对特定FTP服务的更详细脚本(如 ProFTPD、FileZilla Server),请告知具体软件版本,我可以提供针对性代码。

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