一、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服务器需要开几个端口

(完)

centos 6.5 ftp服务配置及客户端使用的更多相关文章

  1. 如何对CentOS FTP服务配置

    根据很多人对CentOS FTP服务的不解,我觉得应该对CentOS FTP服务做出一定的解释. 1.安装 一般在CentOS上都自动安装了vsftd,若没有安装则可以使用以下步骤进行安装yum -y ...

  2. CentOS 6.8 ftp服务安装配置 基于本地用户和虚拟用户

    CentOS 6.8 ftp服务安装配置 基于本地用户和虚拟用户 一.安装ftp服务 1.检查是否已经安装 # rpm -qa | grep ftp ftp-0.17-54.el6.x86_64 vs ...

  3. linux Centos 6.5 FTP服务原理及vsfptd的安装、配置(转)

    本篇随笔将讲解FTP服务的原理以及vsfptd这个最常用的FTP服务程序的安装与配置... 一.FTP服务原理 FTP(File Transfer Protocol)是一个非常古老并且应用十分广泛的文 ...

  4. window配置ftp服务,代码客户端上传下载文件

    1 开启ftp服务 打开控制面板,点击程序,找到程序和功能,点击”打开或关闭windows功能” 找到“Internet信息服务”,点击前面的加号,展开功能,勾选”FTP服务”,“FTP扩展性”,“I ...

  5. centos下开启ftp服务

    如果要ftp访问linux需要安装ftp服务,vsftpd是Linux下比较好的的FTP服务器. 一.检查安装vsftp //检查是否安装vsftpd rpm -qa | grep vsftpd // ...

  6. Linux SSH,FTP服务配置

    CentOS-6.4-x86_64-minimal 0.网卡配置 参考:Linux系统\Centos没有网卡eth0配置文件怎么办? - http://jingyan.baidu.com/articl ...

  7. ftp服务配置

      文件传输协议(File Transfer Protocol,FTP),基于该协议FTP客户端与服务端可以实现共享文件.上传文件.下载文件. FTP 基于TCP协议生成一个虚拟的连接,主要用于控制F ...

  8. Centos 7 搭建FTP详细配置步骤方法

    vsftpd的安裝使用: ftp概述:FTP(File Transfer protocol,文件传输协议)是经典的C/S架构的应用层协议,需要有服务端软件,客户端软件两个部共同组成实现文件传输功能. ...

  9. 用户管理和FTP服务配置

    批量创建用户 python脚本:creuser.py import osulist=open('usernames','r')for x in ulist: cmd="useradd -g ...

随机推荐

  1. Python 天气预报+微信

    """ Description: 需要提供以下三个信息,在申请到的微信企业号当中可以找到 agentid corpid corpsecret Author:Nod Dat ...

  2. Maven报错找不到jre

    常规配置maven环境变量,报错: The JAVA_HOME environment variable is not defined correctly. This environment vari ...

  3. php如何判断IP为有效IP地址

    不需要正则表达式来判断,因为在php5.2.0之后,有专门的函数来做这个判断了. 判断是否是合法IP if(filter_var($ip, FILTER_VALIDATE_IP)) { // it's ...

  4. js如何获取数字占的位数~

    获取整数的长度可以用以下几种方法实现: 1.调用toString方法转为字符串后取长度 var num = 123; alert(num.toString().length); 2.隐式转字符串后取长 ...

  5. 理解Storm Metrics

    在hadoop中,存在对应的counter计数器用于记录hadoop map/reduce job任务执行过程中自定义的一些计数器,其中hadoop任务中已经内置了一些计数器,例如CPU时间,GC时间 ...

  6. 序列化 ,hashlib ,configparser ,logging ,collections模块

    # 实例化 归一化 初始化 序列化 # 列表 元组 字符串# 字符串# .......得到一个字符串的结果 过程就叫序列化# 字典 / 列表 / 数字 /对象 -序列化->字符串# 为什么要序列 ...

  7. 13.mysql基本查询

    1. 给表起个别名:但是,前面的也是需要进行修改的,否则会报错的: select * from s.name from students as s; 2. 为字段起别名 select s,name a ...

  8. OpenACC 简单的直方图

    ▶ 简单的直方图,强调原子操作的使用 ● 代码 #include <stdio.h> #include <stdlib.h> #include <openacc.h> ...

  9. el 表达式的比较和包含

    相等( equal ) :eq 不相等( not equal ): ne / neq 大于( greater than ): gt 小于( less than ): lt 大于等于( great th ...

  10. Virus

    c:\windows\syswow64\rundll32.exe C:\Users\Administrator.mt1-PC\AppData\Roaming\FishSearch