Vsftp精解之安装配置及原理(一)
简介
Vsftp(Very Secure FTP)是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,是一款小巧而又易用FTP服务器程序,Vsftpd 在安全性、高性能及稳定性三个方面有很好的表现。它提供的主要功能包括虚拟IP设置、虚拟用户、Standalone、inetd操作模式、强大的单用户设置能力及带宽限流等。在安全方面,它从原理上修补了大多数Wu-FTP、ProFTP,乃至BSD-FTP的安装缺陷,使用安全编码技术解决了缓冲溢出问题,并能有效避免“globbing”类型的拒绝服务攻击。
Windows下常用Ftp服务器软件: Serv-U、IIS、Filezilla
Linux下Ftp服务器软件:Filezilla、Vsftpd、wuftpd、proftpd 、pureftp
Vsftp的特点:
9、支持带宽限制
目录
一.Ftp原理与vsftpd安装
二.配置文件介绍
三.配置用户支持上传和下载限制用户连接数及速率 用户类型:
匿名用户:在默认安装后,系统只提供匿名用户访问(服务器端自动映射的一个系统用户)
本地用户:以/etc/passwd中的用户名为认证方式(默认root和id号小于500的用户都禁止访问)
虚拟用户:支持将用户名和口令保存在数据库文件或数据库服务器中。事实上多个虚拟用户同时被映射为同一个系统用户,但不同的虚拟用户可以具有不同的访问权限
四.搭建支持SSL加密传输的vsftpd
一、Ftp原理
1、FTP Transfer Protocol 件传输协议的缩写,FTP会话时包含了两个通道,一个叫控制通道,一个叫数据通道;如下图:

控制通道:控制通道是和FTP服务器进行沟通的通道,连接FTP,发送FTP指令都是通过控制通道来完成的, PI称为控制连接
数据通道:数据通道是和FTP服务器进行文件传输或者列表的通道。
FTP协议中,控制连接均有客户端发起,而数据连接有两种工作方式:PORT方式和PASV方式,DTP称为数据连接
PASV模式(被动方式)
在建立控制通道的时候和PORT模式类似,当客户端通过这个通道发送 PASV 命令的时候,FTP server打开一个位于1024和5000之间的随机端口并且通知客户端在这个端口上传送数据的请求,然后FTP server 将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接传送数据。

PORT模式(主动方式)
FTP 客户端首先和FTP Server的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口(一个大于1024的端口)接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。

如果从C/S模型这个角度来说,PORT对于服务器来说是OUTBOUND,而PASV模式对于服务器是INBOUND,这一点请特别注意,尤其是在使用防火墙的企业里,这一点非常关键,如果设置错了,那么客户将无法连接。
2、安装Vsftp软件包
这里我们采用rpm安装方式,系统版本:CentOS6.4_x86_64 软件版本vsftpd.x86_64-2.2.2-11.el6_3.1
|
1
2
3
4
5
|
[root@localhost ~]# rpm -q vsftpd #查询是否安装Vsftppackage vsftpd is not installed #提示没有安装[root@localhost ~]# yum list|grep vsftpd #使用Yum安装,需要配置好Yum才能使用,当然也可以从光盘映像安装[root@localhost ~]# rpm -q vsftpd #再查看是否安装成功vsftpd-2.2.2-11.el6_3.1.x86_64 #已经安装成功 |
二、配置文件介绍及详解主配置文件
|
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@localhost ~]# rpm -qc vsftpd #查询vsftpd的配置文件/etc/logrotate.d/vsftpd #日志文件/etc/pam.d/vsftpd #PAM认证文件/etc/rc.d/init.d/vsftpd #服务启动脚本/etc/vsftpd #Vsftpd配置文件存放路径/etc/vsftpd/ftpusers #禁止使用Vsftpd的用户列表文件/etc/vsftpd/user_list #禁止或允许使用Vsftpd的用户列表文件/etc/vsftpd/vsftpd.conf #主配置文件/etc/vsftpd/vsftpd_conf_migrate.sh #vsftpd操作的一些变量和设置/usr/sbin/vsftpd #Vsftpd执行程序/var/ftp #匿名用户目录/var/ftp/pub #默认匿名用户存放文件目录 |
下面主要对主配置文件的一些指令做详解
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
anonymous_enable=YES #是否允许匿名用户访问local_enable=YES #是否允许本地用户访问write_enable=YES #全局配置是否对Ftp服务器有可写权限local_umask=022 #用户上传的文件权限anon_upload_enable=YES #是否允许匿名用户上传文件,须开启全局配置可写权限anon_mkdir_write_enable=YES #是否允许匿名用户创建目录anon_other_write_enable=YES #是否允许匿名用户有写入权限dirmessage_enable=YES #当使用者切换目录,会显示该目录下的.message文件中内容xferlog_enable=YES #记录使用者所有上传下载信息connect_from_port_20=YES #确定端口连接是20端口chown_uploads=YES #是否允许改变上传文件的属主,与下面配合使用chown_username=whoever #上传文件的属主,whoever任何人xferlog_file=/var/log/xferlog #将上传下载信息记录到日志xferlog_std_format=YES #日志使用标准格式idle_session_timeout=600 #数据传输结束后,保持连接的超时时间data_connection_timeout=120 #数据连接超时时间nopriv_user=ftpsecure #运行Vsftp需要非特权系统用户async_abor_enable=YES #如果Ftp_client会下达“async abor”这个指令需要开启ascii_upload_enable=YES #是否以ASCII方式传输数据ascii_download_enable=YESftpd_banner=Welcome to blah FTP service. #Ftp欢迎信息deny_email_enable=YES #黑名单设置banned_email_file=/etc/vsftpd/banned_emails #当上面一个选项开启,可以设置哪些邮箱地址不能登录Ftp服务器chroot_local_user=YES #设置是否禁锢用户目录,与下面一项配合使用chroot_list_enable=YES #如果开启三个chroot选项,chroot_list文件相当于白名单chroot_list_file=/etc/vsftpd/chroot_list #在些文件中的用户登录后只能在指定的目录中活动ls_recurse_enable=YES #是否允许递归listen=YES #是否监听listen_ipv6=YES #是否监听Ipv6pam_service_name=vsftpd #设置PAM模块提供的认证服务所使用的配置文件名userlist_enable=YES #是否允许user_list用户文件中的用户登录tcp_wrappers=YES #是否使用些方式作为访问控制方式anon_max_rate=0 #匿名用户传输速度限制单位字节,0为不限制local_max_rate=0 #本地用户传输速度限制单位字节,0为不限制max_clients=100 #同一时间允许客户端最大连接数max_per_ip=10 #允许同一IP在同一时间最大连接connect_timeout=60 #客户端尝试连接命令通道超过60秒强制断开pasv_enable=YES #是否启动被动式联机accept_timeout=60 #当使用被动式进行数据传输时,如果主机启用passive port并等待客户端60秒无响应强制断开#下面是指定连接Ftp使用ssl加密方式ssl_enable=YESssl_tlsv1=YESssl_sslv2=YESssl_sslv3=YESallow_anon_ssl=NOforce_local_data_ssl=YESforce_local_logins_ssl=YESrsa_cert_file=/etc/vsftpd/ssl/vsftpd.crtrsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key |
三、配置用户支持上传、下载功能
服务器地址: 172.16.14.1 客户端地址: 172.16.14.2
启动Vsftp服务端,启动前请关闭防火墙与SELinux
|
1
2
3
4
|
[root@localhost ~]# setenforce 0 #关闭SELinux[root@localhost ~]# service iptables stop #关闭防火墙[root@localhost ~]# service vsftpd start #启动成功为 vsftpd 启动 vsftpd: [确定] |
1、配置虚拟用户
所谓的匿名用户实际就是被映射为系统用户ftp,如下图:

我们在这个目录下的pub下新建一个文件(ftp.txt)写入内容来查看一下:

如果想让匿名用户上传文件需要修改主配置文件,如下:
|
1
2
3
4
5
|
anonymous_enable=YES #开启允许匿名访问(默认开启)write_enable=YES #全局配置写入要开启anon_upload_enable=YES #开启允许匿名用户上传文件,须开启全局配置可写权限anon_mkdir_write_enable=YES #开启允许匿名创建文件夹anon_other_write_enable=YES #如果想要删除文件须开启些项 |
修改完主配置文件保存退出,要重启vsftp:
|
1
2
3
|
[root@localhost ftp]# service vsftpd restart关闭 vsftpd: [确定]为 vsftpd 启动 vsftpd: [确定] |
在客户端重新登录测试是否有权限上传文件、删除文件,如下图:

Ftp协议码: 大致分类如:
1开头:表示服务器信息 2开头:正确响应的信息 3开头:正常响应,但某一操作尚未完成,需进一步补充完成
4开头:表示客户端错误 5开头:表示服务器端错误
|
120 |
服务在nnn分钟内准备好 |
125 |
数据连接已打开,准备传送 |
|
150 |
文件状态良好,打开数据连接 |
200 |
命令成功 |
|
202 |
命令未实现 |
211 |
系统状态或系统帮助响应 |
|
212 |
目录状态 |
213 |
文件状态 |
|
214 |
帮助信息,信息仅对人类用户有用 |
215 |
名字系统类型 |
|
220 |
对新用户服务准备好 |
221 |
服务关闭控制连接,可以退出登录 |
|
225 |
数据连接打开,无传输正在进行 |
226 |
关闭数据连接,请求的文件操作成功 |
|
227 |
进入被动模式 |
230 |
用户登录 |
|
250 |
请求的文件操作完成 |
257 |
创建"PATHNAME" |
|
331 |
用户名正确,需要口令 |
332 |
登录时需要帐户信息 |
|
350 |
请求的文件操作需要进一步命令 |
421 |
连接用户过多 |
|
425 |
不能打开数据连接 |
426 |
关闭连接,中止传输 |
|
450 |
请求的文件操作未执行 |
451 |
中止请求的操作:有本地错误 |
|
452 |
未执行请求的操作:系统存储空间不足 |
500 |
格式错误,命令不可识别 |
|
501 |
参数语法错误 |
502 |
命令未实现 |
|
503 |
命令顺序错误 |
504 |
此参数下的命令功能未实现 |
|
530 |
账号或密码错误 |
532 |
存储文件需要帐户信息 |
|
550 |
未执行请求的操作 |
551 |
请求操作中止:页类型未知 |
|
552 |
请求的文件操作中止,存储分配溢出 |
553 |
未执行请求的操作:文件名不合法 |
因为我们的服务器端ftp家目录/var/ftp/pub这个目录没有权限,只有文件系统权限与ftp权限的交集才是ftp登录用户的权限

使用客户端登录到服务器再验证,如下图:

2、配置本地用户支持上传下载功能,在服务器上创建一个用户,如下图:

查看centos用户信息,如下图:

编辑服务端主配置文件,允许本地用户访问和写入文件,关闭匿名用户访问:
|
1
2
3
4
5
6
|
anon_other_write_enable=NO #不允许匿名用户有写入权限anon_mkdir_write_enable=NO #不允许匿名用户创建目录anon_upload_enable=NO #不允许匿名用户上传文件write_enable=YES #开启全局配置有写入权限local_enable=YES #允许本地用户访问,写入权限需开启全局写入权限[root@localhost ~]# service vsftpd restart #重启Ftp服务器 |
使用客户端用centos用户登录到Ftp服务验证,如下图:

使用Windows验证,如下图:


使用匿名用户登录Ftp服务器验证,如下图:

这里我们用本地用户登录到Ftp服务器,还遇到一个问题,用户可以在Ftp服务器随意切换目录,这样对服务器很不安全,如下图:

为了安全我们需要把用户禁锢在自己家目录,只允许访问指定的目录,而其他任何目录都不能访问:
|
1
2
|
chroot_local_user=YES #开启禁锢目录选项[root@localhost ~]# service vsftpd restart #重启Ftp服务器 |
使用本地用户登录到Ftp服务器验证,如下图:

也可以禁止一个用户列表 ,如:
|
1
2
3
4
5
|
[root@localhost ~]# cat > /etc/vsftpd/chroot_list << EOF> centos #把这几个用户添加到指定文件中> redhat> suse> EOF |
|
1
2
3
4
|
chroot_local_user=NO #如果这项启用,下面chroot_list文件中的用户就可以切换目录,相当于白名单chroot_list_enable=YES #开启禁锢列表访问chroot_list_file=/etc/vsftpd/chroot_list #开启禁锢列表文件[root@localhost ~]# service vsftpd restart #重启Ftp服务器 |
我们用redhat用户验证,如下图:

我们也可以针对某个用户单独设置权限如限制速率:
|
1
2
3
4
5
6
7
8
|
修改Ftp服务器主配置文件,加入如下行:user_config_dir=/etc/vsftpd/debian #为指定单独设置用户权限的目录[root@localhost ~]# useradd debian;echo 123456 | passwd --stdin debian[root@localhost ~]# mkdir /etc/vsftpd/debian #创建存放限制指定用户权限的目录[root@localhost ~]# cat > /etc/vsftpd/debian/debian << EOF #在指定的目录创建与限制用户权限同名的文件> local_max_rate=81920 #限制debian用户下载速率为80KB/s> EOF[root@localhost ~]# service vsftpd restart #重启Ftp服务器 |
验证本地用户debian是否能切换目录及下载速率:

四、配置支持SSL加密传输的Ftp服务器
自己需要建立一台CA服务器,我们就与Ftp服务器在同一台服务器上来实现
1、为服务器生成一个私钥文件如下图:

注释:图中"()"代表只在当前子Shell进程中有效
openssl:生成私钥关键字
genrsa:使用rsa加密方式生成私钥
-out:指定输出文件
ftp.key:指定输出生成私钥的文件名称,文件名可以自己定义
2048:表示生成私钥加密的长度(默认为512)
2、从私钥文件中提取公钥制作一个证书签署请求,如下图:

注释: req:证书申请签名管理
-new:制作证书申请
-key:指定私钥文件
3、为CA服务器生成一个私钥文件,如下图:

4、使用刚生成的私钥为自己再生成一个自签证书,如下图:

注释:-x509:表示制作一个自签证书
-days:表示证书申请后可以使用的天数
3、为Ftp服务器签署证书

4、修改Ftp服务器主配置文件加入如下行:
|
1
2
3
4
5
6
7
8
9
10
|
ssl_enable=YES #是否启用SSLssl_tlsv1=YES #是否使用TLS v1ssl_sslv2=YES #是否使用SSl v2ssl_sslv3=YES #是否使用SSL v3allow_anon_ssl=NO #是否允许匿名用户使用SSLforce_local_data_ssl=YES #百匿名用户传输数据是否加密force_local_logins_ssl=YES #非匿名用户登录时是否加密rsa_cert_file/etc/pki/CA/caftp.crt #rsa证书文件位置rsa_private_key_file=/etc/pki/CA/ftp.key #ftp私钥文件位置[root@localhost ~]# service vsftpd restart #重启Ftp服务器 |
5、使用FlashFXP客户端验证,如下图:
打开FlashFXP客户端: 站点-->站点管理

成功连接后,会提示保存证书,点接受并保存.如下图:

测试从Ftp服务器下载数据,如下图:

总结:由于Ftp传输方式是明文的,在互联网上不安全.使用明文很容易被窃取数据.本博客刚好是为了解析明文传输而写的,希望能帮助到大家.谢谢...
本博文到此先告一段落,后续会更新Ftp虚拟用户及Mysql做用户验证.敬请期待...
Vsftp精解之安装配置及原理(一)的更多相关文章
- 详解CentOS7安装配置vsftp搭建FTP
安装配置vsftpd做FTP服务,我们的Web应用使用git管理进行迭代,公共文件软件存储使用开源网盘Seafile来管理,基本够用.想不到FTP的使用的场景,感觉它好像老去了,虽然现在基本没有用到这 ...
- Linux下Samba详解及安装配置
1.简介 2.安装配置 3.在windows和linux系统上验证 一.简介 早期网络想要在不同主机之间共享文件大多要用FTP协议来传输,但FTP协议仅能做到传输文件却不能直接修改对方主机的资料数据, ...
- Linux系统安装Samba共享服务器详解及安装配置
一.简介 Samba服务程序是一款基于SMB协议并由服务端和客户端组成的开源文件共享软件,实现了Linux和windows系统间的文件共享.SMB(Server Messages Block,信息服务 ...
- visual stdio 2015安装配置及原理
安装与配置: 1.先配置好IIS,再安装visual stdio,主要原因系统会自注册.net Framework,若顺序不正确,则需手动注册,步骤: a. IIS可承载的Web核心 b. IIS6 ...
- Git客户端图文详解如何安装配置GitHub操作流程攻略
收藏自 http://www.ihref.com/read-16377.html Git介绍 分布式 : Git版本控制系统是一个分布式的系统, 是用来保存工程源代码历史状态的命令行工具; 保存点 : ...
- NAS4Free 安装配置 -- 目录
淘了个DIY的NAS主机,装了3块硬盘,安装配置NAS4Free,用来存储照片.电影等资料,并兼做下载机. 现在把拆箱.安装.配置过程记录下来,供有兴趣的同学参考. NAS4Free 安装配置(一)开 ...
- (转)使用LVS实现负载均衡原理及安装配置详解
使用LVS实现负载均衡原理及安装配置详解 原文:https://www.cnblogs.com/liwei0526vip/p/6370103.html
- CentOS 7.0安装配置Vsftp服务器步骤详解
安装Vsftp讲过最多的就是在centos6.x版本中了,这里小编看到有朋友写了一篇非常不错的CentOS 7.0安装配置Vsftp服务器教程,下面整理分享给各位. 一.配置防火墙,开启FTP服务器需 ...
- 《React Native 精解与实战》书籍连载「配置 iOS 与 Android 开发环境」
此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...
随机推荐
- 01 初识python
python.exe -v / python3 -v安装python3时, 会得到一个 IDLE(提示符>>>), 简单, 有用, 包含语法编辑器(颜色可变), 调试工具, pyth ...
- 参考__Linux
教程 billie66.github.iocentos下配置vsftpd虚拟用户教程Linux命令大全ubuntu14.04 配置vsftp 实用技能 移动 Ubuntu16.04 桌面左侧的启动器到 ...
- NotePad++常用快捷键。——Arvin
Ctrl+单键 Ctrl+C 复制 Ctrl+X 剪切 Ctrl+V 粘贴 Ctrl+Z 撤消 Ctrl+Y 恢复 Ctrl+A 全选 Ctrl+F 键查找对话框启动 Ctrl+H 查找/替换对话框 ...
- Excel数据批量导入到数据库
1.今天做批量导入网上找了个例子,改了改,运行起来了.用POI实现Excel的读取,需要jar包. 2.ReadExcel.java读取数据 /** * */ package com.b510.exc ...
- asp.net lodop单个打印
1.首先在列表页面增加以下代码 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind=&quo ...
- 【安全测试】WebGoat安装
参考资料:http://wenku.baidu.com/link?url=Qg8GOqw6-CK92-3Dgrm608TlJjDtKMLU9ZlC73Js9LD2FZFgqdHEfJ2sTIRCae_ ...
- <input type="file" id="camera" multiple="multiple" capture="camera" accept="image/*"> 上传图片,手机调用相册和摄像头
<input type="file" id="camera" multiple="multiple" capture="ca ...
- loadrunner随笔1
快捷键: 注释快捷键: ctrl+alt+c 取消注释快捷键:ctrl+alt+u 开始录制快捷键: ctrl+r 运行时设置快捷键: f4 录制设置: ctrl + f7 查找和替换:ctrl + ...
- wordpress目录文件结构说明
wordpress目录文件结构说明 wordpress目录文件结构说明. WordPress文件夹内,你会发现大量的代码文件和3个文件夹wp-admin wp-content wp-include ...
- ASP.NET MVC异步上传文件
自己做的一个小dome.贴出来分享一下: 前端: <form id="formfile" method="post" enctype="mult ...