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)

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏散尽浮华

centos6.8部署vnc服务

VNC全称是Virtual Network Computing,属于远程控制类软件。其优点是支持跨操作系统的远程图形化控制。 在日常运维工作中,由于服务器常常是...

735100
来自专栏L宝宝聊IT

kvm命令行安装

1K20
来自专栏GA小站

Launch上的Adapters(适配器)

Adapters是适配器的意思,Launch的适配器的的作用是将构建好的库,上传到服务器的特定位置,起到上传的作用,这个是发布代码必用到的,如果没有设置,配置不...

10340
来自专栏同步博客

我对RPC的理解

  这篇文章将会用最直白的方式介绍RPC,以及实现RPC客户端的Ajax跨域调用的例子。

16840
来自专栏西枫里博客

删除QQ内置浏览器,不再为误点烦恼。

事情得从好久之前说起,自从上次火绒说QQ推广管家和浏览器有流氓行为。就对QQ内置的浏览器耿耿于怀。今天boke112群主说不喜欢分享的链接被QQ内置浏览器打开。...

28510
来自专栏程序猿DD

Spring Cloud实践:降级、限流、滚动、灰度、AB、金丝雀的实现思路

之前在我博客的问答平台和Spring4All社区均有关于Spring Cloud的发布策略实现问题。虽然大家都给力很多不错的思路和建议,但是都没有Charles...

53070
来自专栏FreeBuf

用某品牌随身WiFi进行钓鱼测试

本文内容仅代表作者观点且只做测试展示,目的是提醒读者注意 WiFi 联网安全,严禁将内容用于不法用途。 前言 搭建钓鱼 WiFi 来盗取账号密码已经成为一种很...

24750
来自专栏木头编程 - moTzxx

微信小程序Ⅰ [关于微信支付的一点思路]

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

36630
来自专栏后端云

本地存储条件下的热迁移

每个读者都可能会问这样一个问题,虚拟机用的好好的,为啥要迁移呀?也就是迁移的价值和目的在哪里。在数据中心的日常运维中,常常要处理下面几种场景和需求,了解了这些需...

36140
来自专栏闵开慧

centos 网络配置视频地址及截图

1 地址:http://www.itercast.com/library/1 IP编址是现今使用最为广泛的网路编址协议,拥有两个主流版本:IPv4、IPv...

37450

扫码关注云+社区

领取腾讯云代金券