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 #查询是否安装Vsftp package 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=YES ftpd_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 #是否监听Ipv6 pam_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=YES ssl_tlsv1=YES ssl_sslv2=YES ssl_sslv3=YES allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES rsa_cert_file= /etc/vsftpd/ssl/vsftpd .crt rsa_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 #是否启用SSL ssl_tlsv1=YES #是否使用TLS v1 ssl_sslv2=YES #是否使用SSl v2 ssl_sslv3=YES #是否使用SSL v3 allow_anon_ssl=NO #是否允许匿名用户使用SSL force_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 组件布局.组件与 ...
随机推荐
- iOS 开发之SVN提交问题解决
1.Commit failed (details follow): '/Users/dev_lzz/Desktop/cjh_ios(16)/cjh/iamgge/iconfont_arrow@3x.p ...
- js_多个引号的用法
str += "<input id='sel_DayB' width='120' onfocus=\"WdatePicker({skin:'whyGreen',dateFmt ...
- hive修改 表/分区语句
参考 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-AlterTable% ...
- Libpci库的调用
这几天发现在Redhat AS6.5 X86_64下用outl(index, 0xcf8)和inl(0xcfc)下读取PCIe配置空间是系统有时性的会hang, 于是去寻找解决方案,首先想到的是用/d ...
- flask笔记3-模板
flask框架使用jinja2模板引擎.简单的说,模板就是一个纯html文件中夹杂着占位符,在渲染模板时用真实变量值替换占位符,就形成了最终的前台页面. 1.模板存放位置: 默认情况下,flask在根 ...
- Sql Server 删除所有表(转)
http://www.cnblogs.com/jys509/p/3589468.html 首先必须要清空所有表的外键 DECLARE c1 cursor for select 'alter tabl ...
- 学习iOS
最近想学习一下iOS开发,不过一点基础都没有,得先从熟悉object-C语法开始,在此把学习中的一些知识点作为记录. mac pro常用操作 学习ios[1]Objective-C 基本语法 学习io ...
- MVC5+EF6 入门完整教程八
本篇是相对独立的一篇,主要讲解不丢失数据进行数据库结构升级. 前面我们讲解EF功能时,已经介绍过一种更新数据库的方式: EF比较model和database,如果两边不一致,程序将会drop and ...
- Microsoft.Office.Interop.Excel操作Excel文件时出现的问题及解决方案
问题描述: Microsoft.Office.Interop.Excel.Worksheet 打不开文件 Microsoft Office Excel 不能访问文件"a.xls". ...
- 微信支付之扫码支付开发:我遇到的坑及解决办法(附:Ecshop 微信支付插件)
前段时间帮一个朋友的基于ecshop开发的商城加入微信扫描支付功能,本以为是很简单的事儿——下载官方sdk或开发帮助文档,按着里面的做就ok了,谁知折腾了两三天的时间才算搞定,中间也带着疑问在网上找了 ...