一、ftp服务简介
FTP是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)。"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。
二、ftp服务搭建
1. 安装vsftpd
yum -y install vsftpd
2. 关闭iptables
为了方便测试,先将iptables关闭,后面如果有需要开iptables再加规则:
service iptables stop
3. 配置vsftpd服务器
默认的配置文件是/etc/vsftpd/vsftpd.conf,编辑这个文件进行配置
3.1 配置vsftpd
将原文件下面注释的几句改为:
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
allow_writeable_chroot=YES
参数解释:
|
chroot_local_user=YES |
chroot_local_user=NO |
chroot_list_enable=YES |
1.所有用户都被限制在其主目录下 |
1.所有用户都不被限制其主目录下 “例外”,受到限制 |
chroot_list_enable=NO |
1.所有用户都被限制在其主目录下 |
1.所有用户都不被限制其主目录下 “例外”用户 |
关于最后一个参数:
从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。
要修复这个错误,可以用命令chmod a-w /home/user去除用户主目录的写权限,注意把目录替换成你自己的。或者你可以在vsftpd的配置文件中增加下列两项中的一项:
allow_writeable_chroot=YES
3.2 关于ftp用户
ftp服务可以配置三种用户。
1. Real用户
这类用户是指在FTP服务上拥有帐号。当这类用户登录FTP服务器的时候,其默认的主目录就是其帐号命名的目录。但是,其还可以变更到其他目录中去。如系统的主目录等等。
2. Guest用户
在FTP服务器中,我们往往会给不同的部门或者某个特定的用户设置一个帐户。但是,这个账户有个特点,就是其只能够访问自己的主目录。服务器通过这种方式来保障FTP服务上其他文件的安全性。这类帐户,在Vsftpd软件中就叫做Guest用户。拥有这类用户的帐户,只能够访问其主目录下的目录,而不得访问主目录以外的文件。
3. Anonymous(匿名)用户
这也是我们通常所说的匿名访问。这类用户是指在FTP服务器中没有指定帐户,但是其仍然可以进行匿名访问某些公开的资源。
下面主要讲Guest用户的建立与配置。
3.3 增加用户
增加系统用户ftpuser,禁止登录SSH权限:
useradd -d /home/ftpuser -g ftp -s /sbin/nologin ftpuser
一般来说,这个用户文件可以根据实际情况进行权限配置。
3.4 设置用户口令
passwd ftpuser
3.5 编辑文件chroot_list
vi /etc/vsftpd/chroot_list
内容为ftp用户名,每个用户占一行,如:
ftpuser
3.6 重新启动vsftpd
service vsftpd restart
三、客户端
1. 安装ftp客户端
yum -y install ftp
2. 连接ftp服务器并操作
ftp ftp服务器ip
按照指示输入账号密码,登录,如果正常登录,证明前面设置的ftp服务正确。
可以使用put命令上传一个文件试试是否正常:
put test_up
3. 常用操作
1) HELP、 ?、RHEIP、REMOTEHELP
- HELP显示LOCAL端的命令说明,若不接受则显示所有可用命令;
- ?相当于HELP,例如:?CD:
- RHELP同HELP,只是它用来显示REMOTE端的命令说明;
- REMOTEHELP相当于RHELP。
2) ASC(ASCll)、Bm(BmARY)、IMAGE、TYPE
- ASCII切换传输模式为文字模式(只能用来传送DOC文件,因为是7-BIT);
- BINARY切换传输模式为二进制模式(除文字文件外皆用此模式);
- IMAGE相当于BINARY:
- TYPE让你更改或显示目前传输模式。
3)BYE、QUIT
- BYE退出FTP:
- QUIT相当于BYE。
4)CD、CDUP、LCD、P~WD、 !
- CD改变当前工作目录,例如:CD\PUB;
- CDUP回到上一层目录,相当于你打CD..;
- LCD让你更改或显示LOCAL端的工作目录,例如:LCD\TMP;
- PWD显示目前的工作目录(REMOTE端);
- !让你执行外壳命令,例如:!LS。
5)DELETE、MDELETE、RENAME
- DELETE删除REMOTE端的文件;
- MDELETE批量删除文件,需配合?或,*;
- RENAME更改REMOTE端的文件名。
6)GET、MGET、PUT、MPUT、RECV、SEND
- GET下传文件;
- MGET批量下传文件,需配合万用字元,例如:MGET*.GZ;
- PUT上传文件;
- MPUT批量上传文件,需配合万用字元;
- RECV相当于GET(RECV为RECEWE的简写);
- SEND相当于PUT。
7)HASH、PROMPT、VERBOSE、STATUS、BELL
- HASH切换#字号的出现,每一个#字号表示传送了1024/8192BYTES;
- PROMPT切换iNTERACTIVEON/OFF;
- VERBOSE切换所有文件传输过程的显示;
- STATUS显示目前的一些参数;
- BELL当指令做完时会发出叫声。
8)LS、DIR、MLS、MDIR、MKDIR、RMDIR
- LS有点象UNIX下的LS(LIST)命令:
- DIR相当于LS-L(LIST-LONG);
- MLS只是将远端某目 录下的文件存于LOCAL端的某文件里;
- MDIR相当于MLS;
- MKDIR象DOS下的MD(创建子目录)一样:
- RMDIR象DOS下的RD(删除子目录)一样。
9)OPEN、CLOSE、DISCONNECT、USER ·
- OPEN连接某个远端FTP服务器;
- CLOSE关闭目前的连接; DISCONNECT相当于CLOSE;
- USER再输入一次用户名和口令(有点像UNIX下的SU)。
- RETR
- STOR
4. 使用脚本上传文件
脚本主要使用数据流重定向进行操作,示例如下:
#!/bin/sh
PUTFILE=test_up_sh
ftp -v -n ftp服务器ip<<EOF
user ftp账号 密码
binary
prompt
put $PUTFILE
bye
#here document
EOF
echo "commit to ftp successfully"
注意,ftp不支持自动创建目录和多目录上传,也就是如果你上传的文件路径是绝对路径,是会传输失败的。
如果使用“put /home/user1/test.txt”这样的命令,而没有单独指定一个REMOTE-FILE,那么REMOTE-FILE就原样拷贝LOCAL-FILE参数。
而传文件使用的FTP命令叫STOR。当这个命令有remote这个参数(如STOR)的时候,就原封不动地把remote这个变量放在命令后。所以,实际向服务器发送的命令是“STOR /home/user1/test.txt”。
所以,服务器会试图按照/home/user1/test.txt这个绝对路径来储存文件。当然,服务器不会允许你创建这么一个文件,起码它不在ftp服务器可以写的目录中。
四、关于主动模式和被动模式
1. 端口
利用ftp传输过程中,主要使用到两个端口,一个是数据端口,一个是控制端口,控制端口一般为21,而数据端口不一定是20,这和FTP的应用模式有关,如果是主动模式,应该为20,如果为被动模式,由服务器端和客户端协商而定。
2. 主动模式与被动模式
FTP具有两种模式,分别是port模式(也叫主动模式)和pasv模式(也叫被动模式),怎么来理解这两种模式呢?
在主动模式下:客户端给服务器端的21端口发命令说,我要下载什么什么,并且还会说我已经打开了自己的某个端口,你就从这里把东西给我吧,服务器知道后就会通过另外一个数据端口把东西传给客户端,这就是主动模式,可以理解为服务端主动给客户端传输文件。
在被动模式下:客户端给服务器端的21端口发命令说,我要下载什么什么,服务器端知道后,就打开一个端口,然后告诉客户端,我已经打开了某某端口,你自己进去拿吧,于是客户端就从那个端口进去拿文件了,这就是被动模式,可以理解为服务端被客户端拿走了东西。
3. 从主动模式到被动模式
在很久以前没有共享上网这种技术,也就是一个电脑一个ip。但是后来出现了,所以也就有了下面的问题。
大家都知道,共享上网就是很多台电脑共享一个公网IP去使用internet,再打个比喻吧,某个局域网共享210.33.25.1这个公网IP上网,当一个内网用户192.168.0.100去访问外网的FTP服务器时,如果采用主动模式的话,192.168.0.1告诉了FTP服务器我需要某个文件和我打开了x端口之后,由于共享上网的原因,192.168.0.1在出网关的时候自己的IP地址已经被翻译成了210.33.25.1这个公网IP,所以服务器端收到的消息也就是210.33.25.1需要某个文件并打开了x端口,FTP服务器就会往210.33.25.1的x端口传数据,这样当然会连接不成功了,因为打开x端口的并不是210.33.25.1这个地址,在这种情况下被动模式就有用了。
在主动模式中,FTP的两个端口是相对固定的,如果命令端口是x的话,那数据端口就是x-1,也就是说默认情况下,命令端口是21,数据端口就是20;你把命令端口改成了600,那么数据端口就是599。这样使用防火墙就很方便了,只要开通这两个端口就可以了,但是如果客户端是共享上网的话那岂不是不能正常使用FTP了,这样还是不行,一定需要被动模式。
在被动模式中,默认情况下命令端口是21,但是数据端口是随机的。不过,因为被动模式中数据端口的范围是可以自定义的,因此也可以通过端口范围去配置防火墙。
五、参考
2. 百度百科:ftp
3. FTP命令大全
(完)