FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。 基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:“下载” (Download)和"上传"(Upload)。"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至 远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。
简单地说,支持FTP协议的服务器就是FTP服务器。与大多数Internet服务一样,FTP也是一个客户机/服务器系统。 用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出命令,服务器程序执行用户所发出的 命令,并将执行的结果返回到客户机。比如说,用户发出一条命令,要求服务器向用户传送某一个文件的一份拷贝,服务器会响应这条命令,将指定文件送至用户的 机器上。客户机程序代表用户接收到这个文件,将其存放在用户目录中。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件,由于FTP的文件传输是明文方式,具有一定危险性,所以就诞生了一种更加安全的传输方式vsftp,下面主要介绍vsftp的特性及相关配置。
FTP的目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。虽然我们也可以手工使用它,但是它的主要作用是供程序使用的
vsftp一般以普通用户运行,降低了进程的权限,提高了安全性
任何需要执行较高权限的指令都需要上层程序的许可
ftp的命令都被整合到了vsftp中,不需要系统额外提供命令
用于chroot功能,可以改变用户的根目录,限制用户只能在自己的家目录
vsftpd 是一个基于GPL发布的FTP服务器软件。其中的vs是“ Very Secure”的缩写,由此名称缩写可以看出,本服务器的初衷就是服务的安全性。
vsftpd是RedHat Linux默认使用的ftp服务端软件。
vsftpd不再依赖于xinetd服务
vsftpd可同时允许匿名( anonymous )与本地用户(local)访问,还可以支持虚拟用户。
VSFTP连接类型:
控制连接:TCP 21(命令端口),用于发送FTP命令信息;一般来说,客户端有一个 Socket 用来连接 FTP 服务器的相关端口,它负责 FTP 命令的发送和接收返回的响应信息。一些操作如“登录”、“改变目录”、“删除文件”,依靠这个连接发送命令就可完成。
数据连接:TCP 20(数据端口),用于上传、下载数据;对于有数据传输的操作,主要是显示目录列表,上传、下载文件,我们需要依靠另一个 Socket来完成。如果使用被动模式,通常服务器端会返回一个端口号。客户端需要用另开一个 Socket 来连接这个端口,然后我们可根据操作来发送命令,数据会通过新开的一个端口传输。如果使用主动模式,通常客户端会发送一个端口号给服务器端,并在这个端口监听。服务器需要连接到客户端开启的这个数据端口,并进行数据的传输。
注:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
主动模式(PORT):服务端从20端口主动向客户端发起连接
被动模式(PASV):服务端在指定范围内某个端口被动等待客户端连接
主动模式端口分配:控制端口 21 传输数据端口20
被动模式端口分配:控制端口 21 传输数据端口随机
主动模式下,客户端随机打开一个大于 1024 的端口向服务器的命令端口 P,即 21 端口,发起连接,同时开放N +1 端口监听,并向服务器发出 “port N+1” 命令,由服务器从它自己的数据端口 (20) 主动连接到客户端指定的数据端口 (N+1)。FTP 的客户端只是告诉服务器自己的端口号,让服务器来连接客户端指定的端口。对于客户端的防火墙来说,这是从外部到内部的连接,可能会被阻塞。
为了解决服务器发起到客户的连接问题,有了另一种 FTP 连接方式,即被动方式。命令连接和数据连接都由客户端发起,这样就解决了从服务器到客户端的数据端口的连接被防火墙过滤的问题。被动模式下,当开启一个 FTP 连接时,客户端打开两个任意的本地端口 (N > 1024 和 N+1) 。第一个端口连接服务器的 21 端口,提交 PASV 命令。然后,服务器会开启一个任意的端口 (P > 1024 ),返回如“227 entering passive mode (127,0,0,1,4,18)”。 它返回了 227 开头的信息,在括号中有以逗号隔开的六个数字,前四个指服务器的地址,最后两个,将倒数第二个乘 256 再加上最后一个数字,这就是 FTP 服务器开放的用来进行数据传输的端口。如得到 227 entering passive mode (h1,h2,h3,h4,p1,p2),那么端口号是 p1*256+p2,ip 地址为h1.h2.h3.h4。这意味着在服务器上有一个端口被开放。客户端收到命令取得端口号之后, 会通过 N+1 号端口连接服务器的端口 P,然后在两个端口之间进行数据传输。
service iptables stop
setenforce 0
安装vsftpd:
yum -y install vsftpd
service vsftpd start
netstat -anpt | grep :21
现在可以直接访问ftp://ip地址访问ftp了。(事例:ftp://192.168.152.130)
vim /etc/vsftpd/vsftpd.conf
Vsftpd配置目录为/etc/vsftpd,其中包含下面几个文件
/var/ftp/:默认情况下匿名用户的根目录
Vsftpd.conf:这是其主配置文件
Ftpusers:配置禁止访问FTP服务器的用户列表
User_list:配置用户访问控制
vsftpd_conf_migrate.sh:是vsftpd 操作的一些变量和设置脚本
anonymous_enable=YES(控制是否允许匿名用户登录,默认为YES允许登陆)
anon_upload_enable=YES (容许匿名用户有上传文件(非目录)的权限,只有在write_enable=YES时此项才有效,当然匿名用户要对上层目录有权限。默认为NO。
anon_mkdir_write_enable=YES (容许匿名用户建立目录,只有在write_enable=YES时此项才有效,当然匿名用户要对上层目录有权限。默认为NO。)
anon_other_write_enable=YES (容许匿名用户除了新建和上传外的其他权限,如:删除、更名。默认为NO)
Local_enable=YES(是否允许本地用户登入,默认为YES)
Local_root=/home/username(当本地用户登入时,将被更换到定义的目录下,默认为各自的家目录)
write_enable=YES(是否允许登陆用户有写权限,是全局设置,默认为YES)
local_umask=022(本地用户新增档案时的umask值,默认为077)
file_open_mode=0755 (本地用户上传档案后的档案权限,与chmod?所使用的数值相同。默认值为0666)
ascii_upload_enable=YES(设置是否使用ASCII模式上传数据,默认为NO)
ascii_download_enable=YES(设置是否使用ASCII模式下载数据,默认为NO)
Anon_max_rate=0(设置匿名登录用户的最大传输速度,单位为B/s,0表示不限制速度,默认为0)
Local_max_rate=0(本地登录用户的最大传输速度,单位为B/s,0表示不限制速度,默认为0)
Accept_timeout=0(设置建立FTP连接的超时时间,单位为秒,默认值为60)
Connect_timeout=60(PORT方式下建立数据连接超时时间,单位为秒,默认值为60)
idle_session_timeout=300 (设置多长时间不对FTP服务器进行任何操作,则断开该FTP连接,单位为秒。默认值为300)
Pasv_enable=YES(若设置为YES则使用PASV模式,设置为NO则是PORT模式,默认值为YES)
listen=YES (设置vsftpd服务器是否以standalone模式运行。以standalone模式运行是一种较好的方式,此时listen必须设置为YES,此为默认值。建议不要更改,有很多与服务器运行相关的配置命令,需要在此模式下才有效。若设置为NO,则vsftpd不是以独立的服务运行,要受到xinetd?服务的管控,功能上会受到限制。)
max_clients=0 (设置vsftpd允许的最大连接数,默认值为0,表示不受限制。若设置为100时,则同时允许有100个连接,超出的将被拒绝。只有在standalone模式运行才有效。)
max_per_ip=0 (设置每个IP允许与FTP服务器同时建立连接的数目。默认值为0,表示不受限制。只有在standalone模式运行才有效。)