一、简介

1、FTP 是什么

FTP “File Transfer Protocol”(文件传输协议) 用来实现文件的传输及共享,在RFC 959有说明。

FTP工作在应用层,基于TCP,是C/S 架构。

2、会话连接:

控制连接:端口为21,和FTP服务器沟通,连接FTP,发送指令[ 客户端不断开,持久保持连接]

数据连接:端口为20[ 只有在主动模式下是20 ], 和FTP服务器进行文件传输[ 有数据请求时连接]

3、工作模式

FTP协议中,控制连接均由客户端发起,而数据连接有两种工作方式:PORT方式和PASV方式

主动、被动 是基于服务器的角度。

PORT【Active】模式(主动方式)

    FTP客户端使用随机端口N(1024以上)连接到FTP服务器的21端口,发送用户名和密码登录。登录成功后要list列表或者读取数据时,客户端发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口N+1;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口N+1连接,发送数据。

PASV【Passive】模式(被动方式) 

    FTP客户端使用随机端口N(1024以上)连接到FTP服务器的21端口,发送用户名和密码登录。登录成功后要list列表或者读取数据时,客户端发送 PASV命令到FTP服务器,告诉服务器客户端采用被动模式,FTP服务器收到PASV被动模式命令后,打开一个随机端口,并通知客户端,我已经打开N端口,可以进行连接,客户端连接到服务器的N端口获取数据。

*N >1024

* ftp 防火墙的配置(生产环境中的C/S端均需设置)

4、数据传输模式:(服务器自动)

文本

二进制

二、服务端程序:

windows: serv-U、FileZilla

linux: vsftpd “Very Secure FTP Daemon”, 是一个UNIX类操作系统上运行的服务器的名字

支持三种用户:匿名用户(默认),系统用户,虚拟用户

基于PAM实现用户认证

/etc/pam.d/*
/lib64/security/*

安装Vsftpd并配置

yum install vsftpd -y
service vsftp start
chkconfig vsftpd on

生成的安装文件

/etc/vsftpd/vsftp.conf: 配置文件
/etc/init.d/vsftpd:   服务脚本
/usr/sbin/vsftpd:    主程序
/etc/vsftpd/ftpusers:  黑名单,不受任何配置项的影响,它总是有效
/etc/vsftpd/user_list: 由配置文件中userlist_enable和userlist_deny决定是白名单还是黑名单
/var/log/xferlog:    默认日志文件

配置文件解析

listen=YES       定义ftp为独立守护进程
listen_port=21       设置FTP服务的端口号
#anonymous_enable=YES 是否允许匿名用户登录(anonymous/ftp)
local_enable=YES    是否允许本地用户登录
write_enable=YES    是否允许本地用户写入
local_umask=022       本地用户上传文件的默认权限掩码值
local_root=/var/ftp  设置本地用户的FPT根目录(缺省为用户的宿主目录)
local_max_rate       限制本地用户的最大传输速率(0为无限制),单位为字节
download_enable=YES  是否允许下载文件(仅限于浏览、上传的FTP服务器可将其设为NO)
#anon_upload_enable=YES       是否允许匿名用户上传文件
#anon_mkdir_write_enable=YES 是否允许匿名用户创建目录
#anon_other_write_enable=YES 是否允许匿名用户有其他写入权限,如改名、覆盖、删除
#anon_root=/var/ftp      匿名用户根目录(缺省/var/ftp)
#anon_umask=022             匿名用户上传文件的默认权限掩码值
#anon_world_readable_only=NO 允许匿名用户浏览文件的权限
#anon_max_rate=0             匿名用户的最大传输速率(0为无限制),单位为字节
dirmessage_enable=YES      是否显示目录说明文件,默认是YES但需要手工创建.message文件
xferlog_enable=YES      是否记录ftp传输过程,即启用FTP日志,默认/var/log/xferlog
xferlog_std_format=YES  启用标准的xferlog日志格式,若禁用此项,将使用vsftpd自已的日志格式
connect_from_port_20=YES   主动模式数据传输使用20端口
#chown_upload=YES      是否改变上传文件的属主
#chown_username=username    将属主改为那个用户
#idle_session_timeout=600  设置控制连接超时时间
#data_connection_timeout=120 设置数据传输超时时间
#accept_timeout=60      设置客户端超时时间
#chroot_list_enable=YES    使用文件将特定用户锁定在家目录
#chroot_list_file=/etc/vsftpd.chroot_list 用户列表文件
#以上两项可用下面这个配置代替
chroot_local_user=yes   是否将FTP本地用户禁锢在宿主目录中
pam_service_name=vsftpd   设置用于用户认证的PAM文件位置
userlist_enable=YES    是否启用user_list用户列表文件
userlist_deny=YES 是否禁止user_list列表文件中的用户账号,启用后这个文件内的用户不能登录ftp
tcp_wrappers=YES      是否启用tcp_wrappers访问控制
max_clients=0           最多允许多少个客户端同进连接FTP服务器(0为无限制)
max_per_ip=0           对来自相同IP地址的客户端,最多允许多少个并发连接(0为无限制)
pasv_enable=YES           打开被动模式连接
pasv_min_port=10000    设置被动模式服务器最小端口号
pasv_max_port=11000    设置被动模式服务器最大端口号
use_localtime=YES     设置FTP使用系统时间
dual_log_enable=YES    当设置为YES时将会同时产生两个日志文件[vsftpd.log\xferlog]
log_ftp_protocol=YES       是否记录所有ftp命令日志