TP(文件传输协议)是一种客户端-服务器网络协议,允许用户在远程计算机上传输文件。
有许多开源的FTP服务器可用于Linux。最流行的和常用的服务器是PureFTPD ,ProFTPD和vsftpd 。
在本教程中,我们将在 CentOS 8 上安装 vsftpd(非常安全的 Ftp 守护程序)。它是一个稳定、安全和快速的 FTP 服务器。我们还将向您展示如何配置 vsftpd 已将用户限制为其主目录,并使用 SSL/TLS 加密数据传输。
vsftpd 包在默认 CentOS 存储库中可用。若要安装它,请以 root 或用户为sudo 权限运行以下命令:
sudo dnf install vsftpd
安装包后,启动 vsftpd 守护程序,并使其在启动时自动启动:
sudo systemctl enable vsftpd --now
验证服务状态:
sudo systemctl status vsftpd
输出将类似,显示 vsftpd 服务处于活动状态并运行:
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2020-03-30 15:16:51 EDT; 10s ago
Process: 2880 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
...
vsftpd 服务器设置存储在配置文件中。大多数设置在文件中都记录得很好。有关所有可用选项,请访问官方 vsftpd页面。/etc/vsftpd/vsftpd.conf
在以下部分中,我们将介绍配置安全 vsftpd 安装所需的一些重要设置。
首先打开 vsftpd 配置文件:
sudo nano /etc/vsftpd/vsftpd.conf
我们将仅允许访问 FTP 服务器本地用户,查找 和 指令,并确保您的配置与以下行匹配:anonymous_enablelocal_enable
/etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
取消注释以允许更改文件系统,如上载和删除文件。write_enable
/etc/vsftpd/vsftpd.conf
write_enable=YES
通过取消注释,防止 FTP 用户访问其主目录以外的任何文件。chroot
/etc/vsftpd/vsftpd.conf
chroot_local_user=YES
默认情况下,启用 chroot 时,如果用户锁定的目录可写入,则 vsftpd 将拒绝上载文件。这是为了防止安全漏洞。
在启用 chroot 时,请使用以下方法之一允许上载。
vsftpd 可以使用任何端口进行无源 FTP 连接。我们将指定端口的最小和最大范围,并在防火墙中打开范围。
将以下行添加到配置文件中:
/etc/vsftpd/vsftpd.conf
pasv_min_port=30000
pasv_max_port=31000
若要仅允许某些用户登录到 FTP 服务器,请添加行后以下行:userlist_enable=YES
/etc/vsftpd/vsftpd.conf
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
启用此选项后,您需要通过将用户名添加到文件中(每行一个用户)来显式指定哪些用户能够登录。/etc/vsftpd/user_list
为了使用 SSL/TLS 加密 FTP 传输,您需要拥有 SSL 证书并配置 FTP 服务器以使用它。
您可以使用由受信任的证书颁发机构签名的现有 SSL 证书,或创建自签名证书。
如果您有指向 FTP 服务器 IP 地址地域或子域,可以轻松地生成免费的\”让我们加密 SSL 证书\”。
在本教程中,我们将使用该工具生成自签名的 SSL证书。openssl
以下命令将创建 2048 位私钥和自签名证书,有效期为 10 年。私钥和证书都将保存在同一个文件中:
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
创建 SSL 证书后,打开 vsftpd 配置文件:
sudo nano /etc/vsftpd/vsftpd.conf
查找 和 指令,将它们的值更改为文件路径,然后将指令设置为 :rsa_cert_filersa_private_key_filepamssl_enableYES
/etc/vsftpd/vsftpd.conf
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem
ssl_enable=YES
如果未指定,FTP 服务器将仅使用 TLS 进行安全连接。
完成编辑后,vsftpd 配置文件(不包括注释)应类似:
/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
chroot_local_user=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
tcp_wrappers=YES
user_sub_token=$USER
local_root=/home/$USER/ftp
pasv_min_port=30000
pasv_max_port=31000
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem
ssl_enable=YES
保存文件并重新启动 vsftpd 服务以使更改生效:
sudo systemctl restart vsftpd
如何配置和管理防火墙在 centos-8 如果您正在运行 一个,您需要允许 FTP 流量。
要打开端口(FTP 命令端口)、端口(FTP 数据端口)和(被动端口范围),请输入以下命令:212030000-31000
sudo firewall-cmd --permanent --add-port=20-21/tcp
sudo firewall-cmd --permanent --add-port=30000-31000/tcp
通过键入: 重新加载防火墙规则:
firewall-cmd --reload
为了测试 FTP 服务器,我们将创建一个新用户。
此时,您的 FTP 服务器已完全正常运行,您应该能够使用任何可配置为使用 TLS 加密(如FileZilla)的 FTP 客户端连接到服务器。
默认情况下,在创建用户时(如果未显式指定)用户将具有对服务器的 SSH 访问权限。
要禁用 shell 访问,我们将创建一个新 shell,该 shell 将仅打印一条消息,告诉用户其账户仅限于 FTP 访问。
运行以下命令以创建 shell 并使其可执行:/bin/ftponly
echo -e \'#!/bin/sh\\necho \"This account is limited to FTP access only.\"\' | sudo tee -a /bin/ftponly
sudo chmod a+x /bin/ftponly
将新 shell 追加到文件中的有效 shell 列表中:/etc/shells
echo \"/bin/ftponly\" | sudo tee -a /etc/shells
将用户外壳更改为 :/bin/ftponly
sudo usermod newftpuser -s /bin/ftponly
使用相同的命令更改要仅向 FTP 访问了其他用户的 shell。