一、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.所有用户都被限制在其主目录下
2.使用chroot_list_file指定的用户列表,这些用户作为“例外”,不受限制

1.所有用户都不被限制其主目录下
2.使用chroot_list_file指定的用户列表,这些用户作为

“例外”,受到限制

chroot_list_enable=NO

1.所有用户都被限制在其主目录下
2.不使用chroot_list_file指定的用户列表,没有任何“例外”用户

1.所有用户都不被限制其主目录下
2.不使用chroot_list_file指定的用户列表,没有任何

“例外”用户

关于最后一个参数:

从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,但是数据端口是随机的。不过,因为被动模式中数据端口的范围是可以自定义的,因此也可以通过端口范围去配置防火墙。

 

五、参考

1. CentOS6.5 FTP配置

2. 百度百科:ftp

3. FTP命令大全

4. Shell脚本实现FTP上传下载文件

5. FTP服务器需要开几个端口

(完)

版权声明:本文为harrymore原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/harrymore/p/9788091.html