FTP(File Transfer Protocol)是文件传输协议,FTP是在TCP/IP网络和internet上最早使用的协议之一,工作于应用层;实现了文件的共享和可靠、高效的数据传输。
FTP的两个链接:1、命令链接--用于传输各种命令指令(使用服务器端的21端口);2、数据链接--用于数据传输;
FTP的工作模式:
1、主动模式:
命令连接:
客户端打开一个随机端口(端口号大于1023,在这里,我们称它为x)去连接服务器端的21号端口;
数据连接:
服务器端用20号端口去连接客户端的x+1号端口,进行数据连接;
2、被动模式:
命令连接:
同主动模式的命令连接;
数据连接:
服务器端向客户端发送两个随机数,通知客户端已打开了一个端口(>1023,在这里,我们称它为y)用于数据连接,客户端则用x+1号端口去连接y号端口。
FTP的数据传输格式:
1、binary--二进制的形式;
2、ASCII--ASCII码的形式。
------------------------------------------------------------------------------------
Vsftpd的安装与配置
安装:
Vsftpd软件包的安装可采用源码编译安装和利用rpm包安装,这里采用后者,利用redhat5.4的系统光盘上自带的vsftpd的rpm包安装。配置yum源指向本地。
#yum install vsftpd -y
配置:
利用rpm包安装完成后,vsftpd的配置文件位于/etc/vsftpd/vsftpd.conf
文件内容及含义:
- anonymous_enable=YES|NO --指定是否允许匿名用户登录
- local_enable=YES|NO --允许本地用户Id大于500的用户登录
- wirte_enable=YES|NO --定义本地用户是否具有写权限;
- local_umask=022 -- 定义本地用户的反掩码;
- anon_upload_enable=YES|NO --定义匿名用户能否上传;
- anon_mkdir_write_enable=YES|NO --定义创建目录权限;
- anno_other_write_enable=YES|NO --定义删除和重命名的权限;
- anon_world_readable_only=YES|NO --定义匿名用户只能下载全局可读的文件;
- dirmessage_enable=YES|NO --切换到目录时显示欢迎信息;
- xferlog_enable=YES|NO --打开传输日志功能
- 启用xferlog_file=/var/log/vsftp.xferlog
- connect_from_port_20=YES|NO --允许主动模式连接;
- idle_session_timeout=600 --定义超时时间;
- nopriv_user=ftpsecure --非特权用户;
- ftpd_banner=Welcome ftp --定义欢迎信息;
- chroot_list_enable=YES --将用户登录时的目录作为家目录,不能查看其它目录;
- chroot_local_user=YES --锁定全部用户;(锁定部分用户:1、chroot_list_enable=YES2、chroot_list_file=/etc/vsftpd/chroot_list --定义需要锁定用户列表的文件)
- ls_recurse_enable=YES
- listen=YES --定义vsftpd 为独立守护进程;
- pam_service_name=vsftpd --指定pam认证的配置文件名
- userlist_enable=YES --启用用户列表
- userlist_deny=YES|NO --yes:定义用户列表为黑名单,no:定义用户列表为白名单,仅允许,列表中用户登录。
--------------------------------------------------------------------------------
VSFTPD结合SSL实现加密传输
1、让FTP服务器获得私钥和证书;
这里利用openssl建立CA服务器,给FTP服务器颁发证书,具体过程详见http://wld6linux.blog.51cto.com/4356376/798536
2、修改vsftpd的配置文件;
内容如下:
- ssl_enable=YES --开启ssl
- ssl_tlsv1=YES --支持tlsv1
- ssl_sslv2=YES --支持sslv2
- ssl_sslv3=YES --支持sslv3
- allow_anon_ssl=NO --不允许匿名用户使用ssl
- force_local_data_ssl=YES ---强制数据连接使用ssl
- force_local_logins_ssl=YES --强制登陆时使用ssl
- rsa_cert_file= --指定证书文件的存放位置
- rsa_private_key_file= ---指定私钥文件的存放位置
这样FTP服务器便支持数据的加密传输了。