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动态转换图片大小生成缩略图
Mar 31 Servers
Windows下用Nginx配置https服务器及反向代理的问题
Sep 25 Servers
图文详解nginx日志切割的实现
Jan 18 Servers
关于Nginx中虚拟主机的一些冷门知识小结
Mar 03 Servers
nginx常用配置conf的示例代码详解
Mar 21 Servers
安装Windows Server 2012 R2企业版操作系统并设置好相关参数
Apr 29 Servers
聊聊配置 Nginx 访问与错误日志的问题
May 25 Servers
利用Apache Common将java对象池化的问题
Jun 16 Servers
Nginx开源可视化配置工具NginxConfig使用教程
Jun 21 Servers
GPU服务器的多用户配置方法
Jul 07 Servers
Nginx报404错误的详细解决方法
Jul 23 Servers
Nginx报错104:Connection reset by peer问题的解决及分析
Jul 23 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
PHP下用rmdir实现删除目录的三种方法小结
2008/04/20 PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
2015/10/10 PHP
PHP实现图片的等比缩放和Logo水印功能示例
2017/05/04 PHP
PHP实现重载的常用方法实例详解
2017/10/18 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
2020/12/16 PHP
网上应用的一个不错common.js脚本
2007/08/08 Javascript
使用EXT实现无刷新动态调用股票信息
2008/11/01 Javascript
JavaScript接口实现代码 (Interfaces In JavaScript)
2010/06/11 Javascript
悬浮数字的实现案例
2014/02/19 Javascript
一款基于jQuery的图片场景标注提示弹窗特效
2015/01/05 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
2016/07/04 Javascript
jQuery flip插件实现的翻牌效果示例【附demo源码下载】
2016/09/20 Javascript
jQuery基于正则表达式的表单验证功能示例
2017/01/21 Javascript
字太多用...代替的方法(两种)
2017/03/15 Javascript
layui 表格的属性的显示转换方法
2018/08/14 Javascript
JavaScript作用域链实例详解
2019/01/21 Javascript
JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】
2019/02/21 Javascript
javascript面向对象创建对象的方式小结
2019/07/29 Javascript
vue iview的菜单组件Mune 点击不高亮的解决方案
2019/11/01 Javascript
js HTML DOM EventListener功能与用法实例分析
2020/04/27 Javascript
[04:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster 选手采访
2021/03/11 DOTA
举例讲解Python程序与系统shell交互的方式
2015/04/09 Python
python库lxml在linux和WIN系统下的安装
2018/06/24 Python
Python文件读写保存操作的示例代码
2018/09/14 Python
pytorch加载语音类自定义数据集的方法教程
2020/11/10 Python
Happy Socks英国官网:购买五颜六色的袜子
2020/11/03 全球购物
英文留学推荐信范文
2014/01/25 职场文书
残疾人小组计划书
2014/04/27 职场文书
节约能源标语
2014/06/17 职场文书
2014年后勤工作总结
2014/11/18 职场文书
实习科室评语
2015/01/04 职场文书
Vue全家桶入门基础教程
2021/05/14 Vue.js
vue中利用mqtt服务端实现即时通讯的步骤记录
2021/07/01 Vue.js
Python中time与datetime模块使用方法详解
2022/03/31 Python
win10滚动条自动往上跑怎么办?win10滚动条自动往上跑的解决方法
2022/08/05 数码科技