FTP服务器
FTP文件共享基于TCP/IP协议,目前绝大多数系统都会有支持FTP的工具存在。FTP是一种通用性比较强的网络文件共享方式。
FTP服务概述
FTP方便地解决了文件的传输问题,从而让人们可以方便地从计算机网络中获得资源。FTP已经成为计算机网络上文件共享的一个标准。FTP服务器中的文件按目录结构进行组织,用户通过网络与服务器建立连接。FTP是仅基于TCP的服务,不支持UDP。与众不同的是FTP使用两个端口,一个数据端口和一个命令端口,也可叫作控制端口。通常来说这两个端口是21(命令端口)和20(数据端口)。FTP的工作方式不同,数据端口也并不总是20,可由此分为主动FTP和被动FTP。
1.主动FTP
主动方式的FTP客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口21,然后客户端开始监听端口N+1,并发送FTP命令“portN+1”到FTP服务器。接着服务器会从自己的数据端口(20)连接到客户端指定的数据端口(N+1)。主动模式下,服务器端开启的是20和21端口,客户端开启的是1024以上的端口。
2.被动FTP
为了解决服务器发起到客户的连接的问题采取了被动方式,或叫作PASV,当客户端通知服务器处于被动模式时才启用。在被动方式FTP中,命令连接和数据连接都由客户端发起,当开启一个FTP连接时,客户端打开两个任意的非特权本地端口(N > 1024和N+1)。第1个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连接它的数据端口,而是提交PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器端口P的连接来传送数据,此时服务端的数据端口不再是20端口。此时服务端开启的是21命令端口和大于1024的数据连接端口,客户端开启的是大于1024的两个端口。
主动模式是从服务器端向客户端发起连接,被动模式是客户端向服务器端发起连接。两者的共同点是都使用21端口进行用户验证及管理,差别在于传送数据的方式不同。
vsftp的安装与配置
在Linux系统下,vsftp是一款应用比较广泛的FTP软件,其特点是小巧轻快,安全易用。目前在开源操作系统中常用的FTP软件除vsftp外,主要有proftpd、purefrpd和wu-ftpd等,各个FTP软件并无优劣之分,读者可选择熟悉的FTP软件。
1.安装vsftpd
安装此FTP软件可以采用rpm包或源码的方式,rpm包可以在系统安装盘中找到。
安装过程如下:
#使用yum安装
yum -y install vsftpd
#验证是否安装成功
rpm -qa vsftpd
2. vsftp配置文件
anonymous_enable=NO #是否允许匿名用户登录YES/NO
local_enable=YES #是否允许本地用户登录YES/NO
write_enable=YES #是否允许本地用户对FTP服务器文件具有写权限YES/NO
local_root=/home/wwwroot/ #为不同用户设置不同的ftp根目录
chroot_local_user=YES #锁定用户到各自目录为其根目录YES/NO
allow_writeable_chroot=YES #各用户是否可以上传下载YES/NO
user_config_dir=/etc/vsftpd/userconfig #用户配置目录,这就是我新建的那个文件夹
local_umask=022 #设置本地用户的文件掩码为缺省022,也可根据个人喜好将其设置为其他值
dirmessage_enable=YES # 是否激活目录欢迎信息功能YES/NO
xferlog_enable=YES #是否让系统自动维护上传和下载的日志文件默认情况该日志文件为/var/log/vsftpd.log,也可以通过下面的xferlog_file选项对其进行设定YES/NO
connect_from_port_20=YES #是否设定FTP服务器将启用FTP数据端口的连接请求YES/NO
xferlog_std_format=YES #是否以标准xferlog的格式书写传输日志文件YES/NO
ascii_upload_enable=YES #是否以ASCII方式上传数据YES/NO
ascii_download_enable=YES #是否以ASCII方式下载数据YES/NO
listen=YES #是否允许监听新的端口YES/NO
#listen_ipv6=YES #此项很重要,记得注释
pam_service_name=vsftpd #
userlist_enable=YES #设置是否阻扯user_list文件中的用户登录FTP服务器,默认为YES
tcp_wrappers=YES #是否使用tcp_wrappers作为主机访问控制方式
userlist_deny=NO #当userlist_enable为YES,userlist_deny为NO时,FTP服务器仅允许user_list中的用户访问
listen_port=6666 #监听一个新的端口6666
#修改ftp默认的21端口,数字随意,只要在1024-65535之内就行(1024以下是系统保留的,从1024-65535是用户使用的)
3. 匿名FTP设置
配置允许匿名用户访问并上传文件,配置文件路径一般为/etc/vsftpd.conf,如果是使用rpm包安装,配置文件位于/etc/vsftpd/vsftpd.conf
4. 实名FTP设置
除配置匿名FTP服务外,vsftp还可以配置实名FTP服务器,以便实现更精确的权限控制。实名需要的用户认证信息位于/etc/vsftpd/目录下,vsftpd.conf也位于此目录,用户启动时可以单独指定其他的配置文件,本示例FTP认证采用虚拟用户认证。
vsftp可以指定某些用户不能登录FTP服务器、支持SSL连接、限制用户上传速率等,更多配置可参考帮助文档。
FTP命令详解
FTP的命令行格式为:ftp -v -d -i -n -g [主机名],其中
-v显示远程服务器的所有响应信息;
-n限制ftp的自动登录,即不使用;
.n etrc文件;
-d使用调试方式;
-g取消全局文件名。
ftp使用的内部命令如下(中括号表示可选项):
1.![cmd[args]]:在本地机中执行交互shell,exit回到ftp环境,如:!ls*.zip.
2.$ macro-ame[args]:执行宏定义macro-name.
3.account[password]:提供登录远程系统成功后访问系统资源所需的补充口令。
4.append local-file[remote-file]:将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名。
5.ascii:使用ascii类型传输方式。
6.bell:每个命令执行完毕后计算机响铃一次。
7.bin:使用二进制文件传输方式。
8.bye:退出ftp会话过程。
9.case:在使用mget时,将远程主机文件名中的大写转为小写字母。
10.cd remote-dir:进入远程主机目录。
11.cdup:进入远程主机目录的父目录。
12.chmod mode file-name:将远程主机文件file-name的存取方式设置为mode,如:chmod 777 a.out。
13.close:中断与远程服务器的ftp会话(与open对应)。
14.cr:使用asscii方式传输文件时,将回车换行转换为回行。
15.delete remote-file:删除远程主机文件。
16.debug[debug-value]:设置调试方式,显示发送至远程主机的每条命令,如:deb up 3,若设为0,表示取消debug。
17.dir[remote-dir][local-file]:显示远程主机目录,并将结果存入本地文件local-file。
18.disconnection:同close。
19.form format:将文件传输方式设置为format,缺省为file方式。
20.get remote-file[local-file]:将远程主机的文件remote-file传至本地硬盘的local-file。
21.glob:设置mdelete,mget,mput的文件名扩展,缺省时不扩展文件名,同命令行的-g参数。
22.hash:每传输1024字节,显示一个hash符号(#)。
23.help[cmd]:显示ftp内部命令cmd的帮助信息,如:help get。
24.idle[seconds]:将远程服务器的休眠计时器设为[seconds]秒。
25.image:设置二进制传输方式(同binary)。
26.lcd[dir]:将本地工作目录切换至dir。
27.ls[remote-dir][local-file]:显示远程目录remote-dir,并存入本地文件local-file。
28.macdef macro-name:定义一个宏,遇到macdef下的空行时,宏定义结束。
29.mdelete[remote-file]:删除远程主机文件。
30.mdir remote-files local-file:与dir类似,但可指定多个远程文件,如:mdir *.o.*.zipoutfile
31.mget remote-files:传输多个远程文件。
32.mkdir dir-name:在远程主机中建一目录。
33.mls remote-file local-file:同nlist,但可指定多个文件名。
34.mode[modename]:将文件传输方式设置为modename,缺省为stream方式。
35.modtime file-name:显示远程主机文件的最后修改时间。
36.mput local-file:将多个文件传输至远程主机。
37.newer file-name:如果远程机中file-name的修改时间比本地硬盘同名文件的时间更近,则重传该文件。
38.nlist[remote-dir][local-file]:显示远程主机目录的文件清单,并存入本地硬盘的local-file。
39.nmap[inpattern outpattern]:设置文件名映射机制,使得文件传输时,文件中的某些字符相互转换,如:nmap $1.$2.$3[$1,$2].[$2,$3],则传输文件a1.a2.a3时,文件名变为a1,a2。该命令特别适用于远程主机为非UNIX机的情况。
40.ntrans[inchars[outchars]]:设置文件名字符的翻译机制,如ntrans 1R,则文件名LLL将变为RRR。
41.open host[port]:建立指定ftp服务器连接,可指定连接端口。
42.passive:进入被动传输方式。
43.prompt:设置多个文件传输时的交互提示。
44.proxy ftp-cmd:在次要控制连接中,执行一条ftp命令,该命令允许连接两个ftp服务器,以在两个服务器间传输文件。第一条ftp命令必须为open,以首先建立两个服务器间的连接。
45.put local-file[remote-file]:将本地文件local-file传送至远程主机。
46.pwd:显示远程主机的当前工作目录。
47.quit:同bye,退出ftp会话。
48.quote arg1,arg2...:将参数逐字发至远程ftp服务器,如:quote syst.
49.recv remote-file[local-file]:同get。
50.reget remote-file[local-file]:类似于get,但若local-file存在,则从上次传输中断处续传。
51.rhelp[cmd-name]:请求获得远程主机的帮助。
52.rstatus[file-name]:若未指定文件名,则显示远程主机的状态,否则显示文件状态。
53.rename[from][to]:更改远程主机文件名。
54.reset:清除回答队列。
55.restart marker:从指定的标志marker处,重新开始get或put,如:restart 130。
56.rmdir dir-name:删除远程主机目录。
57.runique:设置文件名唯一性存储,若文件存在,则在原文件后加后缀..1,.2等。
58.send local-file[remote-file]:同put。
59.sendport:设置PORT命令的使用。
60.site arg1,arg2...:将参数作为SITE命令逐字发送至远程ftp主机。
61.size file-name:显示远程主机文件大小,如:site idle 7200。
62.status:显示当前ftp状态。
63.struct[struct-name]:将文件传输结构设置为struct-name,缺省时使用stream结构。
64.sunique:将远程主机文件名存储设置为唯一(与runique对应)。
65.system:显示远程主机的操作系统类型。
66.tenex:将文件传输类型设置为TENEX机的所需的类型。
67.tick:设置传输时的字节计数器。
68.trace:设置包跟踪。
69.type[type-name]:设置文件传输类型为type-name,缺省为ascii,如:type binary,设置二进制传输方式。
70.umask[newmask]:将远程服务器的缺省umask设置为newmask,如:umask 3。
71.user user-name[password][account]:向远程主机表明自己的身份,需要口令时,必须输入口令,如:user anonymous my@email。
72.verbose:同命令行的-v参数,即设置详尽报告方式,ftp服务器的所有响应都将显示给用户,缺省为on.
73.?[cmd]:同help。