如何设置vsftpd的匿名下载在Ubuntu 16.04

FTP,短为文件传输协议,是曾经广泛地用于在客户端和服务器之间移动文件的网络协议。它已经被取代了传送文件的速度更快,更安全,更方便的方式。许多休闲网民希望下载...

介绍

FTP,文件传输协议的简称,是一种广泛用于在客户端和服务器之间移动文件的网络协议。 它已经被更快,更安全,更方便的传递文件的方式所取代。 许多休闲网民希望直接从他们的Web浏览器下载https和命令行用户更有可能使用的安全协议,如scpSFTP

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

在本教程中,我们将向您展示如何为匿名的FTP下载站点设置vsftpd,以便广泛分发公共文件。 而不是用FTP来管理这些文件,本地用户使用sudo权限预计将使用scpsFTP ,或自己选择的任何其他安全协议传输和维护文件。

先决条件

要遵循本教程,您将需要:

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

第1步 - 安装vsftpd

我们将通过更新我们的软件包列表和安装启动vsftpd守护进程:

sudo apt update
sudo apt install vsftpd

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

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

通过配置的备份,我们准备好配置防火墙。

第2步 - 打开防火墙

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

sudo ufw status

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

Output
Status: active

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

您可能有其他规则或没有防火墙规则。 在这个例子中,只有ssh通信是允许的,所以我们需要添加规则FTP流量。

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

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

现在我们的防火墙规则看起来像:

Status: 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允许匿名下载。 我们将期待文件管理员使用scpsftp或任何其他安全的方法来维持文件,所以我们不会允许通过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_portpasv_max_port

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

sudo systemctl restart vsftpd

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

sudo systemctl status vsftpd

如果最后一行说明如下,您已成功:

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

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

第5步 - 测试匿名访问

从网络浏览器输入ftp://后跟您的服务器的IP地址。

FTP:// 203.0.113.0

如果按预期的一切,你应该看到pub目录:

浏览器中的“pub”文件夹的图像

你也应该能够点击进入pub ,看到test.txt ,然后右键单击要保存文件。

浏览器中的“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

按Enter键后,您应该会收到以下信息:


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

确保被动模式正常工作:

ls
227 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
ftp> 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
227 Entering Passive Mode (104,236,10,192,168,254).
550 Permission denied.

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

bye

现在我们已经确认匿名连接正常工作,我们将关注当用户尝试连接时会发生什么。

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

您可能还需要确保你不能作为一个用户使用本地帐户连接,因为这设置不加密的登录凭据。 当提示您登录时,不要输入“ftp”或“anonymous”,请尝试使用sudo用户:

ftp -p 203.0.113.0
Connected 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网址,这将是难以更新。 要了解更多关于维护文件, 如何使用SFTP安全传输文件与远程服务器可以指导你。