如何在 CentOS 8 上使用 SSL/TLS 安装 vsftpd FTP 服务器
在此页
- 先决条件
- 安装 VSFTPD
- 为 VSFTPD 创建一个用户
- 配置 VSFTPD
- 配置防火墙和 SELLinux
- 连接到 VSFTPD 服务器
- 为 VSFTPD 配置 TLS 支持
- 验证 VSFTPD TLS 连接
- 结论
FTP 是一种广泛使用的协议,用于在服务器和客户端之间传输文件。现在有很多可用的开源 FTP 服务器,包括 FTPD、VSFTPD、PROFTPD 和 pureftpd。其中,VSFTPD是一种安全、快速、在全球范围内使用最广泛的协议。它也被称为“非常安全的文件传输协议守护进程”。它还支持 SSL、IPv6、显式和隐式 FTPS。
在本教程中,我们将向您展示如何在 CentOS 8 服务器上安装 VSFTPD 并使用 SSL/TLS 对其进行保护。
先决条件
- 一台运行 CentOS 8 的服务器。
- 在您的服务器上配置了根密码。
安装 VSFTPD
默认情况下,VSFTPD 在 CentOS 8 默认存储库中可用。您可以通过运行以下命令来安装它:
dnf install vsftpd -y
安装完成后,使用以下命令启动 VSFTPD 服务并使其在系统重启后启动:
systemctl start vsftpd
systemctl enable vsftpd
此时,您的 VSFTPD 服务器已安装并正在运行。您现在可以继续下一步。
为 VSFTPD 创建用户
接下来,您需要为 VSFTPD 创建一个新用户。所以你可以使用这个用户访问你的 FTP 服务器。
运行以下命令创建一个名为 vyom 的新用户,如下所示:
adduser vyom
接下来,使用以下命令为用户 vyom 设置密码:
passwd vyom
完成后,您可以继续下一步。
配置 VSFTPD
接下来,打开位于 /etc/vsftpd 目录的 VSFTPD 默认配置文件,如下所示:
nano /etc/vsftpd/vsftpd.conf
更改以下行:
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=NO
完成后保存并关闭文件。然后,重新启动 VSFTPD 服务并使用以下命令验证服务的状态:
systemctl restart vsftpd
systemctl status vsftpd
您应该看到以下输出:
? vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2020-02-21 00:43:57 EST; 6s ago
Process: 2698 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 2699 (vsftpd)
Tasks: 1 (limit: 6102)
Memory: 1020.0K
CGroup: /system.slice/vsftpd.service
??2699 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
Feb 21 00:43:57 centos8 systemd[1]: Stopped Vsftpd ftp daemon.
Feb 21 00:43:57 centos8 systemd[1]: Starting Vsftpd ftp daemon...
Feb 21 00:43:57 centos8 systemd[1]: Started Vsftpd ftp daemon.
此时,您的 VSFTPD 服务器已配置完毕。您现在可以通过 SELinux 和防火墙继续执行所有 VSFTPD。
配置防火墙和 SELLinux
默认情况下,CentOS 8 中启用了 SELinux。因此您需要为 VSFTPD 配置 SELinux。
您可以使用以下命令配置 SELinux 以允许 FTP 访问:
setsebool -P allow_ftpd_full_access=1
接下来,您需要通过 firewalld 允许 FTP 服务。您可以使用以下命令允许它:
firewall-cmd --zone=public --permanent --add-service=ftp
接下来,重新加载 firewalld 服务以应用防火墙配置更改:
firewall-cmd --reload
此时,您的防火墙和 SELinux 已配置为允许来自远程系统的传入 FTP 连接。您现在可以继续测试 FTP 连接。
连接到 VSFTPD 服务器
您的 VSFTPD 服务器现已安装和配置。现在,是时候从客户端系统连接 FTP 服务器了。
为此,请转到客户端系统并运行以下命令来连接您的 FTP 服务器:
ftp 172.20.10.3
您将被要求提供您的 FTP 用户和密码,如下所示:
Connected to 172.20.10.3.
220 (vsFTPd 3.0.3)
Name (172.20.10.3:root): vyom
331 Please specify the password.
Password:
230 Login successful.
成功建立连接后,您应该会看到以下输出:
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
现在,键入 exit 并按 Enter 按钮退出 FTP 会话。
使用 TLS 支持配置 VSFTPD
出于安全原因,最好使用 SSL/TLS 加密 FTP 传输。为此,您需要生成 SSL 证书并配置 VSFTPD 服务器以使用它。
首先,您需要在系统中安装 OpenSSL 包。您可以使用以下命令安装它:
dnf install openssl -y
安装后,创建一个新目录来存储 SSL 证书:
mkdir /etc/ssl/private
接下来,使用以下命令生成自签名证书:
openssl req -newkey rsa:2048 -nodes -keyout /etc/ssl/private/vsftpd.key -x509 -days 365 -out /etc/ssl/private/vsftpd.crt
提供所有必需的信息,如下所示:
Generating a RSA private key
...+++++
...........+++++
writing new private key to '/etc/ssl/private/vsftpd.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:IN
State or Province Name (full name) []:GUJ
Locality Name (eg, city) [Default City]:JUN
Organization Name (eg, company) [Default Company Ltd]:IT
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:ftpserver
Email Address []:
生成 SSL 证书后,您需要配置 VSFTPD 以使用此证书。
打开VSFTPD默认配置文件如下图:
nano /etc/vsftpd/vsftpd.conf
在文件末尾添加以下行:
#Path of the SSL certificate
rsa_cert_file=/etc/ssl/private/vsftpd.crt
rsa_private_key_file=/etc/ssl/private/vsftpd.key
#Enable the SSL
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
#TSL is more secure than SSL so enable ssl_tlsv1_2.
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH
#Enable SSL debugging to store all VSFTPD log.
debug_ssl=YES
完成后保存并关闭文件。然后,重新启动 VSFTPD 服务以应用更改:
systemctl restart vsftpd
此时,您的 VSFTPD 服务器已配置为使用 SSL 证书。您现在可以继续下一步。
验证 VSFTPD TLS 连接
您的 VSFTPD 服务器现在受到 SSL/TLS 支持的保护。接下来,尝试从命令行连接您的 FTP 服务器,如下所示:
ftp 172.20.10.3
您应该会在以下输出中看到错误:
Connected to 172.20.10.3.
220 (vsFTPd 3.0.2)
Name (172.20.10.3:root): vyom
530 Non-anonymous sessions must use encryption.
Login failed.
421 Service not available, remote server has closed connection
ftp>
您无法从命令行客户端连接到您的 VSFTP 服务器。因为它不支持 SSL/TLS 支持。
因此,您需要使用支持 TLS 连接的 FTP 客户端下载并测试 VSFTPD 连接。
为此,请转到客户端系统并安装 FileZilla 客户端程序包。
安装好FileZilla后,打开FileZilla软件,如下图:

接下来,打开站点管理器,如下所示:

点击 New Site 按钮添加一个新的 FTP 连接,如下图所示:

提供您的 FTP 服务器 IP,选择 FTP 协议,选择“通过 TLS 使用显式 FTP”,选择询问密码,提供您的 FTP 服务器的用户名,然后单击“连接”按钮。系统将要求您提供 FTP 用户的密码,如下所示:

提供您的 FTP 密码并单击确定按钮。系统将要求您验证用于 SSL/TLS 连接的证书,如下所示:

单击“确定”按钮以验证证书。成功建立连接后,您应该会看到以下屏幕:

结论
在上面的指南中,我们在 CentOS 8 上安装了 VSFTPD 服务器。我们还配置了 VSFTPD 服务器以使用 SSL/TLS 证书。您的 FTP 服务器现已安全。如果您有任何问题,请随时问我。