Linux下FTP配置

关于Linux下搭建FTP服务的文章网上有很多,但是大部分都局限于某一点,在实际操作过程中会遇到各种问题,针对本人在使用中用到的一些设置和出现的问题对网络信息进行了归纳整理和总结。

示例操作系统:CentOS.

示例FTP软件:VSFTPD.

测试工具:windows cmd或者cuteftp、smartftp等工具

一、VSFTPD环境安装:

输入#rpm -qa |grep vsftpd检测是否安装了vsftpd软件,

如果没有安装,使用YUM命令进行安装。即yum install vsftpd -y.

安装完成后启动FTP。

启动命令#service vsftpd start

停止命令#service vsftpd stop

重启命令#service vsftpd restart

二、VSFTPD环境的初步配置:

ftp的配置文件主要有三个,位于/etc/vsftpd/目录下,分别是:

ftpusers 该文件用来指定那些用户不能访问ftp服务器。

user_list 该文件用来指示的默认账户在默认情况下也不能访问ftp.

vsftpd.conf vsftpd的主配置文件.

ftpusers和user_list用来控制登录用户。

ftpusers文件中的内容不受任何配制项的影响,总是有效,是一个黑名单!

该文件存放的是一个禁止访问FTP的用户列表,通常为了安全考虑,管理员不希望一些拥有过大权限的帐号(比如root)登入FTP,以免通过该帐号从FTP上传或下载一些危险位置上的文件从而对系统造成损坏。

而user_list文件则是和vsftpd.conf中的userlist_enable和userlist_deny两个配置项紧密相关的,它可以有效,也可以无效,有效时它可以是一个黑名单,也可以是一个白名单。

userlist_enable和userlist_deny两个选项联合起来针对的是:本地全体用户(除去ftpusers中的用户)和出现在user_list文件中的用户以及不在在user_list文件中的用户这三类用户集合进行的设置。

当且仅当userlist_enable=YES时:userlist_deny项的配置才有效,user_list文件才会被使用;当其为NO时,无论userlist_deny项为何值都是无效的,本地全体用户(除去ftpusers中的用户)都可以登入FTP

当userlist_enable=YES时,userlist_deny=YES时:user_list是一个黑名单,即:所有出现在名单中的用户都会被拒绝登入;

当userlist_enable=YES时,userlist_deny=NO时:user_list是一个白名单,即:只有出现在名单中的用户才会被准许登入(user_list之外的用户都被拒绝登入);另外需要特别提醒的是:使用白名单后,匿名用户将无法登入!除非显式在user_list中加入一行:anonymous

而最常用的配置文件是vsftpd.conf,在配置完成后要运行#service vsftpd restart重启FTP服务。

vsftpd.conf中常用的配置内容:

1、匿名用户能否上传和写文件,一般配置为NO

anon_upload_enable=NO

anon_mkdir_write_enable=NO

匿名用户能否登录,视情况而定,看是否是专有用户使用。

anonymous_enable=NO

2、端口设定

port_enable=YES,即默认情况下,FTP PORT主动模式被启用

connect_from_port_20=YES,即默认情况下,FTP PORT主动模式进行数据传输时使用20端口(ftp-data)。YES使用,NO不使用。

ftp_data_port=port number,设定ftp数据传输端口(ftp-data)值。默认值为20。此参数用于PORT FTP模式。

3、通信编码模式

默认情况下可以通过ascii模式传输。将配置改为NO后,只能通过binary形式传输。

ascii_upload_enable=YES

ascii_download_enable=YES

三、为FTP添加用户和目录:

添加用户和用户登录的处理shell,并设定密码。

useradd -d /var/ftp -s /sbin/nologin ftp

passwd pwftp

为用户设置权限:

chmod -R 755 /var/ftp

chown -R ftp /var/ftp

用户的登录控制还可以参照上文中user_list进行设定。

四、FTP 的主动与被动模式

FTP是基于TCP的服务,在实际应用中有两个接口:一个数据接口,一个控制接口。默认情况下这两个端口是21(控制端口)和20(数据端口)。

主动方式的FTP是:客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口,也就是21端口。然后客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。

被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。在被动方式FTP中,命令连接和数据连接都由客户端发起.当开启一个 FTP连接时,客户端打开两个任意的非特权本地端口(N>1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交 PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。

简单的来说,可以认为两者的区别主要在于客户端和服务器端到底是由谁来确定非特权端口,也就是这一对TCP通信组合的通道。如果是客户端先确定非特权端口就是主动模式,服务器端先确定非特权端口就是被动模式。(但实质上通信过程是不一样的,这种说法只可以做简单区分用)

五、FTP相关的防火墙设定

当Linux系统启动了防火墙后,需要相应的对防火墙进行设定,防止防火墙阻断FTP通信。

支持主动方式FTP,防火墙设定:

1. 任何大于1024的端口到FTP服务器的21端口。(客户端初始化的连接)

2. FTP服务器的21端口到大于1024的端口。 (服务器响应客户端的控制端口)

3. FTP服务器的20端口到大于1024的端口。(服务器端初始化数据连接到客户端的数据端口)

4. 大于1024端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口)

支持被动方式的FTP,防火墙设定:

1. 从任何大于1024的端口到服务器的21端口(客户端初始化的连接)

2. 服务器的21端口到任何大于1024的端口(服务器响应到客户端的控制端口的连接)

3. 从任何大于1024端口到服务器的大于1024端口(客户端初始化数据连接到服务器指定的任意端口)

4. 服务器的大于1024端口到远程的大于1024的端口(服务器发送ACK响应和数据到客户端的数据端口)

下面以被动模式的防火墙为例给出示范:

首先vi /etc/vsftpd/vsftpd.conf文件中配置开启pasv被动模式:

pasv_enable=YES

设定非特权端口的通信范围(示例只做参考):

最小值pasv_min_port=10020

最大值pasv_max_port=11020

保存后注意配置后重启vsftpd服务。

然后vi /etc/sysconfig/iptables,配置系统防火墙:

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

-A INPUT -p icmp -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 10020:11020 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT

保存后注意重启iptables服务。

如果FTP服务器为云服务器或者有局域网路由控制,除了单独设定路由端口映射规则并在云服务器安全规则中添加例外,还要在/etc/vsftpd/vsftpd.conf中声明被动模式的公网地址,以防端口映射出现问题:

pasv_address=111.111.111.111(示例)

pasv_addr_resolve=yes

pasv_promiscuous=yes

注:如果连接过程中出现200 PORT command successful. Consider using PASV.这条错误信息,不要轻易按照网上建议最多的关闭PASV模式,只采用主动模式。因为在很多情况下客户端处于VLAN等网络环境下,很难主动给出链接端口,不得不采用被动模式,出现这个错误并不能通过关闭PASV模式解决,而应该寻找PASV各方面的位置,找到配置中存在的问题进行解决。

马哥教育历经近10年发展,已成为面向企业级资深运维工程师、架构师的专业集训营式高端就业Linux培训学院。凭借多年良好口碑,其已经成为业内知名互联网公司重要人才战略合作伙伴,获得了百度、腾讯、阿里、大众点评、51CTO、唯品会、京东、中移动、新浪、红帽等互联网巨头的合作支持。毕业学员平均薪资达10K以上,累计受益人员达百万+。

本文分享自微信公众号 - 马哥Linux运维(magedu-Linux)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-07-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 吐血整理所有常用端口,不全你来打我!

    作者:ADreamClusive 来源: http://blog.csdn.net/u013943420/article/details/65938696 大家...

    小小科
  • 吐血整理所有常用端口,不全你来打我!

    大家在学习计算机的时候,对于最常用的几个端口比如80端口肯定有很深的印象,但是对于其他一些不是那么常用的端口可能就没那么了解。所以,在一些使用频率相对较高的端口...

    小小科
  • Python自然语言处理工具小结

    来源:http://www.cnblogs.com/baiboy/p/nltk2.html

    小小科
  • 看懂FTP的主动和被动模式

    老七Linux
  • Mongo字符串类型的数值查询---$Where查询介绍

    ​        在Mongo中都知道字符串类型大小比较都是以ASCII进行比较的,所以无法真实比较字符串类型的数值大小

    莫问今朝
  • Vue-CLI 项目中相关操作

    小小咸鱼YwY
  • Java基础-集合(二)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    cwl_java
  • 金融科技,蝴蝶效应下的风暴眼!

    孟永辉
  • Python面试题目之Python的复制和赋值浅析

    python采用的是引用变量的结构,也就说如果你对一个变量赋值,并不是给这个变量开辟了一块内存空间而是将一个对象的内存空间地址告诉了这个变量,这样做的好处是便于...

    Jetpropelledsnake21
  • 百家P2P集中爆雷,涉资超万亿元,互联网金融的末日真的来了吗?

    对于互联网金融来讲,当前的P2P爆雷无疑是一记重磅炸弹。正是由于P2P的频繁爆雷,人们才会对互联网金融丧失最后那一丁点的信心,并且开始寻找有关金融行业科技化的全...

    孟永辉

扫码关注云+社区

领取腾讯云代金券