ubuntu如何搭建vsftpd服务器


Posted in Servers onDecember 24, 2022

一、vsftpd是什么?

vsftpd 是very secure FTP daemon的缩写,安全性是它的一个最大的特点。

vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件。

二、搭建过程

1.查询vsftpd是否存在和安装成功

命令如下:

whereis vsftpd

vsftpd服务未安装显示如下:

ubuntu如何搭建vsftpd服务器

2.安装vsftpd

命令如下:

sudo apt-get install vsftpd

安装过程:

ubuntu如何搭建vsftpd服务器

再次查询vsftpd服务,如图所示:

ubuntu如何搭建vsftpd服务器

3.查询vsftpd版本号

vsftpd -version

版本号显示如下,说明安装成功。

ubuntu如何搭建vsftpd服务器

4.其他命令

查询vsftpd状态

service vsftpd status

开启vsftpd

sudo service vsftpd start

重启vsftpd

sudo service vsftpd restart

关闭vsftpd

sudo service vsftpd stop

该处使用的url网络请求的数据。

5.使用匿名用户登录

1、修改vsftpd的配置文件

sudo vi /etc/vsftpd.conf

将配置文件中:anonymous_enable=YES

ubuntu如何搭建vsftpd服务器

2、使用ftp工具连接到自己的服务器,输入用户名anonymous,密码为空。

登录成功后,应该看到下面的提示信息:

ubuntu如何搭建vsftpd服务器

3、ubuntu20.04匿名用户的目录是 /srv/ftp,不同版本的目录不一样。在该目录下,创建空文件welcome。

sudo touch welcome

现在可以使用FTP客户端看到这个文件了。

ubuntu如何搭建vsftpd服务器

三、用户设置

1.匿名用户登录

前面已经配置完成,不再赘述。

2.本地用户登录

2.1本地用户登录配置

在一个网点内部,FTP更多的情况下被配置为向授权用户开放。为此,用户应该在服务器上拥有自己的账号。vsftpd把这样的用户成为本地用户。

修改vsftpd的配置文件,重启FTP服务器。

sudo vi /etc/vsftpd.conf
# Uncomment this to allow local users to log in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES

出于安全性,有一些用户不允许通过FTP登录,vsftpd将这些用户整理在 /etc/ftpusers中。

这是FTP黑名单,所有被列入其中的用户都不能通过FTP登录进来。

ubuntu如何搭建vsftpd服务器

2.2 限制用户在本地目录中

vsftpd提供了chroot(change root)系统调用,使其它目录对使用者不可见,也不可访问。

修改vsftpd的配置文件中以下配置。

# You may restrict local users to their home directories.  See the FAQ for
# the possible risks in this before using chroot_local_user or
# chroot_list_enable below.
chroot_local_user=YES

类似的,也可以知道哪些用户受限,通过配置文件chroot_list_file。

# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
# (Warning! chroot'ing can be very dangerous. If using chroot, make sure that
# the user does not have write access to the top level directory within the
# chroot)
chroot_local_user=YES
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd.chroot_list

3.使用虚拟用户

3.1 创建虚拟用户数据库文件

安装创建数据库文件需要使用的db工具:

sudo apt-get install db-util

db工具通过读取一个特定格式的文本文件来创建数据库文件,这个文件为每个用户预留2行,第一行为用户名,第二行为密码。

建立文件login_user,包含内容:

fei
123456

运行db_load 命令,通过~/login_user(由-f选项指定)创建数据库文件/etc/vsftpd_login.db。

sudo db_load -T -t hash -f /home/xuzhanfei/login_user /etc/vsftpd_login.db
  • -T:通过文本文件创建
  • -t hash:通过哈希表的数据结构创建数据库

最后,更改权限,使其只对root用户可见:

sudo chmod 600 /etc/vsftpd_login.db

3.2 配置PAM验证

/etc/pam.d/vsftpd 是vsftpd 默认使用的PAM验证文件,在该文件中加入以下两行,其余内容屏蔽:

auth required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd_login
account required  /lib/x86_64-linux-gnu/security/pam_userdb.so  db=/etc/vsftpd_login

同时,修改vsftpd的配置文件中以下配置。

# This string is the name of the PAM service vsftpd will use.
pam_service_name=vsftpd

3.3 创建本地用户映射

下面做一些配置,将登录进来的用户映射到一个指定的非特权用户,这里就使用ftp用户。

修改vsftpd的配置文件中以下配置:

# 激活访客身份
guest_enable=YES
# 映射用户
guest_username=ftp

3.4 设置用户目录和权限

将 fei 用户目录设置为 /home/ftp/fei,赋予读写权限。

首先,为用户创建主目录,虚拟用户登录后自动映射为本地ftp 用户,因此,把目录的属主设置为 ftp 用户:

sudo mkdir /srv/ftp/fei
sudo chown ftp /srv/ftp/fei/ ##设置目录的属主

接下来,配置用户的目录和权限,先创建路径:

sudo mkdir /etc/vsftpd_user_conf

修改vsftpd的配置文件中以下配置:

# 存放用户配置的目录
user_config_dir=/etc/vsftpd_user_conf

添加 fei 的文本文件,增加以下内容:

# 打开vsftpd的全局写权限
write_enable=YES
# 打开文件上传权限
anon_upload_enable=YES
# 打开建立目录的权限
anon_mkdir_write_enable=YES
local_root=/srv/ftp/fei/

重启 vsftpd 服务。

注:未解决本地用户和虚拟用户登录冲突的问题

四、公网vsftpd服务器配置

1 服务器配置成被动模式

ubuntu如何搭建vsftpd服务器

PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXX端口,你过来连接我”。于是客户端向服务器的XXX端口发送连接请求,建立一条数据链路来传送数据。

被动模式也会存在防火墙的问题,客户端与服务端传输数据时,在服务端也会有防火墙,但在服务端的防火墙有连接追踪的功能,解决了防火墙的问题。因此,一般使用被动模式比较多。

修改vsftpd的配置文件中以下配置。

pasv_enable=YES           (使能被动连接)
pasv_min_port=9981         (被动连接服务器建立的端口XXX)
pasv_max_port=9983
pasv_address=192.194.203.142 (路由器静态IP地址)

2 路由器端口映射

(1)外网想要连接FTP服务器,需要知道数据传输的端口9981-9983。

(2)数据端口是随机的,那么服务器该如何将这些随机数据端口映射到公网的路由器上呢???

(3)我们需要把命令端口21和随机的数据端口映射到公网的端口(该端口需要开通权限),例如:学校开放公网端口为:9981-9983。

ubuntu如何搭建vsftpd服务器

3 Linux服务器开放上述用到的端口

ubuntu如何搭建vsftpd服务器

验证端口开放成功:

ubuntu如何搭建vsftpd服务器

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Servers 相关文章推荐
Nginx 502 Bad Gateway错误原因及解决方案
Mar 31 Servers
Linux安装Nginx步骤详解
Mar 31 Servers
提升Nginx性能的一些建议
Mar 31 Servers
Nginx部署vue项目和配置代理的问题解析
Aug 04 Servers
Docker 镜像介绍以及commit相关操作
Apr 13 Servers
Vscode中SSH插件如何远程连接Linux
May 02 Servers
openEuler 搭建java开发环境的详细过程
Jun 10 Servers
彻底卸载VMware虚拟机的超详细步骤记录
Jul 15 Servers
apache虚拟主机配置的三种方式(小结)
Jul 23 Servers
Windows7下FTP搭建图文教程
Aug 05 Servers
Zabbix6通过ODBC方式监控Oracle 19C的详细过程
Sep 23 Servers
ubuntu开机后ROS程序自启动问题
Dec 24 Servers
CentOS7设置ssh服务以及端口修改方式
Dec 24 #Servers
CentOS7 minimal 最小化安装网络设置过程
Dec 24 #Servers
Elasticsearch6.2服务器升配后的bug(避坑指南)
Sep 23 #Servers
Zabbix6通过ODBC方式监控Oracle 19C的详细过程
Sep 23 #Servers
源码安装apache脚本部署过程详解
Sep 23 #Servers
教你使用Ubuntu搭建DNS服务器
Sep 23 #Servers
windows server2012 R2下安装PaddleOCR服务的的详细步骤
You might like
wamp安装后自定义配置的方法
2014/08/23 PHP
php字符串过滤与替换小结
2015/01/26 PHP
PHP中的类型约束介绍
2015/05/11 PHP
php简单smarty入门程序实例
2015/06/11 PHP
PHP中的流(streams)浅析
2015/07/02 PHP
Smarty实现页面静态化(生成HTML)的方法
2016/05/23 PHP
PHP仿微信多图片预览上传实例代码
2016/09/13 PHP
通用JS事件写法实现代码
2009/01/07 Javascript
jquery 双色表格实现代码
2009/12/08 Javascript
jcarousellite.js 基于Jquery的图片无缝滚动插件
2010/12/30 Javascript
js动态切换图片的方法
2015/01/20 Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
2015/03/09 Javascript
javascript结合CSS实现苹果开关按钮特效
2015/04/07 Javascript
JQuery实现级联下拉框效果实例讲解
2015/09/17 Javascript
Underscore源码分析
2015/12/30 Javascript
Node.js+Express配置入门教程
2016/05/19 Javascript
详解基于vue-router的动态权限控制实现方案
2017/09/28 Javascript
jQuery实现的简单前端搜索功能示例
2017/10/28 jQuery
详解vue+vuex+koa2开发环境搭建及示例开发
2018/01/22 Javascript
NodeJS 文件夹拷贝以及删除功能
2019/09/03 NodeJs
在vue中阻止浏览器后退的实例
2019/11/06 Javascript
[01:09]DOTA2次级职业联赛 - 99战队宣传片
2014/12/01 DOTA
[55:26]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第一场 2月23日
2021/03/11 DOTA
简单理解Python中基于生成器的状态机
2015/04/13 Python
python登录豆瓣并发帖的方法
2015/07/08 Python
Python的时间模块datetime详解
2017/04/17 Python
python 整数越界问题详解
2019/06/27 Python
python实现网站用户名密码自动登录功能
2019/08/09 Python
python 求定积分和不定积分示例
2019/11/20 Python
python实现把两个二维array叠加成三维array示例
2019/11/29 Python
Python通过VGG16模型实现图像风格转换操作详解
2020/01/16 Python
python函数enumerate,operator和Counter使用技巧实例小结
2020/02/22 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
2020/06/18 Python
基于Python爬取搜狐证券股票过程解析
2020/11/18 Python
英国著名的美容护肤和护发产品购物网站:Lookfantastic
2020/11/23 全球购物
2015中学教学工作总结
2015/07/22 职场文书