Vsftpd的详细讲解及应用实例

一、FTP基本简介

FTPTCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一。尽管World Wide Web(WWW)已经替代了FTP的大多数功能,FTP仍然是通过Internet把文件从客户机复制到服务器上的一种途径。FTP客户机可以给服务器发出命令来下载文件,上传文件,创建或改变服务器上的目录。原来的FTP软件多是命令行操作,有了像CUTEFTP这样的图形界面软件,使用FTP传输变得方便易学。主要使用它进行“上载”。即向服务器传输文件。由于FTP协议的传输速度比较快,我们在制作诸如“软件下载”这类网站时喜欢用FTP来实现,同时我们这种服务面向大众,不需要身份认证,即“匿名FTP服务器”。

二、FTP工作原理

简单地说,支持ftp协议的服务器就是ftp服务器,ftp协议的连接方式有两种,一种是命令连接,一种是数据连接,而ftp的数据连接方式也有两种,一种是主动模式,一种是被动模式

主动模式的工作原理

(1) 客户端对服务器发起请求,连接的是服务器的21号端口,客户端的端口号N是大于1024的随机端口

(2) 服务器的21号端口给予客户端响应数据流

(3) 服务器打开20号端口去连接客户端的N+1的端口

(4) 客户端给予响应,数据开始传输

主动模式工作原理图如1所示:

 wKiom1O2EgvxCFkFAACZbh7FIXQ460.jpg

主动模式工作原理图

被动模式的工作原理

(1) 客户端对服务器发起的请求连接是服务器的21号端口,客户端的端口号N是大于1024的随机端口

(2) 服务器的21号端口给予客户端响应

(3) 服务器打开一个大于1024的随机端口,客户端使用N+1端口号去连接服务器打开的端口

(4) 服务器给予响应,于是数据开始传输

被动模式工作原理图如图2所示:

wKiom1O2D6vD5_ThAACnbVz6pvg769.jpg 

被动模式工作原理图

需要注意的是:客户端如何连接服务器端的这个随机端口的呢?在命令连接阶段,服务器会传输172.16.2.1.113.26的字符串过去,前四个标识的是服务器的IP地址,而随机端口是通过后面两个字符计算得出的,计算法则为第一个乘以256加上第二个数,即客户端连接服务器端的这个随机端口号是113*256+26

三、FTP常用命令

cd   切换远程目录

lcd   切换本地目录

dir    查看远程目录

!Dir   查看本地的目录

put    上传一个文件

mput   多个文件上传

get    下载一个文件

mget  下载多个文件

mkdir   创建目录

rmdir   删除目录

  帮助

四、vsftpd搭建FTP的应用案例

案例

1、实施环境:Centos6.5  64位

2、要求: ftp  server  使用vsftpd

新增硬盘  分区  /mnt/part1

public  {匿名账号根} 公共文档存放处

home/账号1...................账号n

节省磁盘空间     本地账户分配空间配额为10M

下载速率本地账号 1M/S匿名 100K/S

最大用户连接数  100   每ip的连接数 2

3、案例实施

Step1:添加磁盘(如有多余的磁盘不需再添加)

[root@huangzhong ~]# fdisk -l  查看添加后的磁盘标志

 wKioL1O2EZKyYfwTAAR2QyGMfZU751.jpg

[root@huangzhong ~]# mkfs -t ext3 /dev/sdb1 格式化磁盘

[root@huangzhong ~]# mkdir /mnt/partion  //创建挂载点

[root@huangzhong ~]# mount /dev/sdb1 /mnt/partion/   挂载磁盘

[root@huangzhong ~]# cd /mnt/partion/

[root@huangzhong partion]# mkdir public    //创建匿名登录的家目录

[root@huangzhong partion]# mkdir home   //创建用户的家目录

//改变创建用户时的默认家目录改为/mnt/partion/home

[root@huangzhong partion]# useradd -D -b /mnt/partion/home/

//创建一个用户,登录查看家目录

[root@huangzhong partion]# useradd user1   //创建账号

[root@huangzhong partion]# passwd user1   //设置密码

[root@huangzhong partion]# su - user1   //用user1登录

[user1@huangzhong ~]$ pwd

/mnt/partion/home//user1

 

Step2:实现磁盘配额

[root@huangzhong partion]# vim /etc/fstab


wKiom1O2EiaAg4xjAACwCsGOIFM763.jpg 

[root@huangzhong ~]# umount /mnt/partion/   //卸载挂载

[root@huangzhong ~]# mount -a  //使用参数挂载

[root@huangzhong ~]# mount   //查看是否挂载

[root@huangzhong ~]# yum install quota  //安装磁盘配额工具

[root@huangzhong ~]# setenforce 0    //关闭selinux

[root@huangzhong ~]# service iptables stop

[root@huangzhong ~]# quotacheck -augvc  

[root@huangzhong ~]# cd /mnt/partion/

[root@huangzhong partion]# ll

-rw-------. 1 root root  7168 Jul  4 03:37 aquota.user

//给user1分配空间配额

[root@huangzhong partion]# edquota -u user1

wKioL1O2EgqC2t0BAADpPIaZWec404.jpg 

//把user1拷贝给user2和user3

[root@huangzhong partion]# edquota -p user1 user2

[root@huangzhong partion]# edquota -p user1 user3

//启动磁盘配额

[root@huangzhong partion]# quotaon /dev/sdb1

//加入开机启动

[root@huangzhong partion]# echo "quotaon /dev/sb1" >>/etc/rc.d/rc.local

 

Step3:安装vsftpd

[root@huangzhong ~]# cd /media/cdrom/Packages/

[root@huangzhong Packages]# ll |grep -i vsftpd                             

-r--r--r--. 2 root root   154584 Feb 19  2013 vsftpd-2.2.2-11.el6_3.1.x86_64.rpm

[root@huangzhong Packages]# yum install vsftpd-2.2.2-11.el6_3.1.x86_64.rpm 

//修改vsftpd的配置文件

wKioL1O2EjLwN3RmAAM7NsSej3c942.jpg 

Step4:安装超级守护进程

[root@huangzhong tmp]# yum install xinetd

[root@huangzhong xinetd.d]# cp telnet vsftpd

[root@huangzhong xinetd.d]# vim vsftpd 

wKioL1O2ElfhhQwuAAHRR_k0n9A180.jpg 

[root@huangzhong xinetd.d]# service xinetd start

//在匿名的家目录下创建文件

[root@huangzhong ~]# cd /mnt/partion/public/

[root@huangzhong public]# touch f1.p

//在用户user1的家目录下创建文件

[root@huangzhong partion]# cd home/user1/

[root@huangzhong user1]# touch f1.user1

 

4、案例测试

//创建一个8M的文件和一个3M的文件

[root@huangzhong ~]# dd if=/dev/zero of=/tmp/f2.user1 bs=1M count=8

[root@huangzhong ~]# dd if=/dev/zero of=/tmp/f3.user1 bs=1M count=3

//user1登录进行上传测试

[root@huangzhong ~]# ftp 192.168.1.21

wKiom1O2EqPQwxlrAAJiCpyO9vA451.jpg 

//查看所用空间

wKioL1O2EoTQuKF9AAI339ccCJQ752.jpg 

[root@huangzhong tmp]# dd if=/dev/zero of=/tmp/f4.user1 bs=1M count=1

//把f4.user1移到匿名的家目录下改名为f4.p

[root@huangzhong tmp]# cp f4.user1 /mnt/partion/public/f4.p

//使用匿名登录下载相同文件速率

wKiom1O2EsOD4cBJAAKnLFkuii4631.jpg 

[root@huangzhong tmp]# mv f4.user1 /mnt/partion/home/user1

//使用user1登录

 wKiom1O2Eweh2F4JAAKnz9hpKpA491.jpg

//查看时间

[root@huangzhong xinetd.d]# date

Fri Jul  4 05:36:26 CST 2014  //此时为下班时间

//登录FTP

wKioL1O2Euyy_CMRAADfpZ8diQ8807.jpg 

//修改时间为上班时间在登录

[root@huangzhong xinetd.d]# date 070308012014   

Thu Jul  3 08:01:00 CST 2014

wKiom1O2EzKQCvWbAAFoUKNLKkE168.jpg 

//测试匿名上传

wKioL1O2ExzxVjhbAAJDouxVXZo039.jpg