Linux培训
达内IT学院

400-996-5531

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各方面的位置,找到配置中存在的问题进行解决。

预约申请免费试听课

填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:linux运维工程师必须掌握的基础技能
下一篇:Linux操作系统的十大版本

在Linux中设置sudo的十条sudoers实用配置

Linux下安装Node.js详细完整教程

深入 Linux I/O 重定向

安装Linux时的注意事项

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省