一、背景信息
FTP(File Transfer Protocol)是一种文件传输协议,基于客户端/服务器架构,支持以下两种工作模式:
- port方式(主动模式), 连接过程:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时, 客户端在命令链路上用PORT命令告诉服务器:
我打开了***X端口,你过来连接我。于是服务器从20端口向客户端的***X端口发送连接请求,建立一条数据链路来传送数据 。 - pasv方式 ( 被动模式 ), 连接过程:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时, 服务器在命令链路上用PASV命令告诉客户端:我打开了X端口,你过来连接我。于是客户端向服务器的X端口发送连接请求,建立一条数据路来传送数据。
FTP支持以下三种认证模式:
- 匿名用户模式:任何人无需密码验证就可以直接登录到FTP服务器。这种模式最不安全,一般只用来保存不重要的公开文件,不推荐在生产环境中使用。
- 本地用户模式:通过Linux系统本地账号进行验证的模式,相较于匿名用户模式更安全。
- 虚拟用户模式:FTP服务器的专有用户。虚拟用户只能访问Linux系统为其提供的FTP服务,而不能访问Linux系统的其它资源,进一步增强了FTP服务器的安全性。
本文主要介绍被动模式下,使用本地用户访问FTP服务器的配置方法。关于匿名模式的配置方式、第三方FTP客户端工具使用方式等介绍,请参见常见问题。
本文示例步骤使用以下资源版本:操作系统:CentOS 7.2 64位 当您使用不同软件版本时,可能需要根据实际情况调整命令和参数配置。
二、安装并配置vsftpd
- 步骤一:安装vsftpd:运行以下命令安装vsftpd。
yum install -y vsftpd
- 使用本地root作为远程链接ftp账户的话,需要以下配置
打开ftpusers和user_list, 在root和nobody前面加上#.在实际情况不提倡这样,否则太危险了.
- 配置文件 vsftpd.conf
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode. The vsftpd.conf(5) man page explains
# the behaviour when these options are disabled.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
# FTP在传输数据时,可使用二进制(Binary)方式,也可使用ASCII模式来上传或下载数据。
ascii_upload_enable=YES
ascii_download_enable=YES
#
# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service.
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd/banned_emails
#
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
# (Warning! chroot'ing can be very dangerous. If using chroot, make sure that
# the user does not have write access to the top level directory within the
# chroot)
#chroot_local_user=YES
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
#ls_recurse_enable=YES
#
# When "listen" directive is enabled, vsftpd runs in standalone mode and
# listens on IPv4 sockets. This directive cannot be used in conjunction
# with the listen_ipv6 directive.
listen=NO
#
# This directive enables listening on IPv6 sockets. By default, listening
# on the IPv6 "any" address (::) will accept connections from both IPv6
# and IPv4 clients. It is not necessary to listen on *both* IPv4 and IPv6
# sockets. If you want that (perhaps because you want to listen on specific
# addresses) then you must run two copies of vsftpd with two configuration
# files.
# Make sure, that one of the listen options is commented !!
# 关闭监听IPV6 sockets
listen_ipv6=YES
# #使用pam验证
pam_service_name=vsftpd
# #启用userlist功能
userlist_enable=YES
# #启用拒绝特定用户登录
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list
# #ftp standalone模式下需开启
tcp_wrappers=YES
#开启被动模式。
pasv_enable=YES
allow_writeable_chroot=YES
###本教程中为Linux实例的公网IP。
#pasv_address=192.168.31.8
#设置被动模式下,建立数据传输可使用的端口范围的最小值。
###建议您把端口范围设置在一段比较高的范围内,例如50000~50010,有助于提高访问FTP服务器的安全性。
pasv_min_port=50000
###设置被动模式下,建立数据传输可使用的端口范围的最大值。
pasv_max_port=50010
#用户登录后所在的目录
local_root=/
更详细的配置
- linux启动ftp服务
firewall-cmd --zone=public --add-port=21/tcp --permanent
firewall-cmd --zone=public --add-port=50000-50010/tcp --permanent
firewall-cmd --reload
service vsftpd start
chkconfig vsftpd on
三、windows启用FTP
参考文章 到此可以成功使用
如果有遇到,failed to change directory 该错误,参考以下: 参考文章 参考文章 参考文章
|