FTP
早起三大网络应用 ftp http mail
FTP的全称file transfer protocol 文件传输协议
40年之前出现的
缺点:明文传输  比较麻烦
FTP 采用双TCP连接方式  C/S模型
控制连接使用TCP端口号21
数据连接使用TCP端口号20

控制连接: 用于在FTP客户端和FTP服务器之间传输FTP控制命令及命令执行信息。控制连接在整个FTP会话期间一直保持打开

数据连接
用于传输数据,包括数据上传、下载、文件列表发送等。数据传输结束后数据连接将终止 粒度

FTP采用两种数据传输方式:
主动方式:PORT
被动方式:PASV
站在服务器角度看,由客户端选择的

FTP有两种文件传输模式:
ASCII模式:默认的文件传输模式,特点:本地文件转换成标准的ASCII码在传输。适用于传输文本文件
二进制模式: 图像文件传输模式,特点是文件按照比特流的方式进行传输,适用于传送程序文件。一般默认是二进制模式
文本模式和二进制模式的区别
文本传输器使用ASCII字符,并由回车键和换行符分开,而二进制不用转换或格式化就可传字符,二进制模式比文本模式更快,并且可以传输所有ASCII值,所以系统管理员一般将FTP设置成二进制模式。

二进制模式用来传送可执行文件,压缩文件,和图片文件。如果你用ASCII模式传,会显示一堆乱码,你必须重新用BINARY模式传。用HTML和文本编写的文件必须用ASCII模式上传,用BINARY模式上传会破坏文件,导致文件执行出错。?
启用ASCII 传输方式
默认情况下,vsftpd 为了提高传输效率,禁止了ASCII 传输方式。虽然在ftp 客户软件中可以使用asc命令,但是传输文件时仍然使用二进制传输方式。
可以分别启用上传和下载的ASCII 传输方式,方法是编辑/etc/vsftpd 配置文件,将如下两行前的#去掉即可启用。
#ascii_upload_enable =YES
#ascii_download_enable=YES
常见的FTP服务器程序
IIS  Serv-U Filezilla 用于windows
wu-ftpd     Proftpd比较常用
vsftpd (Very Secure  FTP Daemon)linux中默认的FtP
常见的FtP客户端程序:
ftp命令 ie  chrome
CuteFTP   FlashFXP用的比较多,通信加密   LeapFTP Filezilla
gftp  kuftp

vsftpd 特性:高速,稳定,与生俱来的安全性能高
 大小:140kB
速度方面:它是wu-FTPd的两倍
稳定性方面:在单机支持4000个以上的并发用户同时连接

功能:支持基于IP的虚拟FTP服务器
      支持虚拟用户
      支持PAM或xinetd/tcp_wrappers的认证方式
      支持两种运行方式:独立和Xinetd
      支持每个虚拟用户具有独立的配置
      支持带宽限制等

FTP用户类型:匿名用户:anonymous或ftp
 本地用户:账号名称,密码等信息保存在passwd shadow文件中
虚拟用户:使用独立的账号/密码数据文件
user_list zhangsan 123456 /var/pub

vsftpd 软件包
官方网站:http://vsftpd.beasts.org/
主程序:/usr/sbin/vsftpd
服务名:vsftpd
用户控制列表文件:/etc/vsftpd/ftpusers禁止登录用户列表
                  /etc/vsftpd/usr_list仅提供一个用户列表,是否禁用在配置文件中设置
配置文件:/etc/vsftpd/vsftpd.conf

配置基本的性能和安全选项
1. 设置空闲的用户会话的中断时间
例如下面的配置:
idle_session_timeout=600
将在用户会话空闲10 分钟后被中断。
2. 设置空闲的数据连接的的中断时间
例如下面的配置:
data_connection_timeout=120
将在数据连接空闲2 分钟后被中断。
3. 设置客户端空闲时的自动中断和激活连接的时间
例如下面的配置:
accept_timeout=60
connect_timeout=60
将使客户端空闲1 分钟后自动中断连接,并在中断1 分钟后自动激活连接。

设置连接服务器后的欢迎信息
为了使用户连接服务器后显示信息,vsftpd 提供了两个选项,分别是:
ftpd_banner
banner_file
例如:可以设置如下的ftpd_banner 选项的值:
banner_enable=Welcome to wnt FTP service.
即:用户连接服务器后显示信息“Welcome to wnt FTP service.”。
也可以设置如下的banner_file 选项的值:
banner_file=/var/vsftpd_banner_file
即:用户连接服务器后显示文件/var/vsftpd_banner_file 中的信息。


设置最大传输速率限制
例如下面的配置:
local_max_rate=50000
anon_max_rate=30000
将使本地用户的最大传输速率为50kbytes/sec,匿名用户的传输速率为30kbytes/sec。
5. 设置客户端连接时的端口范围
例如下面的配置:
pasv_min_port=50000
pasv_max_port=60000
将使客户端连接时的端口范围在50000 和60000 之间。这提高了系统的安全性。

配置基于本地用户的访问控制
要配置基于本地用户的访问控制,可以通过修改vsftpd 的主配置文件/etc/vsftpd.conf 来进行,有如下两种限制方法:
1. 限制指定的本地用户不能访问,而其他本地用户可访问
例如下面的设置:
userlist_enable=YES
userlist_deny=YES
userlist_file= /etc/vsftpd.user_list
使文件/etc/vsftpd.user_list 中指定的本地用户不能访问FTP 服务器,而其他本地用户可访问FTP服务器。

2. 限制指定的本地用户可以访问,而其他本地用户不可访问
例如下面的设置:
userlist_enable= YES
userlist_deny=NO
userlist_file= /etc/vsftpd.user_list
使文件/etc/vsftpd.user_list 中指定的本地用户可以访问FTP 服务器,而其他本地用户不可以访问FTP服务器。

在默认配置中,本地用户可以切换到自家目录以外的目录进行浏览,并在权限许可的范围内进行下载和上传。这样的设置对于一个FTP 服务器来说是不安全的。
如果希望用户登录后不能切换到自家目录以外的目录,则需要设置chroot 选项,涉及如:
chroot_local_user
chroot_list_enable
chroot_list_file
有两种设置chroot 的方法:
(1)设置所有的本地用户执行chroot
只要将chroot_local_user 的值设为YES 即可,即:
chroot_local_user=YES
(2)设置指定的用户执行chroot
需要如下的设置:
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file= /etc/vsftpd.chroot_list  
这样,/etc/vsftpd.chroot_list 文件中指定的用户不能执行chroot。
构建基于虚拟用户的vsftpd服务器
1.建立虚拟FTP用户的帐号数据库文件
建立虚拟用户的账户名、密码列表
 奇数行为帐号名
 偶数行为上一行中帐号的密码
转化为Berkeley DB格式的数据文件
 db_load 转换工具
 需安装 db4-utils-4.3.29-9.fc6.i386.rpm 软件包
[root@filesvr ~]# vi /etc/vsftpd/vusers.list
mike
123
john
456
[root@filesvr ~]# cd /etc/vsftpd/
[root@filesvr vsftpd]# db_load -T -t hash -f vusers.list   vusers.db
[root@filesvr vsftpd]# file vusers.db
vusers.db: Berkeley DB (Hash, version 8, native byte-order)
[root@filesvr vsftpd]# chown 600 /etc/vsftpd/vusers.*

2.创建FTP根目录及虚拟用户映射的系统用户
[root@filesvr ~]# mkdir /var/ftproot
[root@filesvr ~]# useradd -d / var/ftproot -s / sbin/nologin virtual
[root@filesvr ~]# chmod 755 /var/ftproot/

3.建立支持虚拟用户的PAM认证文件
[root@filesvr ~]# vi /etc/pam.d/vsftpd.vu
#%PAM-1.0
auth       required     pam_userdb.so db=/etc/vsftpd/vusers
account    required     pam_userdb.so db=/etc/vsftpd/vusers

4.在vsftpd.conf文件中添加支持配置
[root@filesvr ~]# vi  /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
anon_umask=022
guest_enable=YES
guest_username=virtual
pam_service_name=vsftpd.vu

5.为个别虚拟用户建立独立的配置文件
在vsftpd.conf文件中添加用户配置目录支持
 user_config_dir=/etc/vsftpd/vusers_dir
为用户mike、john建立独立的配置目录及文件
 配置文件名与用户名同名
[root@filesvr ~]# mkdir /etc/vsftpd/vusers_dir/
[root@filesvr ~]# cd /etc/vsftpd/vusers_dir/
[root@filesvr vusers_dir]# touch mike
[root@filesvr vusers_dir]# vi john
anon_upload_enable=YES
anon_mkdir_write_enable=YES
6.重新加载vsftpd配置
service vsftpd reload

7.使用虚拟FTP账户访问测试
分别用mike、john用户登录FTP服务器进行下载、上传测试
 mike用户可以登录,并可以浏览、下载文件,但无法上传
 john用户可以登录,并可以浏览、下载文件,也可以上传
 匿名用户或其他系统用户将不能登录