在服务器管理和运维工作中,文件传输协议(FTP)依然扮演着不可或缺的角色,它为服务器与客户端之间提供了一种简单、可靠的文件交换方式,在 CentOS 系统上,vsftpd(Very Secure FTP Daemon)因其高性能、高安全性和稳定性而成为最主流的 FTP 服务器软件,手动配置 FTP 服务虽然步骤清晰,但过程繁琐且容易出错,尤其是在需要批量部署或快速搭建环境时,为此,编写一个自动化脚本,将所有安装、配置和启动步骤封装起来,不仅能极大提升效率,还能确保配置的一致性和准确性,本文将详细介绍如何在 CentOS 系统上,通过一个精心设计的 Shell 脚本,一键式搭建起一个安全、可用的 FTP 服务。

准备工作:脚本执行前的环境检查
在运行脚本之前,确保您的环境满足以下基本条件,这是脚本能够顺利执行的前提。
- 操作系统:一台安装了 CentOS 7 或 CentOS 8 及以上版本的服务器。
- 权限:拥有
root权限或sudo权限的用户账户,脚本中的安装、配置文件修改和服务启动等操作都需要管理员权限。 - 网络连接:服务器需要能够连接到互联网,以便通过
yum或dnf包管理器下载并安装vsftpd软件包。 - 防火墙与 SELinux:为了简化脚本的初始部署,建议在运行脚本前暂时关闭防火墙和 SELinux,或者在脚本中包含相应的配置规则,本文提供的脚本将包含
firewalld的配置,但 SELinux 的策略设置可能需要根据具体需求进行手动调整。
脚本核心逻辑分解
一个健壮的 FTP 搭建脚本应包含以下几个核心模块:软件安装、配置文件定制、FTP 用户创建、防火墙规则设置以及服务启动,下面我们将逐一解析这些模块的实现逻辑。
安装 vsftpd 软件包
脚本首先需要检查并安装 vsftpd,使用 yum(CentOS 7)或 dnf(CentOS 8+)可以轻松完成这一任务。-y 参数可以自动确认安装过程,避免交互式输入。
yum install -y vsftpd
配置 vsftpd.conf 文件
这是整个搭建过程的核心。vsftpd 的所有行为都由 /etc/vsftpd/vsftpd.conf 文件控制,脚本会先备份原始配置文件,然后使用 sed 或直接写入的方式,用一组安全且实用的参数覆盖或修改配置。
为了方便理解,以下表格列出了脚本中将要配置的关键参数及其作用:

| 参数 | 值 | 作用说明 |
|---|---|---|
anonymous_enable=NO |
NO |
禁止匿名用户登录,增强安全性。 |
local_enable=YES |
YES |
允许本地系统用户登录 FTP。 |
write_enable=YES |
YES |
允许登录用户进行写操作(上传、删除、重命名)。 |
chroot_local_user=YES |
YES |
将所有本地用户限制在其主目录内,防止用户访问系统其他目录,这是非常重要的安全措施。 |
allow_writeable_chroot=YES |
YES |
解决在启用 chroot 后,如果用户主目录可写则无法登录的问题。 |
pasv_enable=YES |
YES |
启用被动模式,这是大多数客户端(尤其是位于NAT/防火墙后的)连接的首选模式。 |
pasv_min_port=30000 |
30000 |
设置被动模式使用的端口范围下限。 |
pasv_max_port=31000 |
31000 |
设置被动模式使用的端口范围上限。 |
userlist_enable=YES |
YES |
启用用户列表文件来控制用户访问权限。 |
userlist_file=/etc/vsftpd/user_list |
/etc/vsftpd/user_list |
指定用户列表文件的路径。 |
userlist_deny=NO |
NO |
设置用户列表为“允许”列表(即只有文件中列出的用户才能登录)。 |
创建 FTP 专用用户
为了安全起见,不应直接使用 root 或其他系统常用用户作为 FTP 账户,脚本会创建一个专门用于 FTP 访问的新用户,并为其设置密码和主目录,确保该用户无法通过 SSH 登录服务器,可以将其 shell 设置为 /sbin/nologin。
useradd -d /var/ftp/myftpuser -s /sbin/nologin myftpuser passwd myftpuser
配置防火墙规则
如果服务器开启了 firewalld,必须开放 FTP 服务以及我们在配置文件中定义的被动模式端口范围。
firewall-cmd --permanent --add-service=ftp firewall-cmd --permanent --add-port=30000-31000/tcp firewall-cmd --reload
启动并设置开机自启
脚本需要启动 vsftpd 服务,并将其设置为开机自启动,确保服务器重启后 FTP 服务能自动运行。
systemctl start vsftpd systemctl enable vsftpd
完整的自动化搭建脚本
将以上所有逻辑整合在一起,我们得到一个功能完备的 Shell 脚本,您可以将以下内容保存为 setup_ftp.sh 文件。
#!/bin/bash
# =================================================================
# CentOS FTP Server Auto-Setup Script (vsftpd)
# =================================================================
# --- 可配置变量 ---
FTP_USER="ftpuser"
FTP_PASS="YourStrongPassword123" # 请修改为您自己的密码
FTP_DIR="/var/ftp/${FTP_USER}"
PASV_MIN_PORT="30000"
PASV_MAX_PORT="31000"
# --- 颜色输出 ---
RED='