为Ubuntu2004环境配置vsftpd
# 什么是vsFTPd?
以下写为vsftpd
vsftpd是一款可运行在linux环境下的FTP服务器系统,全称为"very secure FTP daemon",意为“非常安全的FTP守护神”(微软翻译的别问我为什么......)。
# 背景
在将pilipala迁移到Ubuntu2004环境时,为方便部署和管理,我打算使用vsftpd作为FTP服务器,为此也踩了无数的坑(Ubuntu2004环境下的教程几乎没人写过),终于摸索出了一套比较可行的部署方法。 在迁移过程中,为货比三家,我先后试用或购买了阿里云、腾讯云、UCloud的服务器产品,发现了不同服务商之间的部署会有细微差别,这里不作一一概述。本教程将使用一套较为通用的工作流来教你如何完成这项工作。 在编写本文档时,Thaumy正在进行第四次vsftpd部署,所以本教程的所有内容均为Thaumy的实际工作流。
# 准备工作
配有Ubuntu2004操作系统的云服务器、可用的网络连接与十足的耐心。
# 工作流
登入服务器,进入CLI(命令行界面)。
为保证apt列表处于最新状态,我们首先更新一下apt:
sudo apt-get update
sudo apt-get upgrade
下一步,安装vsftpd:
sudo apt-get install vsftpd
安装完成后,我们需要为Ubuntu创建一个新的用户,专门用来管理FTP:
sudo useradd ftp_user
我们刚刚创建了一个名为ftp_user
的用户,现在为其设置密码:
sudo passwd ftp_user
系统将要求你输入两次密码,若多次输入不一致,则会停止密码设置流程。
如果看到以上画面,那么密码就设置成功了。
下面,我们设置用户ftp_user
不得登入操作系统,以防止被黑客盗用而操作除FTP以外的内容:
sudo usermod -s /sbin/nologin ftp_user
接下来,我们需要指定一个物理位置作为FTP服务器根目录。在这之前,我们需要创建它:
sudo mkdir -p /home/ftp
为方便管理,我们后续会将根目录设置为只读。因此,还需要在/home/ftp
下另建一个文件夹,用于存储FTP文件:
sudo mkdir -p /home/ftp/public
我们新建了一个文件夹public
。
现在分别赋予这两个文件夹刚刚所述的相应权限:
Commandsudo chmod a-w /home/ftp
sudo chmod 777 -R /home/ftp/public
最后,设置用户ftp_user
的登入目录为/home/ftp
:
sudo usermod -d /home/ftp ftp_user
以上,我们安装了vsftpd并创建了一个用户用于管理FTP服务器的相应目录。接下来,我们需要设置vsftpd的配置文件,详细规定我们的FTP服务器需要按照哪些配置进行工作。
编辑配置文件:
sudo vi /etc/vsftpd.conf
在这里,我们使用vi作为文本编辑工具。对于如何使用vi/vim编辑文档,网上有很多非常不错的资源可供参考,这里将不作赘述(其实我也不怎么会)。
由于我们添加的配置和原有的配置有所冲突,所以我们需要先将原有的冲突配置注释掉。 这样做既保存了原有的默认配置,我们添加的配置也会生效。 为了醒目地标注冲突项,我们使8个井号(########)来将其注释掉,如下图橙色箭头标注所示:
接下来,我们在配置文件的末尾添加如下配置:
TEXT# 启用监听
listen=YES
# 不允许监听ipv6
listen_ipv6=NO
# 禁用匿名用户
anonymous_enable=NO
# 可写入
write_enable=YES
# 禁止切换根目录
chroot_local_user=YES
# 设置ftp根目录位置
local_root=/home/ftp
注意不要将原文档末尾的UTF-8设置项误删。保存退出。
由于我们设置用户ftp_user
不允许登入操作系统,所以还需要更改相应的pam认证:
sudo vi /etc/pam.d/vsftpd
在编辑模式下,将文件末尾的pam_shells.so
更改为pam_nologin.so
按照传统配置的点到为止,vsftpd的配置就结束了,但是Ubuntu2004他是个年轻人,他不讲武德,来,骗,来,偷袭,我这个刚接触Linux的小同志,这好吗?这不好......
事情还没完,Ubuntu2004缺少一个/etc/securetty文件。先不说这玩意是用来干甚么的,至少我们少了它,vsftpd是不能用的。如果你试图连接FTP服务器,将在vsftpd服务状态中看到以下错误:
这个坑居然没有一个中文博客提到,我在苦苦搜索中,终于在Stack Overflow (opens new window)上找到了相应的解决方案。据采纳回答,/etc/securetty文件的内容取自Ubuntu1910,下面我贴出其内容:
展开(这玩意是真他妈的长)
复制好上述内容,我们来造一个文件:
sudo vi /etc/securetty
将内容粘进去后保存,我们重启vsftpd:
sudo service vsftpd restart
查看vsftpd的状态:
sudo service vsftpd status
如果你看到了上图内容,那么说明vsftpd的配置应该是没有问题的,接下来让我们验收一下:
在此我使用工具FlashFXP
登入我们刚刚部署的FTP服务器,具体配置如下:
用户名和密码均为上述设置项,地址填写云服务器的公网IP,FTP模式设置为主动模式(PORT)
,其他选项均为默认。
若成功连接到FTP服务器,你将看到根目录下有一个public
文件夹,由于我们的权限设置,根目录下的内容为只读,但public
的内部是读写自由的。
好了,现在您可以尽情地向您的FTP服务器里塞垃圾文件了233。
希望本文能对你有所帮助。
或者,节约几个小时?
本文章转自thaumy (opens new window)的“为Ubuntu2004环境配置vsftpd”