前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Ubuntu 16.04上为匿名下载设置vsftpd

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

原创
作者头像
木纸鸢
修改2018-10-29 18:28:18
1.6K0
修改2018-10-29 18:28:18
举报

介绍

FTP是文件传输协议的缩写,是一种曾经广泛用于在客户端和服务器之间移动文件的网络协议。它已被更快,更安全,更方便的文件传输方式所取代。许多休闲网民希望直接从他们的网页浏览器用https下载,而且命令行用户更加喜欢使用的安全协议,如scp或SFTP

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

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

先决条件

要学习本教程,您需要:

  • 具有sudo权限的非root用户的Ubuntu 16.04服务器,没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器

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

第1步 - 安装vsftpd

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

代码语言:javascript
复制
sudo apt-get update
sudo apt-get install vsftpd

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

代码语言:javascript
复制
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

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

第2步 - 打开防火墙

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

代码语言:javascript
复制
sudo ufw status

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

代码语言:javascript
复制
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(用于命令):

代码语言:javascript
复制
sudo ufw allow ftp-data
sudo ufw allow ftp
sudo ufw status

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

代码语言:javascript
复制
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目录保存在一起,然后添加需要身份验证的其他文件夹:

代码语言:javascript
复制
sudo mkdir -p /var/ftp/pub

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

代码语言:javascript
复制
sudo chown nobody:nogroup /var/ftp/pub

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

代码语言:javascript
复制
 echo "vsftpd test file" | sudo tee /var/ftp/pub/test.txt

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

第4步 - 配置匿名访问

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

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

我们将首先更改已设置的内容:

代码语言:javascript
复制
sudo nano /etc/vsftpd.conf

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

代码语言:javascript
复制
. . .
# 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命令了解所有选项。

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

代码语言:javascript
复制
#
# 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之间的端口。

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

代码语言:javascript
复制
sudo systemctl restart vsftpd

systemctl 不显示所有服务管理命令的结果,因此如果您想确定已成功,请使用以下命令:

代码语言:javascript
复制
sudo systemctl status vsftpd

如果最后一行看起来像下面这样,你就成功了:

代码语言:javascript
复制
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步 - 测试匿名访问

从Web浏览器中输入ftp://后面的IP地址服务器。

ftp:// 203.0.113.0

如果一切按预期工作,您应该看到pub目录:

您还应该能够单击pub,查看test.txt,然后右键单击以保存文件。

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

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

代码语言:javascript
复制
ftp -p 203.0.113.0

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

代码语言:javascript
复制
Connected to 203.0.113.0.
220 (vsftpd 3.0.3)
Name (203.0.113.0:21:sammy): ftp

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

代码语言:javascript
复制
Output
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

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

代码语言:javascript
复制
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命令将文件传输到本地计算机:

代码语言:javascript
复制
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)

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

我们还希望确保匿名用户不会填写我们的文件系统,因此要进行测试,我们将向右转并尝试将相同的文件放回服务器上,但使用新名称:

代码语言:javascript
复制
put test.txt upload.txt
Output227 Entering Passive Mode (104,236,10,192,168,254).
550 Permission denied.

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

代码语言:javascript
复制
bye

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

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

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

代码语言:javascript
复制
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的遗留应用程序。

更多Ubuntu教程请前往腾讯云+社区学习更多知识。


参考文献:《How To Set Up vsftpd for Anonymous Downloads on Ubuntu 16.04》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 先决条件
  • 第1步 - 安装vsftpd
  • 第2步 - 打开防火墙
  • 第3步 - 为文件准备空间
  • 第4步 - 配置匿名访问
  • 第5步 - 测试匿名访问
  • 第6步 - 尝试以用户身份进行连接
  • 结论
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档