介绍
云服务器(Elastic Compute Service,简称ECS)是阿里云提供的弹性计算服务。基于它,可以用来配置FTP服务器;其中,FTP(File Transfer Protocol)文件传输协议是一个用于在计算机网络上在客户端和服务器之间进行文件传输的应用层协议。依照该协议,可以用来提供文件存储和访问服务。而基于该协议,发展出了vsftpd,它是一款在Linux发行版中最受欢迎的FTP服务器,它具有非常高的安全性需求、带宽限制、良好的可伸缩性和速率高等特点。
环境
System Version: Centos7
安装
-
安装vsftpd:
1
sudo yum install vsftpd
-
启动vsftpd:
1
2systemctl start vsftpd # 开启vsftpd
systemctl enable vsftpd # 自启vsftpd -
运行以下命令查看FTP服务监听的端口:
1
netstat -antup | grep ftp
查看FTP服务是否启动,可以看到监听的端口号为21:
此时,vsftpd默认已开启匿名访问功能,您无需输入用户名密码即可登录FTP服务器,但没有修改或上传文件的权限。
用户配置
两种模式在同一个服务中只能配置一种。
匿名模式
顾名思义,就是任何人都可以登陆的模式。
-
修改配置文件vsftpd.conf, 开启匿名上传权限:
1
sed -i 's/#anon_upload_enable=YES/anon_upload_enable=YES/' /etc/vsftpd/vsftpd.conf
-
更改
/var/ftp/pub
目录的权限,添加写权限:1
chmod o+w /var/ftp/pub
-
重启服务:
1
2systemctl restart vsftpd.service
systemctl status vsftpd.service这时,可以在浏览器的地址栏输入服务器的ftp://ipaddress:port,会出现如下界面,说明配置成功:
本地模式
该模式只能由拥有用户名和密码的所有人登陆。
-
在这里可以为FTP服务创建一个专门的用户, 当然直接使用root用户配置也是可以的, 但是不推荐:
1
2adduser vsftpd
passwd vsftpd # 注意密码
-
创建访问目录:
1
mkdir /var/ftp/vsftpd0
-
把创建的访问目录的用户属更改为vsftpd用户:
1
chown -R vsftpd:vsftpd /var/ftp/vsftpd0
-
修改vsftpd.conf配置文件:
主动模式传送数据时是“服务器”连接到“客户端”的端口(客户端开启数据端口);
主动模式需要客户端必须开放端口给FTP服务端,很多客户端都是在防火墙内,开放端口给FTP服务器访问比较困难。
被动模式传送数据是“客户端”连接到“服务器”的端口(服务端开启数据端口);
被动模式只需要服务器端开放端口给客户端连接就行了,如果服务端在防火墙内,也需要做端口映射才行。
配置FTP为主动模式:
1
2
3
4
5
6
7
8sed -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为被动模式:
1
2
3
4
5
6
7
8
9
10
11
12sed -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文件,使得该文件中的用户可以访问其他目录:
1
vim /etc/vsftpd/chroot_list
-
重启服务:
1
systemctl restart vsftpd.service
-
同样,在浏览器地址栏输入ftp://ipaddress:port,可以看到:
在这里输入前面创建的用户名和密码,便可以登陆FTP服务器。