阿里云服务器搭建ftp服务


1.FTP协议
FTP协议,全称文件传输协议(File Transfer Protocol),是简单、高速的网络文件传输协议,支持TCP/IP。早期的网络共享通常都是使用这个协议,现在也仍然有。当然,在其他的系统上有更好的选择,例如samba等,但是在实操方面我只接触过FTP。
FTP可以搭建家庭内部的文件共享(局域网)和互联网文件共享(公网)。因为自己有了一台云服务器,所以打算在部署自己的FTP服务器。如果有想法,可以以后搭建一个家庭的FTP它不香吗?
2.准备
在开始之前,我们先准备需要的东西:
一台云服务器。
SSH客户端。
FTP服务器,我使用vsftpd;FTP客户端,我选择FTP。
2.1. 服务器
我用的是阿里云ECS共享型4n,Rocky Linux[1]系统,兼容CentOS7/8和RHEL。由于CentOS6我没用过,所以不知道区别如何。配置什么的不重要。
如果不使用云服务器而是使用虚拟机的话,那就什么都不重要了。
2.2. SSH客户端
使用SSH是为了连接服务器,当然,也可以使用服务器官方提供的VNC。如果没有这些概念,那就使用SSH。对于虚拟机用户,我还是建议使用SSH,因为vmware和vbox的剪贴板共享功能不大好使,特别是不同操作系统之间互通。
3. 连接服务器
3.1. 配置安全组规则
在获得自己的服务器之后,到阿里云帐号的控制台->云服务器ECS->实例->管理->安装组。如果之前配置过自己的安全组,就在安全组的配置规则中选择快速添加,然后设置选择全部,添加。这一步很重要,因为我之前在修改SSH端口和配置FTP时忘了这一步,导致一直在和防火墙进行斗争,最后发现是这里的端口没开放。
添加规则3.2. SSH连接
默认情况下,服务器的SSH服务端(sshd)是开放的,如果想查看是否开放,可以使用sudo systemctl status sshd查看。老版本使用init.d我不熟悉,所以使用systemctl。如果你使用的是CentOS6,那只能网上查资料了。
sudo systemctl status sshd
如果打开了,就会出现active的提示:
sshd服务端已打开
如果是inactive,那就打开sshd,先使用sudo systemctl enable sshd设置开机自启动,然后再start:
# enable设置自启动,start启动sudo systemctl enable sshd sudo systemctl start sshd
客户端连接使用ssh username@ip -p portnumber。其中,如果你修改了ssh端口,就加上-p 端口,正常情况下可以省略这个参数。username是你的服务器用户名,不建议使用root登陆,ip是你的服务器公网IP,注意不是局域网IP,通过ifconfig和ip addr查到的是局域网IP,公网IP可以在阿里云控制台查找,通常服务器开通之后也会有手机短信告知你的服务器地址。
ssh chunshuyumao@192.168.0.10 -p 1234
连接上之后,输入密码就行了。如果想使用无密码登陆,可以在客户端使用ssh-keygen生成公私钥。-t是加密的类型,-C是注释,也可以不使用-C和之后的参数。回车三下,然后到自己的的家目录下就找到.ssh文件夹,里面有生成的公私钥。
生成公私钥
然后通过ssh-copy-id username@ip传输自己的公钥,不断确定即可。如果有多个公钥,可以使用参数-i file.pub指定使用哪一个。这里不过多描述。
ssh-copy-id -i ~/.ssh/id_rsa.pub chunshuyumao@192.168.0.10
登陆成功的提示。如果觉得记住自己的公网IP困难,可以写一个脚本自动登陆。例如我下边就是写了一个叫做swc(switch)的函数,快速切换服务器——如果你使用的是其他SSH客户端,那算我没说。
登陆成功
4.开始配置FTP
我们花了太多时间在SSH的连接上了。
4.1. 下载FTP客户端和服务端
服务端和客户端我使用的是vsftpd、ftp,在服务器中可以两个都下载,用于调试:
sudo yum install -y vsftpd ftp
安装FTP客户端和服务端
当然,你也可以只在自己的电脑下载ftp,服务器只下载vsftpd。其他系统下载可以网上查教程,或者先用自己的系统查找。例如我的manjaro系统,但是它没有ftp这个单独的软件包,而是自带了。
pacman -Ss vftpdpacman -Ss ftp
查找ftp服务端和客户端软件包示例4.2. 配置服务端
输入sudo vim /etc/vsftpd/vsftpd.conf,编辑配置,可以参考官网的介绍[2]。当然,vim可以修改成你喜欢的任何编辑器——重点是你的服务器得下载了,例如nano。一定要用sudo不然你无法修改配置。
 sudo vim /etc/vsftpd/vsftpd.conf
编辑配置
修改anonymous_enable=YES,这个配置是允许匿名登陆,匿名登陆表示任何人只要知道你的服务器公网IP就可以登陆,默认的文件夹保存在/var/ftp中。
image-202203041048116964.3. 开启FTP服务
首先,查看你的防火墙是否打开。firewalld通常是RedHat高版本系统(CentOS7/8、RockyLinux)的默认防火墙,iptables是Debian系列(Ubuntu等)默认的防火墙。
sudo systemctl status firewalld# 或者sudo systemctl status iptables
防火墙
如果是开启(active)的,解决办法有两个:关闭和开放指定端口和服务。
关闭防火墙。输入命令sudo systemctl stop firewalld。关闭自启输入命令sudo systemctl disable firewalld。
sudo systemctl stop firewalld
开放指定服务和端口。输入sudo firewall-cmd --add-port=21/tcp --permanent和sudo firewall-cmd --add-service=ftp --permanent。如果想让服务器保持开放这个端口,可以加--permanent,否则不用加。然后重新启动防火墙。
sudo firewall-cmd --add-port=21/tcp --permanentsudo firewall-cmd --add-service=ftp --permanentsudo firewall-cmd --reload
查看防火墙规则:
sudo firewall-cmd --list-all
规则
开启vsftpd服务和自启动:
sudo systemctl enable vsftpdsudo systemctl start vsftpd
检查vsftpd服务是否打开:
检查是否打开4.4. 客户端连接
在服务器登陆FTP服务,由于是服务器登陆,所以可以使用localhost作为IP。登陆匿名用户,帐号是ftp,密码直接回车。然后就可以使用FTP服务了。
ftp localhost
服务器客户端登陆
本地客户端登陆,使用ftp 公网IP,一样进行登陆。
ftp 101.200.84.36
本地客户端登陆
至此,FTP服务搭建完成。下载一个文件试试:
下载文件
看到,由于我们使用的是FTP主动模式,所以从服务器下载的时候,服务器也建议使用被动模式。不过目前的主动和被动对我而言没有区别,所以没有开启被动模式。如果不希望别人登陆自己的FTP,可以在配置文件中(/etc/vsftpd/vsftpd.conf)把anonymous_enable改成NO。
总结
本来搭建FTP是很简单的,但是自己的安全组规则没配好,导致一直有问题。我不是很清楚安全组规则和防火墙的区别——所以也许在一些人的操作中,不用控制防火墙也能够使用FTP。懒了,所以不想去探究,也许有时间的话我会试试,不过不是现在。
配置SSH端口的时候也出现了无法使用指定端口的问题。网上查了一堆博客,发现大家基本是在调试SELinux和防火墙。一个也解决不了问题,最后还是通过阿里云控制台修改了安全组规则,所以这个也很迷。由于我的服务器SELinux默认是关闭的,我就没有开启,实际上开启的话,配置SSH端口更麻烦,但是自然也更安全。
相关网址
[1]: Rocky Linux: https://rockylinux.org[2]: vsftpd: http://vsftpd.beasts.org/vsftpd_conf.html
到顶部