首页 > 代码库 > linux架构学习第二十八天之FTP协议以及vsftpd的使用
linux架构学习第二十八天之FTP协议以及vsftpd的使用
内容:
1、ftp协议
2、vsftpd的搭建及配置
一、FTP协议
1、FTP协议:
FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。工作在第七层,而且是基于TCP协议传输数据。
FTP工作原理与其它的应用协议有些不同。它是用两个端口进行通信的。一个端口用于命令交互。这个端口在用户连接之后一直保持;而另一个端口只是在数据传时打开(比如:上传文件,下载文件,获取服务端文件列表),在数据传输时有两种不同的模式,一是用户开通这个数据端口,这种模式叫做主动模式;二是服务器提供一个接口,这个模式叫被动模式。
2、FTP的传输数据:
FTP的传输有两种方式:ASCII传输模式和二进制数据传输模式。
(1)、ASCII传输方式:假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件(尽管字处理文件包含的大部分是文本,其中也包含有指示页尺寸,字库等信息的非打印符)。在拷贝任何非文本文件之前,用binary 命令告诉ftp逐字拷贝,不要对这些文件进行处理,这也是下面要讲的二进制传输。
(2)、二进制传输模式:在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。如果你在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会使传输稍微变慢 ,也会损坏数据,使文件变得不能用。(在大多数计算机上,ASCII方式一般假设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果你传输二进制文件,所有的位都是重要的。)如果你知道这两台机器是同样的,则二进制方式对文本文件和数据文件都是有效的。
3、FTP的工作方式
FTP支持两种模式,一种方式叫做Standard (也就是 PORT方式,主动方式),一种是 Passive (也就是PASV,被动方式)。 Standard模式 FTP的客户端发送 PORT 命令到FTP服务器。Passive模式FTP的客户端发送 PASV命令到 FTP Server。
这两种方式的工作原理:
Port模式FTP 客户端首先和FTP服务器的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。
Passive模式在建立控制通道的时候和Standard模式类似,但建立连接后发送的不是Port命令,而是Pasv命令。FTP服务器收到Pasv命令后,随机打开一个高端端口(端口号大于1024)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。
注意:很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为客户端无法穿过防火墙打开FTP服务器的高端端口;而许多内网的客户端不能用PORT模式登陆FTP服务器,因为从服务器的TCP 20无法和内部网络的客户端建立一个新的连接,造成无法工作。
二、vsftpd的搭建及配置
1、vsftpd简介
vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。
vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用。
2、vsftp的安装以及配置使用
vsftpd:
程序环境:
配置文件:/etc/vsftpd/vsftpd.conf
主程序:/usr/sbin/vsftpd
文件路径映射:/var/ftp
用户的家目录的映射:访问ftp必须以某个系统用户的身份,此用户的家目录即文档目录;
匿名用户:anonymous,要映射为一个系统用户,默认是ftp;
用户种类:
匿名用户:
系统用户:可以登录系统的用户,/etc/passwd里的用户
虚拟用户:不是系统的登录用户
3、配置vsftpd:
配置文件:vsftpd.conf
directive=value
注意:directive之前不能有任何字符;
注意:任何配置的权限修改还要结合文件系统的文件权限,比如,就算在配置文件中允许匿名用户下载文件,但假如文件本身的权限不够,也一样不能下载。
匿名用户:
anonymous_enable=YES:允许匿名用户登录
anon_upload_enable=YES :允许匿名用户上传文件
anon_mkdir_write_enable=YES :允许匿名用户创建目录
anon_other_write_enable=YES :允许匿名用户其他的写权限如,删除目录等
注意:如果允许匿名用户上传,默认上传的权限是600,因为匿名上传文件的umask为077,要修改则要添加:anon_umask=022;
系统用户:
local_enable=YES :允许本地用户登录
write_enable=YES :允许本地用户写权限
辅助认证配置文件/etc/vsftpd/ftpusers:
pam认证的配置文件:/etc/pam.d/vsftpd
chroot_local_users=YES
禁锢所有的本地用户于自己的家目录中;但需要事先移除用户对家目录的写权限;
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
禁锢指定的文件列表中的用户于自己的家目录中;但需要事先移除用户对家目录的写权限;(这两个指令一般同时启用或不启用)
数据传输日志:
xferlog_std_format=YES
xferlog_enable=YES
xferlog_file=/var/log/xferlog
控制可登录vsftpd服务的用户列表:
userlist_enable=YES:是否启用/etc/vsftpd/user_list文件来可登录的用户;
userlist_deny={YES|NO}
YES:黑名单
NO:白名单
4、FTP数字代码的意义
110 重新启动标记应答。120 服务在多久时间内ready。
125 数据链路端口开启,准备传送。
150 文件状态正常,开启数据连接端口。
200 命令执行成功。
202 命令执行失败。
211 系统状态或是系统求助响应。
212 目录的状态。
213 文件的状态。
214 求助的讯息。
215 名称系统类型。
220 新的联机服务ready。
221 服务的控制连接端口关闭,可以注销。
225 数据连结开启,但无传输动作。
226 关闭数据连接端口,请求的文件操作成功。
227 进入passive mode。
230 使用者登入。
250 请求的文件操作完成。
257 显示目前的路径名称。
331 用户名称正确,需要密码。
332 登入时需要账号信息。
350 请求的操作需要进一部的命令。
421 无法提供服务,关闭控制连结。
425 无法开启数据链路。
426 关闭联机,终止传输。
450 请求的操作未执行。
451 命令终止:有本地的错误。
452 未执行命令:磁盘空间不足。
500 格式错误,无法识别命令。
501 参数语法错误。
502 命令执行失败。
503 命令顺序错误。
504 命令所接的参数不正确。
530 未登入。
532 储存文件需要账户登入。
550 未执行请求的操作。
551 请求的命令终止,类型未知。
552 请求的文件终止,储存位溢出。
553 未执行请求的的命令,名称不正确。
本文出自 “6638225” 博客,转载请与作者联系!
linux架构学习第二十八天之FTP协议以及vsftpd的使用