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如何将http访问的网站改成https访问
Mar 31 Servers
nginx处理http请求实现过程解析
Mar 31 Servers
nginx反向代理时如何保持长连接
Mar 31 Servers
Nginx配置https原理及实现过程详解
Mar 31 Servers
Nginx 根据URL带的参数转发的实现
Apr 01 Servers
关于nginx 实现jira反向代理的问题
Sep 25 Servers
详解Nginx 被动检查服务器的存活状态
Oct 16 Servers
了解Kubernetes中的Service和Endpoint
Apr 01 Servers
Tomcat弱口令复现及利用
May 06 Servers
项目中Nginx多级代理是如何获取客户端的真实IP地址
May 30 Servers
nginx设置资源请求目录的方式详解
May 30 Servers
Docker安装MySql8并远程访问的实现
Jul 07 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中使用Select 查询语句的实例
2014/02/19 PHP
Laravel中log无法写入问题的解决
2017/06/17 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
用 JavaScript 迁移目录
2006/12/18 Javascript
jquery $.ajax各个事件执行顺序
2010/10/15 Javascript
JS数组去重与取重的示例代码
2014/01/24 Javascript
Express.JS使用详解
2014/07/17 Javascript
ashx文件获取$.ajax()方法发送的数据
2016/05/26 Javascript
面试常见的js算法题
2017/03/23 Javascript
H5基于iScroll实现下拉刷新和上拉加载更多
2017/07/18 Javascript
jquery ajax异步提交表单数据的方法
2017/10/27 jQuery
vue 实现 ios 原生picker 效果及实现思路解析
2017/12/06 Javascript
详解如何使用babel进行es6文件的编译
2018/05/29 Javascript
微信小程序实现即时通信聊天功能的实例代码
2018/08/17 Javascript
JS动画实现回调地狱promise的实例代码详解
2018/11/08 Javascript
vue中格式化时间过滤器代码实例
2019/04/17 Javascript
一文看懂如何简单实现节流函数和防抖函数
2019/09/05 Javascript
Vue的全局过滤器和私有过滤器的实现
2020/04/20 Javascript
JavaScript基于用户照片姓名生成海报
2020/05/29 Javascript
Python中使用Inotify监控文件实例
2015/02/14 Python
python每隔N秒运行指定函数的方法
2015/03/16 Python
python 线程的暂停, 恢复, 退出详解及实例
2016/12/06 Python
Python实现的文本对比报告生成工具示例
2018/05/22 Python
Sanic框架配置操作分析
2018/07/17 Python
通过 Python 和 OpenCV 实现目标数量监控
2020/01/05 Python
如何利用Python动态模拟太阳系运转
2020/09/04 Python
利用python+request通过接口实现人员通行记录上传功能
2021/01/13 Python
澳大利亚婴儿、幼儿和儿童在线设计师商店:Smooch Baby
2019/02/16 全球购物
标准毕业生自荐信
2014/06/24 职场文书
检察院对照“四风”认真查找问题落实整改措施
2014/09/26 职场文书
2014年客服工作总结范文
2014/11/13 职场文书
党员年度个人总结
2015/02/14 职场文书
2019公司管理制度
2019/04/19 职场文书
使用python向MongoDB插入时间字段的操作
2021/05/18 Python
Maven学习----Maven安装与环境变量配置教程
2021/06/29 Java/Android
以下牛机,你有几个
2022/04/05 无线电