FTP文件传送协议(File Transfer Protocol,简称FTP),是一个用于从一台主机到另送文件的协议。该协议的历史可追溯到1971年(当时因特网尚处于实验之中),不过至今仍然极为流行。
FTP在RFC 959中具体说明。HTTP和FTP都是文件传送协议,它们有许多共同的特征,比如都运行在TCP之上等。不过这两个应用层协议之间存在重要的差别。最重要的差别是FTP使用两个并行的TCP连接,一个是控制连接,一个是数据连接。控制连接用于在客户主机和服务器主机之间发送控制信息,例如用户名和口令、改变远程目录的命令、取来或放回文件的命令。数据连接用于真正发送文件。在整个会话期间,FTP服务器必须维护关于用户的状态。具体地说,服务器必须把控制连接与特定的用户关联起来,必须随用户在远程目录树中的游动跟踪其当前目录。为每个活跃的用户会话保持这些状态信息极大地限制了FTP能够同时维护的会话数。无状态的HTTP却不必维护任何用户状态信息。FTP服务可以工作在主动模式(active)和被动模式(passive)二种模式下:
主动模式(一般FTP服务器默认模式):FTP客户端开启一个随机选择的TCP端口连接FTP服务器的21端口请求建立连接。当完成Three-Way Handshake后,连接就成功建立,但这仅是控制连接的建立。当两端需要传送数据的时候,客户端通过命令通道用一个port command告诉服务器,客户端可以用另一个TCP端口做数据通道。然后服务器用20端口和刚才客户端所通知的TCP端口建立数据连接。注意:连接方向是从服务器到客户端的,TCP分组中会有一个SYN flag。 然后客户端会返回一个带ACK flag的确认分组,并完成另一次的Three-Way Handshake 过程。这时候,数据连接才能成功建立。开始数据传送。
被动模式:FTP客户端开启一个随机选择的TCP端口连接FTP服务器的21端口请求建立连接,完成控制连接的建立。当两端需要传送数据的时候,客户端 通过命令通道发送一个PASV command给服务器,要求进入被动传输模式。然后 服务器像上述的主动模式第 2 步骤那样,挑一个TCP端口,并用控制连接告诉 客户端。 然后客户端用另一个TCP端口连接刚才服务器告知的TCP端口来建立数据通道。此时分组中带有SYN flag。服务器确认后回送一个ACK分组。并完成所有握手过程、成功建立数据通道,开始数据传送。
目前可以实现FTP服务的软件非常多,比如Windows平台下的IIS、Serv-U,Linux平台下的wuFTP、vsftp等。vsftp(Very Secure FTP)是一种在Unix/Linux中非常安全且快速稳定的FTP服务器,目前已经被许多大型站点所采用,vsftpd也是RHEL默认的ftp服务,本文主要讲述vsftp相关配置方法。
一、安装vsftp。
rpm -ivh vsftpd-2.0.5-12.el5.rpm
安装完成后,vsftpd配置文件为/etc/vsftpd/vsftpd.conf,通过以下命令可启动vsftpd并将其设置为自动启动。
service vsftpd restart
chkconfig vsftpd on
二、第一个FTP站点。
vsftp在安装完成并启动后,即可使用。默认情况下可以使用匿名用户,下图中使用ftp命令进行。
1:使用ftp命令连接到ftp服务器。
2:因为目前使用匿名用户连接到ftp服务器,所有输入匿名用户(一般ftp服务器匿名为anonymous,这里的ftp用户是在安装vsftp时自动创建的,该用户也是vsftp的匿名用户)。
在连接到vsftp后,其默认目录为该用户的家目录,而ftp用户的家目录位于/var/ftp,所有。下图是用系统其它用户连接ftp服务器(如果在RHEL中开启SELinux,需要运行以下命令set sebool -P ftp_home_dir=1)。
三、配置参数。
参数 说明
listen_address=ip address 指定侦听IP
listen_port=port_value 指定侦听端口,默认21
anonymous_enable=YES 是否允许使用匿名帐户
local_enable=YES 是否允许本地用户登录
nopriv_user=ftp 指定vsftpd服务的运行帐户,不指定时使用ftp
write_enable=YES 是否允许写入
anon_upload_enable=YES 匿名用户是否可上传文件
anon_mkdir_write_enable=YES 匿名用户是否建立目录
dirmessage_enable=YES 进入每个目录是显示欢迎信息,在每个目录下建立.message文件在里面写欢迎信息
xferlog_enable=YES 上传/下载文件时记录日志
connect_from_port_20=YES 是否使用20端口传输数据(是否使用主动模式)
chown_uploads=YES、chown_username=whoever 修改匿名用户上传文件的拥有者
xferlog_file=/var/log/vsftpd.log 日志文件
xferlog_std_format=YES 使用标准文件日志
idle_session_timeout=600 会话超时,客户端连接到ftp但未操作
data_connection_timeout=120 数据传输超时
async_abor_enable=YES 是否允许客户端使用sync等命令
ascii_upload_enable=YES、ascii_download_enable=YES 是否允许上传/下载二进制文件
chroot_local_user=YES 限制所有的本地用户在自家目录
chroot_list_enable=YES、chroot_list_file=/etc/vsftpd/chroot_list 指定不能离开家目录的用户,将用户名一个一行写在/etc/vsftpd/chroot_list文件里,使用此方法时必须chroot_local_user=NO
ls_recurse_enable=YES 是否允许使用ls -R等命令
listen=YES 开启ipv4监听
listen_ipv6=YES 开启ipv6监听
pam_service_name=vsftpd 使用pam模块控制,vsftpd文件在/etc/pam.d目录下
userlist_enable=YES 此选项被激活后,vsftpd将读取userlist_file参数所指定的文件中的用户列表。当列表中的用户登录FTP服务器时,该用户在提示输入密码之前就被禁止了。即该用户名输入后,vsftpd查到该用户名在列表中,vsftpd就直接禁止掉该用户,不会再进行询问密码等后续步聚
userlist_deny=YES 决定禁止还是只允许由userlist_file指定文件中的用户登录FTP服务器。此选项在userlist_enable 选项启动后才生效。YES,默认值,禁止文件中的用户登录,同时也不向这些用户发出输入密码的提示。NO,只允许在文件中的用户登录FTP服务器
tcp_wrappers=YES 是否允许tcp_wrappers管理
local_root=/home/ftp 所有用户的根目录,,对匿名用户无效
anon_max_rate 匿名用户的最大传输速度,单位是Byts/s
local_max_rate 本地用户的最大传输速度,单位是Byts/s
download_enable= YES 是否允许下载
在上面所有参数中,只要涉及到上传的参数在启用后还需要对应本地目录有写入权限。


cky000 于 2009-12-30 15:22:51发表:
多谢楼主先
最好能有图片加以说明
niupijieke 于 2009-12-23 21:41:16发表:
set sebool -P ftp_home_dir=1
是关闭SELinux的吧 是临时关闭的吧
bingwzi 于 2009-12-22 23:03:32发表:
谢谢!
DouglasLau 于 2009-10-12 22:19:25发表:
楼主真有心,这么详细!
wang001 于 2009-10-04 18:33:41发表:
2# fire05
此文集好
fire05 于 2009-09-21 15:43:55发表:
谢谢楼主