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

示例操作系统CentOS.

示例FTP软件:VSFTPD.

测试工具:windowscmd或则cuteftp、smartftp等工具

一、VSFTPD环境安装:

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

若果没有安装,使用YUM命令进行安装。即yuminstallvsftpd-y.

安装完成后启动FTP。

启动命令#servicevsftpdstart

停止命令#servicevsftpdstop

重启命令#servicevsftpdrestart

二、VSFTPD环境的初步配置:

ftp命令 linux_Linux VSFTPD FTP服务配置_CentOS VSFTPD安装教程

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

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

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

vsftpd.confvsftpd的主配置文件.

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,在配置完成后要运行#servicevsftpdrestart重启FTP服务。

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

Linux VSFTPD FTP服务配置_ftp命令 linux_CentOS VSFTPD安装教程

1、匿名用户能够上传和写文件,通常配置为NO

anon_upload_enable=NO

anon_mkdir_write_enable=NO

匿名用户能够登入ftp命令 linux,视情况而定,看是否是专有用户使用。

anonymous_enable=NO

2、端口设定

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

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

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

3、通信编码模式

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

ascii_upload_enable=YES

ascii_download_enable=YES

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

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

CentOS VSFTPD安装教程_Linux VSFTPD FTP服务配置_ftp命令 linux

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

passwdpwftp

为用户设置权限:

chmod-R755/var/ftp

chown-Rftp/var/ftp

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

四、FTP的主动与被动模式

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

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

被动形式linux删除文件夹,或则称作PASV,当顾客端通知服务器它处于被动模式时才启用。在被动形式FTP中,命令联接和数据联接都由顾客端发起.当开启一个FTP联接时,顾客端打开两个任意的非特权本地端口(N>1024和N+1)。第一个端口联接服务器的21端口,但与主动形式的FTP不同,顾客端不会递交PORT命令并容许服务器来回连它的数据端口,而是递交PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P>1024),并发送PORTP命令给顾客端。之后顾客端发起从本地端口N+1到服务器的端口P的联接拿来传送数据。

简单的来说,可以觉得二者的区别主要在于顾客端和服务器端究竟是由谁来确定非特权端口,也就是这一对TCP通讯组合的通道。假如是顾客端先确定非特权端口就是主动模式,服务器端先确定非特权端口就是被动模式。(但实质上通讯过程是不一样的,这些说法只可以做简单分辨用)

五、FTP相关的防火墙设定

当Linux系统启动了防火墙后,须要相应的对防火墙进行设定,避免防火墙阻断FTP通讯。

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

1.任何小于1024的端口到FTP服务器的21端口。(顾客端初始化的联接)

ftp命令 linux_Linux VSFTPD FTP服务配置_CentOS VSFTPD安装教程

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服务。

ftp命令 linux_Linux VSFTPD FTP服务配置_CentOS VSFTPD安装教程

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

-AINPUT-mstate--stateRELATED,ESTABLISHED-jACCEPT

-AINPUT-picmp-jACCEPT

-AINPUT-ilo-jACCEPT

-AINPUT-ptcp-mstate--stateNEW-mtcp--dport10020:11020-jACCEPT

-AINPUT-ptcp-mstate--stateNEW-mtcp--dport20-jACCEPT

-AINPUT-ptcp-mstate--stateNEW-mtcp--dport21-jACCEPT

保存后注意重启iptables服务。

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

pasv_address=111.111.111.111(示例)

pasv_addr_resolve=yes

pasv_promiscuous=yes

注:假如联接过程中出现200PORTcommandsuccessful.ConsiderusingPASV.这条错误信息,不要轻易根据网上建议最多的关掉PASV模式,只采用主动模式。由于在好多情况下顾客端处于VLAN等网路环境下,很难主动给出链接端口,不得不采用被动模式,出现这个错误并不能通过关掉PASV模式解决,而应当找寻PASV各方面的位置,找到配置中存在的问题进行解决。

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

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复