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

介绍

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

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

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

先决条件

要学习本教程,您需要:

  • 具有sudo权限的非root用户的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

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

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

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

. . .
# 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步 - 测试匿名访问

从Web浏览器中输入ftp://后面的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

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

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步 - 尝试以用户身份进行连接

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

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》

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

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员叨叨叨

【9】全民博客时代的到来——20分钟简要教程

很久以前就想搭建一个个人技术博客的网站了,但是那时候接触的东西不多,没有听说过hexo、jekyll、wordpress等快速blog生成工具,自己在网上找了博...

13830
来自专栏F-Stack的专栏

F-Stack Q&A 第一期

Q1:F-Stack有中断模式吗,有计划支持吗?在计算密集型的应用中,轮询模式会占用更多的CPU资源? A1:F-Stack暂时只支持轮询模式,后续会支持中断+...

76450
来自专栏python3

diango使用数据库

之前写的页面,虽然和用户交互得很好,但并没有保存任何数据,页面一旦关闭,或服务器重启,一切都将回到原始状态。

14730
来自专栏安智客

GP规范中定义的四种SE访问控制架构

GP规范给人的感觉好像有点晦涩难懂,由于是规范,所以比较抽象,而且GP这个组织的专家们来自世界各地,大家都用英语文档交流,所以不同的文档风格不同,难免大家阅读起...

21220
来自专栏deepcc

IE=edge,chrome=1的META信息详解

42280
来自专栏沃趣科技

ASM 翻译系列第三弹:基础知识 About ASM disk groups, disks and files

原作者:Bane Radulovic 译者: 赵恩东 审核: 魏兴华 DBGeeK社群联合出品 Oracle ASM使用磁盘组来存放数据文件,每一个...

40180
来自专栏数据库

Oracle数据库备份与恢复的三种方法

Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP)、热备份和冷备份。导出备件是一种逻辑备份,冷备份和热备份是物理备份。 一、 导出/...

278100
来自专栏数据和云

1024 程序员节:给 DBA 们的福音

通过 rpm 安装包,支持 yum 安装,这基本上将单实例的企业版数据库安装简化为一条命令:

17820
来自专栏Java帮帮-微信公众号-技术文章全总结

Web-第二十七天 SVN使用【悟空教程】

为保障团队开发过程中人员沟通各方面成本的降低,必须使用一种有效的方式减少沟通环节,提高开发效率,对资源的共享进行管理。

20310
来自专栏哈雷彗星撞地球

Mac 下安装node.js

Node.js 是一个用Chrome's V8 JavaScript engine 构建的 JavaScript 运行时框架。Node.js 使用事件驱动、非阻...

22150

扫码关注云+社区

领取腾讯云代金券