FTP(File Transfer Protocol)是一种提供对服务器上的文件的访问协议。它是最早允许用户通过互联网下载文件的协议之一。通过 FTP 协议,用户可以轻松地在服务器上下载和上传文件。
Vsftpd(Very Secure FTP daemon)是一种安全的 FTP 守护进程,是 FTP 协议的升级。它通过加密传递数据,保证文件安全传输,不受黑客的攻击。
在本篇文章中,我们将焦点放在 CentOS 8 / RHEL 8 上的 vsftpd 上。
1) 安装 vsftpd
运行 dnf 命令,安装vsftpd
$ sudo dnf install vsftpd
按 y 并按 ENTER 开始安装,下面的输出确认 vsftpd 已经成功安装。
查看 vsftpd 版本
[linuxtechi@centos8-vsftpd ~]$ rpm -q vsftpd
vsftpd-3.0.3-31.el8.x86_64
[linuxtechi@centos8-vsftpd ~]$
输出结果应与终端上打印的版本一致。要获取 vsftpd 的更详细信息,可以在末尾添加 -i 标志,如下所示
$ rpm -qi vsftpd
启动 vsftpd 服务
$ sudo systemctl start vsftpd
设置开机自启动 vsftpd 服务
$ sudo systemctl enable vsftpd --now
查看 vsftpd 服务状态
$ sudo systemctl status vsftpd
2) 创建 FTP 用户及其目录
接下来,我们将创建一个用于访问 FTP 服务器的用户,名称可以酌情修改。
$ sudo adduser ftpuser
$ sudo passwd ftpuser
有了 FTP 用户之后,我们将继续创建 FTP 目录,并分配以下权限和目录所有权。
$ sudo mkdir -p /home/ftpuser/ftp_dir
$ sudo chmod -R 750 /home/ftpuser/ftp_dir
$ sudo chown -R ftpuser: /home/ftpuser/ftp_dir
我们还需要将 FTP 用户添加到 /etc/vsftpd/user_list 文件中,以允许用户访问 VSFTP 服务器。
$ sudo bash -c 'echo ftpuser >> /etc/vsftpd/user_list'
3) 配置 vsftpd
vsftpd 的默认配置文件是 /etc/vsftpd/vsftpd.conf ,该文件充满了各种指令,可帮助加强您的 FTP 服务器的安全性。
允许本地用户远程访问 FTP 服务器,并阻止匿名用户,请设置如下行
anonymous_enable=NO
local_enable=YES
授予用户运行任何 FTP 命令的权限,并进行上传、下载和删除文件等更改,请设置如下行
write_enable=YES
出于安全考虑,您可以选择限制用户访问其主目录以外的任何文件和目录,请设置如下行
chroot_local_user=YES
授予用户对其各自主目录的写访问权,请设置如下行
allow_writeable_chroot=YES
接下来,我们将自定义端口来启用被动 FTP 连接。在本例中,我们将指定端口 30000 和 31000。稍后我们将在防火墙上打开这些。
pasv_min_port=30000
pasv_max_port=31000
接下来,我们将仅允许在 /etc/vsftpd/user_list 中定义的用户访问服务器,请设置如下行
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
保存文件并重启 vsftpd 服务
$ sudo systemctl restart vsftpd
通过运行 ftp 命令测试 FTP 连通性
$ ftp ip-address
输入 ftp 用户名,然后提供密码,您应该得到如下所示的输出。
4) 配置 SSL / TLS 证书
为了加密服务器和客户端系统之间的通信,我们需要生成一个 TLS 证书,然后配置服务器使用它。
运行下面的命令,生成证书
$ sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
随后会出现一系列提示,要求您提供一些详细信息,例如国家名称、州或省以及组织名称。
返回到配置文件 /etc/vsftpd/vsftpd.conf,指定证书文件的路径。
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd.pem
然后,指示服务器打开 SSL
ssl_enable=YES
保存文件,重启 vsftpd 服务
$ sudo systemctl restart vsftpd
5) 防火墙中放行 FTP 端口
如果您正在运行防火墙,则需要允许以下端口
- 20 – to allow FTP traffic
- 21 – FTP data port
- 30000-31000 – To allow passive communication with the FTP server.
运行如下命令,放行端口
$ sudo firewall-cmd --permanent --add-port=20-21/tcp
$ sudo firewall-cmd --permanent --add-port=30000-31000/tcp
重新加载防火墙
$ sudo firewall-cmd --reload
6) 测试 FTP
所有设置完成后,是时候测试我们的连接了。在本例中,我们使用一个名为 FileZilla 的 FTP 客户端,它是客户端和服务器系统的免费 FTP 客户端,它支持普通 FTP 和 TLS 之上的 FTP。
启动后,界面如下所示。提供主机的 IP 地址,FTP 用户名和密码,然后点击 Quickconnect 按钮。
不久之后,弹出窗口将显示 FTP 服务器的证书和会话详细信息。要继续连接,请单击“Always trust this certificate in future session”,然后按 enter 键。
在右下窗格中,远程服务器的主目录如所示。现在你可以上传、下载和编辑文件了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。