如何在Ubuntu16.04上为匿名下载设置vsftpd

来自菜鸟教程
跳转至:导航、​搜索

介绍

FTP是文件传输协议的缩写,是一种网络协议,曾经被广泛用于在客户端和服务器之间移动文件。 此后,它已被更快、更安全、更方便的文件传递方式所取代。 许多普通的 Internet 用户希望使用 https 从他们的 Web 浏览器直接下载,而命令行用户更有可能使用安全协议,例如 scp 或 sFTP。

FTP 通常用于支持具有非常特殊需求的遗留应用程序和工作流。 如果您可以选择使用哪种协议,请考虑探索更现代的选项。 但是,当您确实需要 FTP 时,vsftpd 是一个很好的选择。 vsftpd 针对安全性、性能和稳定性进行了优化,针对其他 FTP 服务器中发现的许多安全问题提供了强大的保护,并且是许多 Linux 发行版的默认设置。

在本教程中,我们将向您展示如何为旨在广泛分发公共文件的匿名 FTP 下载站点设置 vsftpd。 具有 sudo 权限的本地用户应该使用 scp、sFTP 或他们选择的任何其他安全协议来传输和维护文件,而不是使用 FTP 来管理文件.

先决条件

要学习本教程,您需要:

  • 具有 sudo 权限的非 root 用户的 Ubuntu 16.04 服务器:您可以在我们的 使用 Ubuntu 16.04 的初始服务器设置指南中了解有关如何设置具有这些权限的用户的更多信息。

一旦你有了服务器,你就可以开始了。

第 1 步 — 安装 vsftpd

我们将首先更新我们的包列表并安装 vsftpd 守护进程:

sudo apt-get update
sudo apt-get install vsftpd

安装完成后,我们将复制配置文件,以便我们可以从空白配置开始,将原始配置保存为备份。

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

备份配置后,我们就可以配置防火墙了。

第 2 步 — 打开防火墙

首先,让我们检查防火墙状态以查看它是否已启用,如果已启用,则查看当前允许的内容,以便在测试配置时不会遇到防火墙规则阻止您。

sudo ufw status

在我们的例子中,我们看到以下内容:

OutputOutput
Status: active

To Action  From
-- ------  ----
OpenSSH ALLOW   Anywhere
OpenSSH (v6)   ALLOW   Anywhere (v6)

您可能有其他规则或根本没有防火墙规则。 在此示例中,仅允许 ssh 流量,因此我们需要为 FTP 流量添加规则。

对于许多应用程序,您可以使用 sudo ufw app list 并通过名称启用它们,但 FTP 不是其中之一。 因为 ufw 也会检查 /etc/services 的服务端口和协议,所以我们仍然可以按名称添加 FTP。 我们需要端口 20 上的 ftp-data 和端口 21 上的 ftp(用于命令):

sudo ufw allow ftp-data
sudo ufw allow ftp
sudo ufw status

现在我们的防火墙规则如下所示:

OutputStatus: active

To Action  From
-- ------  ----
OpenSSH  ALLOW   Anywhere
21/tcp ALLOW   Anywhere
20/tcp ALLOW   Anywhere
OpenSSH (v6)   ALLOW   Anywhere (v6)
21/tcp (v6)ALLOW   Anywhere (v6)
20/tcp (v6)ALLOW   Anywhere (v6)

安装 vsftpd 并打开必要的端口后,我们就可以继续了。

第 3 步 — 为文件准备空间

首先,我们将创建计划托管文件的目录,使用 -p 标志创建中间目录。 目录结构将允许您将所有 FTP 目录保存在一起,然后添加其他需要身份验证的文件夹:

sudo mkdir -p /var/ftp/pub

接下来,我们将目录权限设置为 nobody:nogroup。 稍后,我们将配置 FTP 服务器以将所有文件显示为由 ftp 用户和组拥有。

sudo chown nobody:nogroup /var/ftp/pub

最后,我们将在目录中创建一个文件以供稍后测试。

 echo "vsftpd test file" | sudo tee /var/ftp/pub/test.txt

有了这个示例文件,我们就可以配置 vsftpd 守护进程了。

第 4 步 — 配置匿名访问

我们正在为具有 sudo 权限的用户进行设置,以维护文件以广泛分发给公众。 为此,我们将配置 vsftpd 以允许匿名下载。 我们希望文件管理员使用 scp、sftp 或任何其他安全方法来维护文件,因此我们不会启用通过 FTP 上传文件。

配置文件包含 vsftpd 的许多配置选项中的一些。

我们将从更改已设置的开始:

sudo nano /etc/vsftpd.conf

找到以下值并对其进行编辑,使其与以下值匹配:

/etc/vsftpd.conf

. . .
# Allow anonymous FTP? (Disabled by default).
anonymous_enable=YES
#

We’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. 
# Uncomment this to allow local users to log in.
local_enable=NO
. . .

除了更改现有设置之外,我们还将添加一些额外的配置。

注意:你可以通过man vsftpd.conf命令了解全部选项。


将这些设置添加到配置文件中。 它们不依赖于顺序,因此您可以将它们放在文件中的任何位置。

#
# Point users at the directory we created earlier.
anon_root=/var/ftp/
#
# Stop prompting for a password on the command line.
no_anon_password=YES
#
# Show the user and group as ftp:ftp, regardless of the owner.
hide_ids=YES
#
# Limit the range of ports that can be used for passive FTP
pasv_min_port=40000
pasv_max_port=50000

注意: 如果您使用的是 UFW,这些设置将按原样工作。 如果您使用 Iptables,您可能需要添加规则以打开您在 pasv_min_port 和 pasv_max_port 之间指定的端口。


添加后,保存并关闭文件。 然后,使用以下命令重新启动守护程序:

sudo systemctl restart vsftpd

systemctl 不会显示所有服务管理命令的结果,所以如果你想确保你已经成功,使用以下命令:

sudo systemctl status vsftpd

如果最后一行显示如下所示,则您已成功:

OutputAug 17 17:49:10 vsftpd systemd[1]: Starting vsftpd FTP server...
Aug 17 17:49:10 vsftpd systemd[1]: Started vsftpd FTP server.

现在我们准备好测试我们的工作了。

第 5 步 — 测试匿名访问

在 Web 浏览器中输入 ftp://,后跟 your 服务器的 IP 地址。

ftp://203.0.113.0

如果一切正常,您应该会看到 pub 目录:

你也应该可以点击进入pub,看到test.txt,然后右击保存文件。

您还可以从命令行进行测试,这将为您的配置提供更多反馈。 我们将以被动模式 ftp 到服务器,这是许多命令行客户端上的 -p 标志。 被动模式允许用户避免更改本地防火墙配置以允许服务器和客户端连接。

注意: 原生Windows命令行FTP客户端ftp.exe根本不支持被动模式。 Windows 用户可能想要查看另一个 Windows FTP 客户端,例如 WinSCP。


ftp -p 203.0.113.0

当提示输入用户名时,您可以输入“ftp”或“anonymous”。 它们是等价的,所以我们将使用较短的“ftp”:

Connected to 203.0.113.0.
220 (vsftpd 3.0.3)
Name (203.0.113.0:21:sammy): ftp

按下回车后,您应该会收到以下信息:

Output
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

确保被动模式按预期工作:

ls
Output227 Entering Passive Mode (45,55,187,171,156,74).
150 Here comes the directory listing.
drwxr-xr-x    2 ftp      ftp          4096 Aug 17 19:30 pub
226 Directory send OK.

作为匿名用户,您应该能够使用 get 命令将文件传输到本地计算机:

cd pub
get test.txt
Outputftp> get test.txt
227 Entering Passive Mode (45,55,187,171,156,73).
150 Opening BINARY mode data connection for test.txt (14 bytes).
226 Transfer complete.
16 bytes received in 0.0121 seconds (1325 bytes/s)

此输出告诉您已成功下载文件,如果您愿意,可以查看它是否在本地文件系统上。

我们还想确保匿名用户不会填满我们的文件系统,因此为了测试,我们将转身尝试将相同的文件放回服务器上,但使用新名称。:

put test.txt upload.txt
Output227 Entering Passive Mode (104,236,10,192,168,254).
550 Permission denied.

现在我们已经确认了这一点,我们将退出监视器以准备下一步:

bye

现在我们已经确认匿名连接按预期工作,我们将把注意力转向用户尝试连接时会发生什么。

第 6 步 — 尝试以用户身份连接

您可能还想确保 不能 以用户身份使用本地帐户连接,因为此设置不会加密他们的登录凭据。 当提示您登录时,不要输入“ftp”或“匿名”,而是尝试使用您的 sudo 用户:

ftp -p 203.0.113.0
OutputConnected to 203.0.113.0:21.
220 (vsFTPd 3.0.3)
Name (203.0.113.0:21:your_user)
530 This FTP server is anonymous only.
ftp: Login failed.
ftp>

这些测试确认您将系统设置为仅用于匿名下载。

结论

在本教程中,我们介绍了如何为匿名下载配置 vsftpd。 这使我们能够支持无法使用更现代的协议或广泛发布的难以更新的 FTP url 的遗留应用程序。 要了解有关维护文件的更多信息,如何使用 SFTP 通过远程服务器安全传输文件 可以指导您。