作者:贤慧201077 | 来源:互联网 | 2017-11-03 18:47
一.FTP简介:Ftp:filetransferprotocol(文件传输协议)是一个用于在两台或者多台不同的操作系统中传输文件的协议,从FPT的诞生至今已经40年了。今年是它的40年纪念。所以它理所当然的成为了这个世界上最古老的协议,没有之一。二.FTP工作原理FTP的
一.FTP简介:
Ftp: file transfer protocol (文件传输协议)是一个用于在两台或者多台不同的操作系统中传输文件的协议,从FPT的诞生至今已经40年了。今年是它的40年纪念。所以它理所当然的成为了这个世界上最古老的协议,没有之一。
二.FTP工作原理
FTP的工作基于TCP协议
我们最常见的也是最常用的端口:
21号端口:是实现命令控制的。(当我们验证之后,我们执行一些比如put get ls等命令都是通过这个端口进行传输的)
20号端口:实现数据传输的。
服务器有两种数据传输模式:
1.主动模式。
2.被动模式。
主动模式和被动模式是针对服务器来说的,而到底在运作的过程中到底采用主动模式还是被动模式,则是由客户端来决定的。主动模式要求客户端和服务器端同时打开并且监听一个端口以创建连接。在这种情况下,客户端由于安装了防火墙会产生一些问题。所以,创立了被动模式。被动模式只要求服务器端产生一个监听相应端口的进程,这样就可以绕过客户端安装了防火墙的问题。
主动模式的实现方式:
a.客户端打开一个随机的端口(端口号大于1024,在这里,我们称它为x),同时一个FTP进程连接至服务器的21号命令端口。此时,该tcp连接的来源地端口为客户端指定的随机端口x,目的地端口(远程端口)为服务器上的21号端口。
b.客户端开始监听端口(x+1),同时向服务器发送一个端口命令(通过服务器的21号命令端口),此命令告诉服务器客户端正在监听的端口号并且已准备好从此端口接收数据。这个端口就是我们所知的数据端口。
c.服务器打开20号源端口并且创建和客户端数据端口的连接。此时,来源地的端口为20,远程数据(目的地)端口为(x+1)。
d.客户端通过本地的数据端口创建一个和服务器20号端口的连接,然后向服务器发送一个应答,告诉服务器它已经创建好了一个连接。
三.FTP的用户/服务器类型:
1)FTP服务器可以支持的用户类型主要有3大类。
1.匿名用户: anonymous 或者 ftp
一般使用的就是匿名用户。
2.本地用户:
账号名称、密码等信息保存在passwd、shadow文件中
3.虚拟用户:
使用独立的账号/密码数据文件。
可以是 db 数据库,也可以直接放在mysql 中,也可以放在一个文件上
2)常见的FTP服务器:
IIS Serv-U(在windows上比较常用的)
wu-ftpd(现存最古老的) 、
Proftpd (功能非常强大的ftp软件,根据你的需要,它可以制定)
pureftpd (功能强大的ftp软件)
vsftpd(RedHat上最常用的,轻量级的 只有140K,但是却非常安全)
3)常见的FTP客户端:
ftp命令
lftp命令
gftp (linxu上图形化的ftp工具)
CuteFTP
FlashFTP(号称是最快的FTP)、
Ftps 会有通过ssl加密的机制。
四.vsftpd 服务器
我们以vsftpd服务器的构架,来讲解到底如何架构一个FTP服务器
首先要知道,我们vsftpd服务器就是用ftp这个用户的身份来运行的。而vsftpd又受到selinux的控制,所以要先把selinux关了。
1. 安装vsftpd:
- yum install vsftpd
安装好之后,我们可以看到vsfptd这个命令被安装在了/usr/sbin目录中叫做vsftpd
配置文件保存在/etc/vsftpd目录下
而它的所有文件保存在/var/ftp中
2.如何配置vsftpd
首先进入/etc/vsftpd目录下
① ftpusers 文件:
这个是一个定义文件里面定义着那些被禁止登陆的用户
② user_list 文件:
这个文件中的列表提供一份FTP用户列表,定义了是否禁止用户登录,而这个文件是否能生效,取决于主配置文件中的设置
③ /etc/vsftpd.conf
主配置文件,详细的定义了所有的规则:
我们来看看常用的规则:
local_enable=YES 是否允许以本地用户身份访问
本地用户默认通过ftp登陆默认在家目录下
write_enable 是否允许本地用户登录后可写?(只创建文件)
anon_mkdir_write_enable=YES 允许本地用户登录后可创建文件夹
anon_upload_enable=YES 是否允许匿名用户上传
chown_upload=YES 对匿名用户上传的文件进行一次自动的更改属主
chown_username=root 定义更改的属主
dirmessage_enable=YES 给当前目录增加一个欢迎信息
message_file=.message 你的欢迎文件的位置。
xferlog_enable=YES 是否开启日志信息
xferlog_file=/var/log/vsftpd.log配置日志文件在哪
idle_session_timeout=600 会话的响应时间
data_connection_timeout=120 数据响应时间
ftpd_banner=Welcome to bash FTPservice. FTP的欢迎信息。
chroot_list_enable=YES 这项的作用是是否把用户锁在它的家目录中。
这个不开启的话是非常危险的。不对用户进行限制则会让一个用户各种乱跑,并且修改文件。当这个开启的时候,用户登录到这个目录中后,使用pwd命令则根本不显示你到底位于何方。
chroot_list_file=/etc/vsftpd/chroot_list通过这个表,你可以定义到底限制哪些用户。
listen=YES 让FTP以独立进程运行在我们的机子上的。
如果改成 NO, 则让他以一个非独立的进程。则成为init的一个子进程。
pam_service_name=vsftpd 基于pub认证
userlist_enable=YES 是否开启列表的控制 user_list 文件:
userlist_deny=YES 他默认是拒绝的,只要你想进去,则会立刻拒绝。如果我们改成NO,则仅能这个列表中的用户访问。
lftp-u student 172.16.100.1 则可以进行验证