介绍
FTP,简称文件传输协议,是一个网络协议,曾经被广泛用于在客户端和服务器之间移动文件. 它已被更快,更安全,更方便的方式交付文件取代. 许多随机的互联网用户预计直接从他们的Web浏览器下载https
,命令行用户更有可能使用安全的协议,如scp
或sFTP
(https://andsky.com/tech/tutorials/how-to-use-sftp-to-securely-transfer-files-with-a-remote-server)。
FTP 通常用于支持具有非常具体需求的旧应用程序和工作流程. 如果您有选择使用哪个协议,请考虑探索更现代的选项. 然而,当您需要 FTP 时,vsftpd 是一个很好的选择. 优化了安全性,性能和稳定性,vsftpd 提供了强大的保护,防止其他 FTP 服务器中发现的许多安全问题,并且是许多 Linux 发行版的默认。
在本教程中,我们将向您展示如何为一个匿名的FTP下载网站设置vsftpd,旨在广泛分发公共文件,而不是使用FTP来管理文件,预计具有sudo
特权的本地用户将使用scp
,sFTP
或任何其它安全协议来传输和维护文件。
前提条件
要跟随这个教程,你需要:
- ** 具有
sudo
特权的非根用户的 Ubuntu 16.04 服务器:您可以在我们的 Ubuntu 16.04 初始服务器设置 指南中了解有关如何设置具有这些特权的用户的更多信息。
一旦你有服务器的地方,你已经准备好开始。
步骤 1 – 安装 vsftpd
我们将通过更新我们的包列表并安装vsftpd
大门开始:
1sudo apt-get update
2sudo apt-get install vsftpd
安装完成后,我们将复制配置文件,以便我们可以从一个空的配置开始,将原始保存为备份。
1sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
有了配置的备份,我们已经准备好配置防火墙。
第2步:打开防火墙
首先,让我们检查防火墙的状态,看看是否已启用,如果是这样,看看目前允许的内容,以便当测试配置的时候,您不会遇到防火墙规则阻止您。
1sudo ufw status
在我们的案例中,我们看到如下:
1[secondary_label Output]
2Output
3Status: active
4
5To Action From
6-- ------ ----
7OpenSSH ALLOW Anywhere
8OpenSSH (v6) ALLOW Anywhere (v6)
在此示例中,只允许ssh
流量,所以我们需要为 FTP 流量添加规则。
在许多应用程序中,你可以使用sudo ufw app list
并以名义启用它们,但FTP不是其中之一,因为ufw也检查服务的端口和协议的 /etc/服务,我们仍然可以以名义添加FTP。
1sudo ufw allow ftp-data
2sudo ufw allow ftp
3sudo ufw status
现在我们的防火墙规则看起来像:
1[secondary_label Output]
2Status: active
3
4To Action From
5-- ------ ----
6OpenSSH ALLOW Anywhere
721/tcp ALLOW Anywhere
820/tcp ALLOW Anywhere
9OpenSSH (v6) ALLOW Anywhere (v6)
1021/tcp (v6)ALLOW Anywhere (v6)
1120/tcp (v6)ALLOW Anywhere (v6)
有了安装的vsftpd
和打开所需的端口,我们已经做好了准备。
步骤 3 – 准备文件空间
首先,我们将创建我们计划托管文件的目录,使用p
旗帜创建中间目录.目录结构将允许您将所有FTP目录保持在一起,然后添加其他需要身份验证的文件夹:
1sudo mkdir -p /var/ftp/pub
接下来,我们会将目录权限设置为nobody:nogroup
。
1sudo chown nobody:nogroup /var/ftp/pub
最后,我们将在目录中创建一个文件,以便稍后进行测试。
1echo "vsftpd test file" | sudo tee /var/ftp/pub/test.txt
有了这个样本文件,我们已经准备好配置 vsftpd 戴蒙了。
步骤 4 – 配置匿名访问
我们正在为具有sudo
权限的用户设置文件,以便广泛分发给公众。为了做到这一点,我们将配置vsftpd
以允许匿名下载。我们预计文件管理员将使用scp
,sftp
或任何其他安全方法来维护文件,因此我们不会允许通过FTP上传文件。
配置文件包含了 vsftpd 的许多配置选项。
我们将从已经设置的更改开始:
1sudo nano /etc/vsftpd.conf
查找以下值并编辑它们以匹配下面的值:
1[label /etc/vsftpd.conf]
2. . .
3# Allow anonymous FTP? (Disabled by default).
4anonymous_enable=YES
5#
6
7We’ll set the local_enable setting to “NO” because we’re not going to allow users with local accounts to upload files via FTP. The comment in the configuration file can be a little confusing, too, because the line is uncommented by default.
8# Uncomment this to allow local users to log in.
9local_enable=NO
10. . .
除了更改现有设置外,我们还会添加一些额外的配置。
<$>[注]
** 注:** 您可以使用 man vsftpd.conf
命令了解所有选项。
将这些设置添加到配置文件中,它们不依赖于顺序,因此您可以在文件中的任何地方放置它们。
1#
2# Point users at the directory we created earlier.
3anon_root=/var/ftp/
4#
5# Stop prompting for a password on the command line.
6no_anon_password=YES
7#
8# Show the user and group as ftp:ftp, regardless of the owner.
9hide_ids=YES
10#
11# Limit the range of ports that can be used for passive FTP
12pasv_min_port=40000
13pasv_max_port=50000
<$>[注]
注: 如果您正在使用 UFW,这些设置将以是
的方式工作. 如果您正在使用 Iptables,您可能需要添加规则来打开您在pasv_min_port
和pasv_max_port
之间指定的端口。
一旦这些被添加,保存并关闭文件,然后用以下命令重新启动 DAEMON:
1sudo systemctl restart vsftpd
「systemctl」不會顯示所有服務管理指令的結果,所以如果您想確定成功,請使用下列指令:
1sudo systemctl status vsftpd
如果最后一行说看起来如下,你成功了:
1[secondary_label Output]
2Aug 17 17:49:10 vsftpd systemd[1]: Starting vsftpd FTP server...
3Aug 17 17:49:10 vsftpd systemd[1]: Started vsftpd FTP server.
现在我们准备好测试我们的工作。
步骤 5 – 测试匿名访问
从一个网页浏览器输入 ftp:// 然后是 your 服务器的 IP 地址。
ftp://203.0.113.0
如果一切按预期工作,您应该看到pub
目录:
您还应该能够点击pub
,参见test.txt
,然后右键单击保存文件。
您还可以从命令行测试,这将为您的配置提供更多反馈。我们将以被动模式对服务器进行 ftp,这在许多命令行客户端上是p
旗帜。
<$>[注]
注: Windows 原始命令行 FTP 客户端 ftp.exe
完全不支持被动模式。
1ftp -p 203.0.113.0
当被请求用户名时,您可以输入ftp
或匿名
。它们等同,所以我们会使用更短的ftp
:
1Connected to 203.0.113.0.
2220 (vsftpd 3.0.3)
3Name (203.0.113.0:21:sammy): ftp
点击 Enter 后,您将收到以下内容:
1[secondary_label Output]
2
3230 Login successful.
4Remote system type is UNIX.
5Using binary mode to transfer files.
6ftp>
确保被动模式按预期工作:
1ls
1[secondary_label Output]
2227 Entering Passive Mode (45,55,187,171,156,74).
3150 Here comes the directory listing.
4drwxr-xr-x 2 ftp ftp 4096 Aug 17 19:30 pub
5226 Directory send OK.
作为匿名用户,您应该能够通过得到
命令将文件传输到本地机器:
1cd pub
2get test.txt
1[secondary_label Output]
2ftp> get test.txt
3227 Entering Passive Mode (45,55,187,171,156,73).
4150 Opening BINARY mode data connection for test.txt (14 bytes).
5226 Transfer complete.
616 bytes received in 0.0121 seconds (1325 bytes/s)
此输出告知您已成功下载该文件,您可以看看它是否在本地文件系统上,如果您喜欢。
我们还想确保匿名用户不会填写我们的文件系统,所以为了测试,我们将转向并尝试将相同的文件放回服务器,但以新的名称:
1put test.txt upload.txt
1[secondary_label Output]
2227 Entering Passive Mode (104,236,10,192,168,254).
3550 Permission denied.
现在我们已经确认了这一点,我们将离开监视器,为下一步做准备:
1bye
现在我们已经确认匿名连接按预期运行,我们将关注用户尝试连接时会发生什么。
步骤 6 – 尝试作为用户连接
您可能还想确保您无法作为用户连接到本地帐户,因为此设置不会加密他们的登录凭据。
1ftp -p 203.0.113.0
1[secondary_label Output]
2Connected to 203.0.113.0:21.
3220 (vsFTPd 3.0.3)
4Name (203.0.113.0:21:your_user)
5530 This FTP server is anonymous only.
6ftp: Login failed.
7ftp>
这些测试确认您仅为匿名下载设置了系统。
结论
在本教程中,我们涵盖了如何配置vsftpd仅用于匿名下载,这使我们能够支持旧的应用程序无法使用更现代的协议或广泛发布的FTPURL,这将是很难更新。