FTP:(File Transfer Protocol,应用层文件传输协议) 最古老的传输协议之一,它的主要功能是在Server与Client之间使用TCP进行文件传输,ftp有两种连接:命令连接(21/TCP)和数据连接(20/TCP);其中数据连接又有两种模式:主动模式(active)和被动模式(passive),既FTP服务可以工作在主动模式(active)和被动模式(passive)两种模式,所说的主动/被动模式都是基于Server端来说的。
主动模式(active)
Client用>1023(2334)的随机端口向Server的21端口发起命令连接请求,当命令连接建立完成之后,当两端需要传输数据的时候,Client通过命令通道发送一个PORT command告诉Server,我打开了另一个TCP Port做数据通道(通常这个端口是2334+1的端口,当2334+1端口被占用时,Client 查找2334+1+1的端口,以此类推直到找到Client未被使用的>1023的随机端口为止),这是Server使用TCP 20端口和Client通知的TCP端口建立数据连接,当完成TCP三次握手之后数据连接建立完成,此时就可以进行数据传送了。
被动模式(passive)
Client用>1023(3334)的随机端口向Server的21端口发起命令连接请求,当命令连接建立完成之后,当两端需要传输数据的时候,Client通过命令通道发送一个PASV command给Server要求进入被动传输模式,而后Server随机选择一个未被使用>1023的TCP端口,并通过控制连接通知Client让Client使用另一个>1023且未被使用的TCP端口连接Server指定的TCP端口,当TCP三次握手完成之后数据连接建立完成,此时就可以进行数据传输了。
注:不论是主动模式还是被动模式,Client总是命令连接的发起者;当数据传输完成之后,数据连接就会断开,但命令连接一般不会立即断开
VSFTPD概述
由于ftp这个协议使用明文传输文件,为了更安全使用ftp,这是轻量级vsftpd出现的原因。
vsftpd (Very Secure FTP,非常安全的FTP)除了安全特性以外,还具有高速和稳定的特性,而且VSFTPD服务启动模式有两种:一种是vsftpd独立运行;一种是通过xinetd这个超级进程来管理的方式运行;此外vsftpd可以通过三种不同的方式来实现:
- 匿名用户形式:vsftpd默认就允许匿名用户以只读方式登录
- 本地用户形式:以vsftpd所在主机/etc/passwd中用户及密码作为认证用户的来源,这是默认配置
- 虚拟用户形式:vsftpd支持将用户及密码保存在本地数据文件、数据库或LDAP中。较FTP的本地用户,虚拟用户只是FTP Server 的专有用户,虚拟用户只能访问FTP Server所能提供的resources,大大增加了OS本身的安全性。与匿名用户相比,虚拟用户需要提供Account和password才能获取FTP中的资源,方便对用户多和资源的管理,鉴于主机的安全和管理FTP的方便,虚拟用户是一种很好的解决方案。
VSFTPD软件的结构
- /etc/vsftpd/vsftpd.conf:vsftpd的配置文件,通过man 5 vsftpd.conf了解详细信息
- /etc/pam.d/vsftpd:vsftpd使用PAM模块相关文件,主要用来用户身份认证
- /etc/vsftpd.ftpusers:与2相关,把禁止登录的账号写入此文件即可,一行一个用户
- /etc/vsftpd.user_list:此文件生效与否和userlist_enable、userlist_deny有关
- /etc/vsftpd.chroot_list:默认不存在,主要功能是把用户锁在家目录中,此文件是否生效与chroot_list_enable和chroot_list_file参数有关。
- /usr/sbin/vsftpd: vsftpd的执行文件
- /var/ftp/:vsftpd匿名用户登录的根目录
别的不多说,接下来我们来安装vsftpd,安装方式有两种:rpm安装和编译源码包安装
这里以rpm安装为例
一、安装
1、安装
- # yum install vsftpd –y ###用yum安装
- # rpm -ivh /media/cdrom/Server/vsftpd-2.0.5-16.el5.i386.rpm ##rpm命令安装
- # rpm -ql vsftpd ###查看安装vsftpd后生成的文件和目录
- # rpm -qc vsftpd ###查看vsftpd的配置文件
2、把vsftpd 加入服务列表并让其开机自动启动
- # chkconfig --add vsftpd ##加入服务列表
- # chkconfig vsftpd on ##开机自动启动
- # service vsftpd start ##启动vsftp服务
二、vsftpd.conf 各个参数数明
- # grep -e "^\<.*" /etc/vsftpd/vsftpd.conf -e "^#[^[:space:]]\{1,\}" ###获取vsftpd.conf各项参数
- anonymous_enable=YES|NO ##是否允许匿名用户登录
- allow_anon_ssl=YES|NO ##是否允许匿名用户SSL连接FTP
- local_enable=YES |NO #是否允许本地用户登录
- write_enable=YES |NO ##是否允许用户上传文件,此参数只对费匿名用户有效
- local_umask=022 ##授权用户上传文件的umask
- anon_umask=022 ##匿名用户上传文件的umask
- download_enable=YES|NO ##是否允许用户下载文件
- #anon_upload_enable=YES ##是否允许匿名用户上传
- #anon_mkdir_write_enable=YES ##是否允许匿名用户在FTP Server上建立目录
- anon_other_write_enalbe=YES ##是否允许匿名用户执行创建目录之外的其他操作(删除、重命名)
- dirmessage_enable=YES ##当用户切换目录时是否显示欢迎信息
- xferlog_enable=YES ##是否记录用户上传/下载文件时记录日志
- connect_from_port_20=YES ##是否使用20端口传输数据
- #chown_uploads=YES ##是否修改匿名用户上传文件的所有者
- #chown_username=whoever ##指定匿名用户上传文件的所有者
- #xferlog_file=/var/log/xferlog ##指定使用的日志文件
- xferlog_std_format=YES ##是否使用标准日志文件记录日志
- #idle_session_timeout=600 ##指定会话超时的时间
- #data_connection_timeout=120 ##指定数据传输超时时间
- #nopriv_user=ftpsecure ##指定vsftpd服务运行的账户,默认ftp
- #async_abor_enable=YES ##是否允许客户端使用sync命令
- #ascii_upload_enable=YES ##是否在上传文件时使用ASCII传输模式
- #ascii_download_enable=YES ##是否在下载文件时使用ASCII传输模式
- #ftpd_banner=Welcome ##定义ftp的欢迎信息
- #deny_email_enable=YES ##
- #banned_email_file=/etc/vsftpd/banned_emails
- chroot_local_user=YES|NO ##是否把所有用户锁在自己的家目录
- #chroot_list_enable=YES #是否把指定的用户锁在其家目录,只有chroot_local_user=YES时,才有效
- #chroot_list_file=/etc/vsftpd/chroot_list ##把不能离开其家目录的用户写在指定的文件里,一行一个,只有当chroot_list_enable=YES时,该参数才有效
- local_root=/directory path ##指定所有用户的根目录,该参数对匿名用户无效
- anon_max_rate=0 ##单位Byte/s,限制匿名用户的最大传输速度,0表示不限制
- local_max_rate=0 ##和上面的参数一样限制用户的最大传输速度
- deny_file={*.exe} ##指定不允许上传的文件类型
- #ls_recurse_enable=YES ##是否允许用户登录ftp后使用ls –R命令
- dirlist_enable=YES|NO ##是否允许使用dir列出目录
- listen=YES ##vsftpd服务运行的模式,YES表示独立运行,NO让xinetd管理
- #listen_ipv6=YES
- listen_address=172.16.11.1 ##指定vsftpd监听的IP地址
- listen_port=34 ##指定vsftpd监听的端口,默认TCP的21端口
- max_clients=300 ##设定vsftpd允许的最大连接数
- max_per_ip=8 ##设定每个ip最大连接数
- pam_service_name=vsftpd ##指定vsftpd使用PAM模块的配置文件,默认在/etc/pam.d
- userlist_file=/file path ##指定允许或禁止登录ftp用户的文件
- userlist_enable=YES | NO ##为YES时用户输入用户名后,vsftpd检查到输入的用户名在列表中,vsftpd就直接禁用此用户,不会再询问用户输入密码等后续操作
- userlist_deny=YES|NO ##该参数决定禁止还是只允许userlist_file文件中用户登录ftp服务器,该参数只有在userlist_enable=YES时才生效,YES是其默认参数值,既是禁止用户列表中的用户登录ftp服务器
- tcp_wrappers=YES | NO ##是否允许tcp_wrapper管理
转载于:https://blog.51cto.com/urchin/828185