Ftp(文件传输协议)是一种标准网络协议,用于在远程网络之间传输文件。
有许多可用于 Linux 的开源 FTP 服务器。最流行和使用最广泛的是PureFTPd 、ProFTPD 和vsftpd 。在本教程中,我们将安装 vsftpd(非常安全的 Ftp 守护程序)。它是一个稳定、安全、快速的 FTP 服务器。我们还将向您展示如何配置 vsftpd 以将用户限制在他们的主目录中并使用 SSL/TLS 加密整个传输。
尽管本教程是为 Ubuntu 18.04 编写的,但相同的说明适用于 Ubuntu 16.04 和任何基于 Debian 的发行版,包括 Debian、Linux Mint 和 Elementary OS。
要获得更安全和更快的数据传输,请使用SCP 或SFTP 。
1、先决条件在继续本教程之前,请确保您以具有 sudo 权限的用户身份登录 。
2、在 Ubuntu 18.04 上安装 vsftpdvsftpd 软件包在 Ubuntu 存储库中可用。要安装它,只需运行以下命令:
sudo apt update
sudo apt install vsftpd
vsftpd 服务将在安装过程完成后自动启动。通过打印服务状态来验证它:
执行命令:sudo systemctl status vsftpd
输出将如下所示,表明 vsftpd 服务处于活动状态并正在运行:
3、配置 vsftpd
可以通过编辑/etc/vsftpd.conf文件来配置 vsftpd 服务器。大多数设置都在配置文件中详细记录。有关所有可用选项,请访问官方 vsftpd 页面。
在以下部分中,我们将介绍配置安全 vsftpd 安装所需的一些重要设置。
首先打开 vsftpd 配置文件:
3.1 FTP访问
我们将只允许本地用户访问 FTP 服务器,找到anonymous_enable和local_enable指令并验证您的配置是否与以下行匹配:
anonymous_enable=NO
local_enable=YES
3.2 启用上传
取消注释write_enable设置以允许更改文件系统,例如上传和删除文件。
write_enable=YES
3.3 Chroot监狱
要防止 FTP 用户访问其主目录之外的任何文件,请取消注释该chroot设置。
chroot_local_user=YES
默认情况下,为了防止安全漏洞,当启用 chroot 时,如果用户被锁定的目录是可写的,vsftpd 将拒绝上传文件。
启用 chroot 时,使用以下方法之一允许上传。
方法 1. - 允许上传的推荐方法是保持 chroot 启用,并配置 FTP 目录。在本教程中,我们将在用户主目录中创建一个ftp目录,该目录将用作 chroot 和一个uploads用于上传文件的可写目录。
user_sub_token=$USER
local_root=/home/$USER/FTP
方法 2. - 另一种选择是在 vsftpd 配置文件中添加以下指令。如果您必须授予用户对其主目录的可写访问权限,请使用此选项。
allow_writeable_chroot=YES
3.4 被动 FTP 连接
vsftpd 可以使用任何端口进行被动 FTP 连接。我们将指定端口的最小和最大范围,然后在我们的防火墙中打开该范围。
将以下行添加到配置文件中:
pasv_min_port=30000
pasv_max_port=31000
3.5.限制用户登录
要仅允许某些用户登录 FTP 服务器,请在文件末尾添加以下行:
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
启用此选项后,您需要通过将用户名添加到文件中来明确指定哪些用户能够登录/etc/vsftpd.user_list(每行一个用户)。
3.6 使用 SSL/TLS 保护传输为了使用 SSL/TLS 加密 FTP 传输,您需要拥有 SSL 证书并配置 FTP 服务器以使用它。
您可以使用由受信任的证书颁发机构签名的现有 SSL 证书或创建自签名证书。
如果您有一个指向 FTP 服务器 IP 地址的域或子域,您可以轻松生成免费的 Let's Encrypt SSL 证书。
我们将使用该命令生成自签名 SSL 证书。openssl
以下命令将创建一个有效期为 10 年的 2048 位私钥和自签名证书。私钥和证书都将保存在同一个文件中:
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
创建 SSL 证书后,打开 vsftpd 配置文件:
sudo nano /etc/vsftpd.conf
找到rsa_cert_fileandrsa_private_key_file指令,将它们的值更改为pam文件路径并将ssl_enable指令设置为YES:
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
如果没有另外指定,FTP 服务器将只使用 TLS 来建立安全连接。
4、重启 vsftpd 服务完成编辑后,vsftpd 配置文件(不包括注释)应如下所示:
listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
user_sub_token=$USER
local_root=/home/$USER/ftp
pasv_min_port=30000
pasv_max_port=31000
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
保存文件并重新启动 vsftpd 服务以使更改生效:
执行命令:sudo systemctl restart vsftpd
5、打开防火墙
如果您正在运行UFW 防火墙,则 需要允许 FTP 流量。
要打开端口21(FTP 命令端口)、端口20(FTP 数据端口)和30000-31000(被动端口范围),请运行以下命令:
sudo ufw allow 20:21/tcp
sudo ufw allow 30000:31000/tcp
为避免被锁定,请打开端口22:
通过禁用和重新启用 UFW 重新加载 UFW 规则:
sudo ufw disable
sudo ufw enable
要验证更改运行:
sudo ufw status
6、创建 FTP 用户
为了测试我们的 FTP 服务器,我们将创建一个新用户。
如果您已经有一个要授予 FTP 访问权限的用户,请跳过第一步。
如果您allow_writeable_chroot=YES在配置文件中设置,请跳过第 3 步。
6.1 创建一个名为的新用户newftpuser:
执行命令:sudo adduser newftpuser
6.2 将用户添加到允许的 FTP 用户列表:
执行命令:echo "newftpuser" | sudo tee -a /etc/vsftpd.user_list
6.3创建 FTP 目录树并设置正确的权限 :
执行命令1:sudo mkdir -p /home/newftpuser/ftp/upload
执行命令2:sudo chmod 550 /home/newftpuser/ftp
执行命令3:sudo chmod 750 /home/newftpuser/ftp/upload
执行命令4:sudo chown -R newftpuser: /home/newftpuser/ftp
如上一节所述,用户将能够将其文件上传到ftp/upload目录。
此时,您的 FTP 服务器功能齐全,您应该能够使用任何可以配置为使用 TLS 加密的 FTP 客户端(例如FileZilla )连接到您的服务器 。
7、禁用外壳访问默认情况下,创建用户时,如果未明确指定,用户将拥有对服务器的 SSH 访问权限。
要禁用 shell 访问,我们将创建一个新的 shell,它会简单地打印一条消息,告诉用户他们的帐户仅限于 FTP 访问。
创建/bin/ftponly外壳并使其可执行:
执行命令1:echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | sudo tee -a /bin/ftponly
执行命令2:sudo chmod a x /bin/ftponly
将新的 shell 附加到/etc/shells文件中的有效 shell 列表中:
执行命令:echo "/bin/ftponly" | sudo tee -a /etc/shells
将用户外壳更改为/bin/ftponly:
执行命令:sudo usermod newftpuser -s /bin/ftponly
使用相同的命令更改您只想授予 FTP 访问权限的所有用户的 shell。
8、结论在本教程中,您学习了如何在 Ubuntu 18.04 系统上安装和配置安全快速的 FTP 服务器。
如果您有任何问题或反馈,请随时发表评论。
,