FTP基本介绍以及ECS配置问题

FTP及其原理简介

什么是FTP

FTP(File Transfer Protocol)文件传输协议,是Internet上使用的最广的文件传输协议。FTP这个过程中涉及到两个主要程序,一个是本地的FTP客户端程序,提出传输文件的请求,一个是运行在远程主机上的FTP服务器程序,响应客户端的请求并接收文件。

一般来说,因特网上有两大类FTP文件服务器,一类是“匿名FTP服务器(Anonymous FTP Server), 该类服务器的目的是向公众提供文件资源服务。一类是“非匿名FTP服务器”,进入该类服务之前,一般用户需要先向服务器系统申请用户名及密码。

FTP是基于TCP的文件传输协议,其传输的可靠性有TCP来保障。在实际过程中,FTP协议要用到两个TCP连接,一个是命令连接,用来在FTP客户端在服务器之间传输命令。一个是数据连接,用来上传和下载数据。

主动模式与被动模式介绍

另外值得注意的是,FTP连接分为主动模式(PORT)和被动模式(PASV)。但两个模式都需要建立两个TCP连接,区别在于建立连接的方式不同,更准确的说是数据连接的过程不同。

在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令。服务器接收到命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输。

FTP基本介绍以及ECS配置问题

在被动模式下,FTP库户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,同时会开启N+1号端口。然后向服务器发送PASV命令,通知服务器自己处于被动模式。服务器收到命令后,会开放一个大于1024的端口P进行监听,然后用PORT P命令通知客户端,自己的数据端口是P。客户端收到命令后,会通过N+1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。

FTP基本介绍以及ECS配置问题

可以发现的是,主动模式的FTP是指服务器主动连接客户端的数据端口,被动模式的FTP是指服务器被动地等待客户端连接自己的数据端口。同时也可以看出它们之间的优缺点。主动模式优点:服务端配置简单,利于服务器安全管理,服务器只需要开放21端口

缺点:如果客户端开启了防火墙,或客户端处于内网, 那么服务器对客户端端口发起的连接可能会失败

而被动模式的下,缺点:服务器配置管理稍显复杂,不利于安全,服务器需要开放随机高位端口以便客户端可以连接,因此大多数FTP服务软件都可以手动配置被动端口的范围优点:对客户端网络环境没有要求。

FTP搭建

现用阿里云ECS(Elastic Compute Service)分别实现简单的这两种FTP服务。

首先我们需要对自己ECS服务器的安全组惊醒配置,开放21端口。如果被动模式还需要开放1024以上的端口。

yum install -y vsftpd   # 安装vsftpd
systemctl enable vsftpd.service #设置FTP服务开机自启动
systemctl start vsftpd.service  #启动FTP服务
netstat -antup | grep ftp #运行以下命令查看FTP服务监听的端口

如果命令运行到这里,出现以下画面说明成功了。

FTP基本介绍以及ECS配置问题

匿名用户模式

vim /etc/vsftpd/vsftpd.conf   #修改配置文件vsftpd.conf

FTP基本介绍以及ECS配置问题

将匿名上传权限 anon_upload_enable=YES 的注释解开。按ESC键退出编辑模式,输入:wq 保存并退出vim。

chmod o+w /var/ftp/pub/   # 更改/var/ftp/pub目录的权限,为FTP用户添加写权限。
systemctl restart vsftpd.service # 重启FTP服务。

这时候,你去浏览器地址栏输入 ftp://:FTP端口 即可访问你的FTP服务器。

非匿名用户模式

非匿名用户模式也称为本地用户模式
adduser ftptest  #为FTP服务创建一个Linux用户
passwd ftptest  #为用户设置密码

FTP基本介绍以及ECS配置问题

mkdir /var/ftp/test #创建一个供FTP服务使用的文件目录
chown -R ftptest:ftptest /var/ftp/test #更改/var/ftp/test目录的拥有者为ftptest

配置FTP为主动模式请执行如下命令:

sed -i 's/anonymous_enable=YES/anonymous_enable=NO/' /etc/vsftpd/vsftpd.conf #禁止匿名登录FTP服务器 
sed -i 's/listen=NO/listen=YES/' /etc/vsftpd/vsftpd.conf #监听IPv4 sockets 
sed -i 's/listen_ipv6=YES/#listen_ipv6=YES/' /etc/vsftpd/vsftpd.conf #关闭监听IPv6 sockets 
sed -i 's/#chroot_local_user=YES/chroot_local_user=YES/' /etc/vsftpd/vsftpd.conf #全部用户被限制在主目录 
sed -i 's/#chroot_list_enable=YES/chroot_list_enable=YES/' /etc/vsftpd/vsftpd.conf #启用例外用户名单 
sed -i 's/#chroot_list_file=/chroot_list_file=/' /etc/vsftpd/vsftpd.conf #指定例外用户列表文件,列表中的用户不被锁定在主目录 
echo "allow_writeable_chroot=YES" >> /etc/vsftpd/vsftpd.conf 
echo "local_root=/var/ftp/test" >> /etc/vsftpd/vsftpd.conf #设置本地用户登录后所在的目录

 配置FTP为被动模式请执行如下命令:

sed -i 's/anonymous_enable=YES/anonymous_enable=NO/' /etc/vsftpd/vsftpd.conf #禁止匿名登录FTP服务器 
sed -i 's/listen=NO/listen=YES/' /etc/vsftpd/vsftpd.conf #监听IPv4 sockets 
sed -i 's/listen_ipv6=YES/#listen_ipv6=YES/' /etc/vsftpd/vsftpd.conf #关闭监听IPv6 sockets 
sed -i 's/#chroot_local_user=YES/chroot_local_user=YES/' /etc/vsftpd/vsftpd.conf #全部用户被限制在主目录 
sed -i 's/#chroot_list_enable=YES/chroot_list_enable=YES/' /etc/vsftpd/vsftpd.conf #启用例外用户名单 
sed -i 's/#chroot_list_file=/chroot_list_file=/' /etc/vsftpd/vsftpd.conf #指定例外用户列表文件,列表中的用户不被锁定在主目录 
echo "allow_writeable_chroot=YES" >> /etc/vsftpd/vsftpd.conf 
echo "local_root=/var/ftp/test" >> /etc/vsftpd/vsftpd.conf #设置本地用户登录后所在的目录 

echo "pasv_enable=YES" >> /etc/vsftpd/vsftpd.conf #开启被动模式 
echo "pasv_address=<FTP服务器公网IP地址>" >> /etc/vsftpd/vsftpd.conf #本教程中为ECS服务器弹性IP 
echo "pasv_min_port=20" >> /etc/vsftpd/vsftpd.conf #设置被动模式下,建立数据传输可使用的端口范围的最小值 
echo "pasv_max_port=21" >> /etc/vsftpd/vsftpd.conf #设置被动模式下,建立数据传输可使用的端口范围的最大值

在/etc/vsftpd目录下创建chroot_list文件,并在文件中写入例外用户名单。 如果没有例外用户时,也必须创建chroot_list文件,内容可为空。

#使用vim命令编辑chroot_list文件,添加例外用户名单。此名单中的用户不会被锁定在主目录,可以访问其他目录。
vim /etc/vsftpd/chroot_list 
systemctl restart vsftpd.service #重启FTP服务

参考:http://slacksite.com/other/ftp.html

上一篇:轻量应用服务器 常见应用安装与配置 : 使用WordPress搭建个人手机博客


下一篇:阿里云ECS云服务器通用型g6和g5的区别以及选择建议