概述

FTP(File Transfer Protocol)中文称为“文件传输协议”。用于Internet上的控制文件的双向传输。

工作原理

一、主动模式:

详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输

1、客户端通过用户名和密码登录服务器端,登录的是21端口(服务器端主动开启的)。
2、服务器端通过21端口接收到客户端的访问,验证用户名和密码。
3、 登陆成功,客户端会随机开启一个1024以上的端口,在端口上会传递一个叫port的命令,通过命令告知服务器,打开端口,向客户端传递数据。(顺便的会将随机端口号告知服务器)
4、服务器接收之后查看端口为port,服务器端就会开启本机的20端口。然后向客户端的随机端口发送数据。

二、被动模式:

详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输

1、客户端通过用户名和密码登录服务器端,登录的是21端口。
2、 登陆成功,客户端会开启PASV命令,通过PASV,告知服务器端,采用被动模式连接。
3、服务器端会开启一个1024以上随机端口。
4、服务器端会把随机端口的号发送给客户端,客户端通过自己本机的随机端口向服务器端传递数据。

主被动之间比较

主动模式中:管理员只能控制服务器端,不能控制客户端,客户端不在管理员的控制范围,对方的防火墙有可能造成连接中断。
被动模式中:虽然开启的是随机端口,但是服务器端在管理员的控制当中,只要把随机端口指定清楚,在服务器的防火墙通过这些访问,从而不会造成ftp连接中断。
问题:被动模式中随机开启的端口范围太多!!!
解决:服务器端可以修改配置文件将随机开打的端口压成10个或100个,在服务器端防火墙中把这针对100个随机端口的访问打开,ftp就可以正常访问。

关于端口

FTP连接端口(主动模式中)
控制连接:TCP 21,用于发送FTP命令信息
数据连接:TCP 20,用于上传、下载数据

FTP访问方式

1、匿名用户:anonymous或ftp
2、本地用户:使用Linux系统用户和密码
3、虚拟用户:管理员自定义的模拟用户

实验环境

  • 系统环境:centos6.5、windows7
  • Server端IP地址:192.168.1.77(Linux)
  • Client端IP地址:192.168.1.10(windows7)
  • yum挂载目录:/mnt/sr0
  • 使用的rpm包:vsftpd-2.2.2-11.el6_4.1.x86_64.rpm (主包)

搭建步骤

一、使用匿名用户方式进行访问

1、关闭iptables以及selinux

[root@redhat6 ~]# chkconfig iptables off
[root@redhat6 ~]# vim /etc/sysconfig/selinux
详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输

2、Server端安装Vsftp服务rpm包

[root@redhat6 ~]# cd /mnt/sr0/Packages/
[root@redhat6 Packages]# rpm -ivh vsftpd-2.2.2-11.el6_4.1.x86_64.rpm

3、修改配置文件

[root@redhat6 ~]# cd /etc/vsftpd/
[root@redhat6 vsftpd]# vim vsftpd.conf
详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输

4、修改默认上传目录权限

[root@redhat6 ~]# chmod 777 /var/ftp/pub/ #一定要注意!!!不要对/var/ftp设置目录权限,/var/ftp是ftp服务器站点,如果权限过大,意味着可以将整个站点进行删除,登录就会报错。此时系统专门准备pub目录进行权限设置。

5、上传目录写入测试文件

[root@redhat6 ~]# echo "this is testFile" > /var/ftp/pub/test.txt

6、虚拟机访问ftp实现下载

详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输

7、虚拟机访问ftp实现上传

详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输

8、查看上传文件

[root@redhat6 ~]# cd /var/ftp/pub/
[root@redhat6 pub]# ll
详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输

二、使用本地用户方式进行访问_将用户禁锢在指定目录中

1、修改配置文件

[root@redhat6 ~]# cd /etc/vsftpd/
[root@redhat6 vsftpd]# vim vsftpd.conf
详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输

2、添加本地测试用户

[root@redhat6 ~]# useradd zhangsan
[root@redhat6 ~]# passwd zhangsan
[root@redhat6 ~]# useradd lisi
[root@redhat6 ~]# passwd lisi

3、修改指定上传目录权限

[root@redhat6 ~]# chmod 777 /var/ftp/pub/ #之前已经改过了,但是还是要加深一下印象

4、用户访问

详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输

详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输

5、查看上传文件

[root@redhat6 ~]# cd /var/ftp/pub/
[root@redhat6 pub]# ll

详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输

6、使用dos登录查看用户是否随意切户目录

详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输

三、使用本地用户方式进行访问_启用黑名单

1、修改配置文件

[root@redhat6 ~]# cd /etc/vsftpd/
[root@redhat6 vsftpd]# vim vsftpd.conf
详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输

2、修改用户控制列表文件

[root@redhat6 ~]# cd /etc/vsftpd/
[root@redhat6 vsftpd]# echo "zhangsan" >> user_list #将zhangsan用户添加至黑名单中
[root@redhat6 vsftpd]# cat user_list
详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输
[root@redhat6 ~]# /etc/init.d/vsftpd restart #重启服务

3、访问测试

详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输

详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输

四、使用虚拟用户方式进行访问

1、添加虚拟用户口令文件

[root@redhat6 ~]# vim /etc/vsftpd/vuser.txt #创建虚拟用户口令文件。可以叫任何名字,也可以放在任何地方。
详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输

2、生成虚拟用户口令认证文件

[root@redhat6 ~]# db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuser.db
#将文本文档转变为认证的数据库(通过用户名、密码文件生成一个数据库)
-T:转换;
-t:指定哈希算法;
-f:指定文件,生成 /etc/vsftpd/vuser.db数据文件。注意vuser.db是二进制文件。

3、编辑vsftpd的PAM认证文件

[root@redhat6 ~]# vim /etc/pam.d/vsftpd.vu #新建一个针对虚拟用户pmd认证文件
详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输

4、建立本地映射用户并设置宿主目录权限

[root@redhat6 ~]# useradd -d /home/vfproot -s /sbin/nologin vuser #此用户只做本地用户对虚拟的映射
[root@redhat6 ~]# chmod 755 /home/vfproot/

5、修改配置文件

[root@redhat6 ~]# cd /etc/vsftpd/
[root@redhat6 vsftpd]# vim vsftpd.conf
详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输

详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输

6、重启vsftpd服务,并测试

[root@redhat6 ~]# /etc/init.d/vsftpd restart
详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输

详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输

7、查看上传文件

[root@redhat6 ~]# cd /home/vfproot/
[root@redhat6 vfproot]# ll

五、使用虚拟用户方式进行访问_为每一个用户进行配置

1、修改配置文件

[root@redhat6 ~]# cd /etc/vsftpd/
[root@redhat6 vsftpd]# vim vsftpd.conf

详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输

2、手工创建目录

[root@redhat6 ~]# mkdir /etc/vsftpd/vusers_dir

3、为"罗三炮"用户建立配置文件

[root@redhat6 ~]# cd /etc/vsftpd/vusers_dir/
[root@redhat6 vusers_dir]# vim luosanpao #为"罗三炮"创建配置文件。注意!!!!必须要创建同名的配置文件
详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输

4、创建上传目录

[root@redhat6 ~]# mkdir /tmp/vluosanpao
[root@redhat6 ~]# chown vuser:vuser /tmp/vluosanpao/ #修改所有者、所属组

5、重启并测试

[root@redhat6 ~]# /etc/init.d/vsftpd restart

详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输

详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输

[root@redhat6 ~]# cd /tmp/vluosanpao/
[root@redhat6 vluosanpao]# ll

详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输

6、使用"展昭"虚拟用户进行测试

详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输

详解vsftp服务器通过匿名用户、本地用户、虚拟用户三种登录方式实现文件传输