ftp简介
FTP(File Transfer Protocol, FTP)是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一,它属于网络协议组的应用层。FTP客户机可以给服务器发出命令来下载文件,上载文件,创建或改变服务器上的目录。
工作模式
FTP两种工作模式:主动模式(Active FTP)和被动模式(Passive FTP)
1.主动模式:FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令。服务器接收到命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输。 
2.被动模式:FTP库户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,同时会开启N+1号端口。然后向服务器发送PASV命令,通知服务器自己处于被动模式。服务器收到命令后,会开放一个大于1024的端口P进行监听,然后用PORT P命令通知客户端,自己的数据端口是P。客户端收到命令后,会通过N+1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。 
注意:被动模式的FTP通常用在处于防火墙之后的FTP客户访问外界FTp服务器的情况,因为在这种情况下,防火墙通常配置为不允许外界访问防火墙之后主机,而只允许由防火墙之后的主机发起的连接请求通过。因此,在这种情况下不能使用主动模式的FTP传输,而被动模式的FTP可以良好的工作。
案例:
现给公司的员工提供ftp的服务,并且在ftp上放置了公司的公共文档,只允许全体许员(匿名的账号)工进行下载,其他的权限均不允许。但是对于一些高级员工来说,他们可以上传资料到ftp上(最大空间为10M),拥有增加、删除、修改的权限。规定匿名的账号下载速率100k/s,而本地账号(高级员工)的上传下载速率为1M/s. 另外只允许同时在线100个用户,只可以同时开启2个连接窗口。
实验环境:
操作系统 linux redhat enterprise 5 版本号2.6.18-164.el5
实验步骤:
一:新增一块20G的硬盘,进行分区、格式化和挂载等操作
1:查看系统的硬盘
[root@localhost ~]# fdisk -l
wps_clip_image-9729
2:在第二块硬盘上新建一个分区/dev/sdb1
[root@localhost ~]# fdisk /dev/sdb
wps_clip_image-5633
3:重新加载系统内核程序
[root@localhost ~]# partprobe /dev/sdb
4:将/dev/sdb1分区格式化为 ext3的格式
[root@localhost ~]# mkfs -t ext3 /dev/sdb1
wps_clip_image-31031
5:创建一个挂载点,并挂载该分区/dev/sdb1
[root@localhost ~]# mkdir /mnt/ftppart
[root@localhost ~]# mount /dev/sdb1 /mnt/ftppart/
6:查看分区的使用情况
[root@localhost ~]# df -h
文件系统              容量  已用 可用 已用% 挂载点
/dev/mapper/VolGroup00-LogVol00
                       17G  5.0G   11G  32% /
/dev/sda1              99M   15M   80M  16% /boot
tmpfs                 188M     0  188M   0% /dev/shm
/dev/hdc              2.8G  2.8G     0 100% /media/RHEL_5.4 i386 DVD
/dev/sdb1              20G  173M   19G   1% /mnt/ftppart
[root@localhost ~]#
二:安装vsftpd的rpm包
首先我们要将光盘挂载,使用rpm安装就要进到Serrver目录下
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom/
mount: block device /dev/cdrom is write-protected, mounting read-only
[root@localhost ~]# cd /mnt/cdrom/Server/
[root@localhost Server]# rpm -ivh vsftpd-2.0.5-16.el5.i386.rpm
Preparing...                ########################################### [100%]
package vsftpd-2.0.5-16.el5.i386 is already installed     #表明已经安装过了
[root@localhost Server]#
三:创建目录/mnt/ftppart/public用来放置公司的手册
[root@localhost Server]# cd /mnt/ftppart/
[root@localhost ftppart]# mkdir public
[root@localhost ftppart]# cd public/
[root@localhost public]# touch p_shouce1
[root@localhost public]# touch p_shouce2
[root@localhost public]# touch a b c
[root@localhost public]# ll
总计 0
-rw-r--r-- 1 root root 0 04-16 03:41 a
-rw-r--r-- 1 root root 0 04-16 03:41 b
-rw-r--r-- 1 root root 0 04-16 03:41 c
-rw-r--r-- 1 root root 0 04-16 03:00 p_shouce1
-rw-r--r-- 1 root root 0 04-16 03:00 p_shouce2
四:查看系统的账号
[root@localhost public]# tail /etc/passwd
wps_clip_image-20262
添加添加两个用户user1,user2,并为其设置密码为“123”
[root@localhost public]# useradd user1
[root@localhost public]# echo "123"|passwd --stdin user1
Changing password for user user1.
passwd: all authentication tokens updated successfully.
[root@localhost public]# useradd user2
[root@localhost public]# echo "123"|passwd --stdin user2
Changing password for user user2.
passwd: all authentication tokens updated successfully.
[root@localhost public]#
wps_clip_image-17171
五:对匿名用户进行设置
1:将ftp服务器的匿名账号的默认根目录/var/ftp修改为/mnt/ftppart/public目录
[root@localhost public]# vim /etc/vsftpd/vsftpd.conf
wps_clip_image-26831
2:将新建账户的家目录/home修改为 /mnt/ftppart/home 目录
[root@localhost public]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
[root@localhost public]# 
[root@localhost public]# useradd -D -b /mnt/ftppart/home
[root@localhost public]# useradd -D
GROUP=100
HOME=/mnt/ftppart/home     #对比之下发现这一行发生了改变,这既是我们要做的
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
[root@localhost public]#
3:增加一个用户user3进行测试
[root@localhost ~]# useradd user3
[root@localhost ~]# tail /etc/passwd
wps_clip_image-2812
六:针对于高级员工(即本地账号)进行相关的设置
1:编辑当前目录
[root@localhost ~]# vim /etc/passwd
wps_clip_image-25221
2: 在服务器上创建home目录
[root@localhost public]# cd /mnt/ftppart/
[root@localhost ftppart]# 
[root@localhost ftppart]# mkdir home
[root@localhost ftppart]# ll
总计 24
drwxr-xr-x 2 root root  4096 04-16 03:16 home
drwx------ 2 root root 16384 04-16 02:56 lost+found
drwxr-xr-x 2 root root  4096 04-16 03:00 public
[root@localhost ftppart]#
3:移动“user1”.“user2”的家目录到/mnt/ftppart/home
[root@localhost ~]# cd /home/
[root@localhost home]# ll
总计 8
drwx------ 3 user1 user1 4096 04-16 03:01 user1
drwx------ 3 user2 user2 4096 04-16 03:02 user2
[root@localhost home]# mv user1 user2 /mnt/ftppart/home/
[root@localhost home]# cd /mnt/ftppart/home/
[root@localhost home]# ll
总计 8
drwx------ 3 user1 user1 4096 04-16 03:01 user1
drwx------ 3 user2 user2 4096 04-16 03:02 user2
[root@localhost home]#
七:对员工进行下载速度及连接数的限制
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
wps_clip_image-31020
八:对用户进行磁盘配额
1:修改fstab表格
[root@localhost ~]# vim /etc/fstab
wps_clip_image-5919
2:重新挂载/dev/sdb1 分区
[root@localhost ~]# mount -o remount /dev/sdb1
[root@localhost home]# mount
wps_clip_image-10878
3:对/dev/sdb1 分区进行磁盘配额的检测
[root@localhost ~]# cd /mnt/ftppart/
[root@localhost ftppart]# quotacheck -augv -c
quotacheck: Scanning /dev/sdb1 [/mnt/ftppart] quotacheck: Cannot stat old user quota file: 没有那个文件或目录
quotacheck: Old group file not found. Usage will not be substracted.
done
quotacheck: Checked 13 directories and 12 files
quotacheck: Old file not found.
[root@localhost ftppart]# ll
总计 32
-rw------- 1 root root  7168 04-16 03:29 aquota.user
drwxr-xr-x 4 root root  4096 04-16 03:18 home
drwx------ 2 root root 16384 04-16 02:56 lost+found
drwxr-xr-x 2 root root  4096 04-16 03:00 public
[root@localhost ftppart]#
4:针对user1进行磁盘配额,限制为10M空间的大小
[root@localhost ftppart]# edquota -u user1
wps_clip_image-12265
5:对于user2 来说
[root@localhost ftppart]# edquota -p user1 user2
[root@localhost ftppart]#
[root@localhost ftppart]# edquota -u user2
wps_clip_image-2946
6:开启磁盘配额,并设置为开机加载
[root@localhost ftppart]# quotaon /dev/sdb1
[root@localhost ftppart]# echo "quotaon/dev/sdb1">>/etc/rc.d/rc.local
[root@localhost ftppart]# cat /etc/rc.d/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
quotaon/dev/sdb1         #可以看到已经加载到了开机的脚本里面了
7:重新启动vsftpd的服务后我们就能验证了
[root@zzu ftppart]# service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
十:验证
1:对于匿名账号
查看
wps_clip_image-30173
上传
wps_clip_image-15688
删除
wps_clip_image-6596
2:对于高级员工user1的测试
登录并新建文件夹
wps_clip_image-22922
wps_clip_image-4664
上传
wps_clip_image-22811
wps_clip_image-26334
3:基于下载速度的验证,使用FlashFXP Evaluation Copy软件测试(只要是980kb~1020kb之间的就算是正常的范围)
wps_clip_image-14014
wps_clip_image-14933
 
 
小结:这次实验我们学习到如何搭建一个ftp服务器,这对一些小型的公司就是很实用的,对于一些教育机构及一些小型局域网都是有一定作用的,大家都做一做,还是很有用的!