FTP是文件传输协议的缩写,是一种曾经广泛用于在客户端和服务器之间移动文件的网络协议。它已被更快,更安全,更方便的文件传输方式所取代。许多休闲网民希望直接从他们的网页浏览器用https
下载,而且命令行用户更加喜欢使用的安全协议,如scp
或SFTP
FTP通常用于支持具有特定需求的遗留应用程序和工作流。如果您可以选择使用哪种协议,请考虑探索更现代的选项。但是,当你确实需要FTP时,vsftpd是一个很好的选择。vsftpd针对安全性,性能和稳定性进行了优化,可以很好地防范其他FTP服务器中存在的许多安全问题,并且是许多Linux发行版的默认设置。
在本教程中,我们将向您展示如何为旨在广泛分发公共文件的匿名FTP下载站点设置vsftpd。而不是使用FTP来管理文件,本地用户的sudo
权限预计将使用scp
,sFTP
或他们所选择的任何其它安全协议传输和维护文件。
要学习本教程,您需要:
一旦你有服务器,你就可以开始了。
我们首先更新我们的包列表并安装vsftpd
守护进程:
sudo apt-get update
sudo apt-get install vsftpd
安装完成后,我们将复制配置文件,以便我们可以从空白配置开始,将原始文件保存为备份。
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
通过备份配置,我们已准备好配置防火墙。
首先,让我们检查防火墙状态以查看它是否已启用,如果是,请查看当前允许的内容,以便在测试配置时,您将不会遇到阻止您的防火墙规则。
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
的安装和必要的端口打开,我们准备继续。
首先,我们将创建我们计划托管文件的目录,使用该-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守护进程了。
我们正在为具有维护文件权限的sudo
用户进行设置,以便向公众广泛分发。为此,我们将配置vsftpd
来允许匿名下载。我们将期待文件管理员使用scp
,sftp
或任何其他安全的方法来维持文件,所以我们不会允许通过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_port
和 pasv_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.
现在我们准备好测试我们的工作了。
从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
现在我们已经确认匿名连接正在按预期工作,我们将把注意力转向用户尝试连接时发生的情况。
您可能还希望确保无法以本地帐户的用户身份进行连接,因为此设置不会加密其登录凭据。当提示您登录时,请尝试使用您的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》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有