FTP(文件传输协议)是一种标准的客户端-服务器网络协议,允许用户在远程网络之间传输文件。
有多种可用于 Linux 的开源 FTP 服务器。最流行和最广泛使用的是PureFTPd
, ProFTPD
, and vsftpd
.
在本教程中,我们将在 CentOS 7 上安装 vsftpd(非常安全的 Ftp 守护进程)。它是一个稳定、安全且快速的 FTP 服务器。我们还将向您展示如何配置 vsftpd 以限制用户只能访问其主目录并使用 SSL/TLS 加密整个传输。
为了更安全、更快速的数据传输,请使用SCP
or SFTP
.
先决条件#
在继续本教程之前,请确保您以以下身份登录具有 sudo 权限的用户
.
在 CentOS 7 上安装 vsftpd#
vsftpd 软件包可在默认 CentOS 存储库中找到。要安装它,请发出以下命令:
sudo yum install vsftpd
安装软件包后,启动 vsftpd 守护进程并使其在引导时自动启动:
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
您可以通过打印其状态来验证 vsftpd 服务是否正在运行:
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 Thu 2018-11-22 09:42:37 UTC; 6s ago
Main PID: 29612 (vsftpd)
CGroup: /system.slice/vsftpd.service
└─29612 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
配置 vsftpd#
配置 vsftpd 服务涉及编辑/etc/vsftpd/vsftpd.conf
配置文件。大多数设置都在配置文件中详细记录。对于所有可用选项,请访问官方vsftpd
page.
在以下部分中,我们将介绍配置安全 vsftpd 安装所需的一些重要设置。
首先打开 vsftpd 配置文件:
sudo nano /etc/vsftpd/vsftpd.conf
1.FTP访问#
我们将只允许本地用户访问 FTP 服务器,找到anonymous_enable
and local_enable
指令并验证您的配置是否与以下行匹配:
/etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
2. 启用上传#
取消注释write_enable
设置以允许更改文件系统,例如上传和删除文件。
/etc/vsftpd/vsftpd.conf
3.Chroot监狱#
通过取消注释来防止 FTP 用户访问其主目录之外的任何文件chroot
指示。
/etc/vsftpd/vsftpd.conf
默认情况下,启用 chroot 后,如果用户锁定的目录可写,vsftpd 将拒绝上传文件。这是为了防止安全漏洞。
使用以下方法之一允许在启用 chroot 时上传。
4. 被动 FTP 连接#
vsftpd 可以使用任何端口进行被动 FTP 连接。我们将指定端口的最小和最大范围,然后在防火墙中打开该范围。
将以下行添加到配置文件中:
/etc/vsftpd/vsftpd.conf
pasv_min_port=30000
pasv_max_port=31000
5. 限制用户登录#
要仅允许某些用户登录 FTP 服务器,请在userlist_enable=YES
line:
/etc/vsftpd/vsftpd.conf
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
启用此选项后,您需要通过将用户名添加到/etc/vsftpd/user_list
文件(每行一个用户)。
6. 使用 SSL/TLS 保护传输#
为了使用 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_file
and rsa_private_key_file
指令,将其值更改为pam
文件路径并设置ssl_enable
指示YES
:
/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 服务#
完成编辑后,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
打开防火墙#
如果您正在运行firewall您需要允许 FTP 流量。
打开端口21
(FTP命令端口)、端口20
(FTP 数据端口)和30000-31000
(被动端口范围),发出以下命令:
sudo firewall-cmd --permanent --add-port=20-21/tcp
sudo firewall-cmd --permanent --add-port=30000-31000/tcp
通过键入以下内容重新加载防火墙规则:
firewall-cmd --reload
创建FTP用户#
为了测试我们的 FTP 服务器,我们将创建一个新用户。
- 如果您已经有一个想要授予 FTP 访问权限的用户,请跳过第一步。
- 如果你设置
allow_writeable_chroot=YES
在您的配置文件中跳过第三步。
-
创建一个名为newftpuser
:
sudo adduser newftpuser
接下来,您需要设置用户密码
:
sudo passwd newftpuser
-
将用户添加到允许的 FTP 用户列表中:
echo "newftpuser" | sudo tee -a /etc/vsftpd/user_list
-
创建FTP目录树并设置正确的权限
:
sudo mkdir -p /home/newftpuser/ftp/upload
sudo chmod 550 /home/newftpuser/ftp
sudo chmod 750 /home/newftpuser/ftp/upload
sudo chown -R newftpuser: /home/newftpuser/ftp
正如上一节所讨论的,用户将能够将其文件上传到ftp/upload
目录。
此时,您的 FTP 服务器已完全正常工作,您应该能够使用任何可配置为使用 TLS 加密的 FTP 客户端连接到您的服务器,例如文件齐拉
.
禁用 Shell 访问#
默认情况下,创建用户时,如果未明确指定,该用户将具有对服务器的 SSH 访问权限。
为了禁用 shell 访问,我们将创建一个新的 shell,它将简单地打印一条消息,告诉用户他们的帐户仅限于 FTP 访问。
运行以下命令来创建/bin/ftponly
shell 并使其可执行:
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
file:
echo "/bin/ftponly" | sudo tee -a /etc/shells
将用户 shell 更改为/bin/ftponly
:
sudo usermod newftpuser -s /bin/ftponly
使用相同的命令为您只想授予 FTP 访问权限的其他用户更改 shell。
结论#
在本教程中,您学习了如何在 CentOS 7 系统上安装和配置安全快速的 FTP 服务器。
如果您有任何问题或反馈,请随时发表评论。