如何在 Amazon Linux 2搭建 FTP 服务

如何在 Amazon Linux 2搭建 FTP 服务

本文将介绍如何在Amazon Linux2 搭建FTP服务器,用于传输文件。 适用环境 本文所介绍的步骤在**使用 Amazon Linux 2 AMI** 中测试通过。 配置说明 Linux Instance 所需配置
如何在 Amazon Linux 2搭建 FTP 服务 2023-03-14 12:58:43
如何在 Amazon Linux 2搭建 FTP 服务 0
如何在 Amazon Linux 2搭建 FTP 服务
**1)Linux 实例必须有公网 IP** 如果您需要从公网访问 FTP 服务,则需要给 EC2 分配公有 IP 或者弹性 IP。详情请参考[<https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/using-instance-addressing.html>](https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/using-instance-addressing.html?trk=cndc-detail)中的公有 ipv4 部分和弹性 ip 地址部分。 **2)配置安全组** 接下来,需要给实例配置安全组,使其能够接收来自 Internet 的 FTP 请求。进入 EC2 Console,在左侧目录选中实例。之后,选中您的 Linux 实例,并点击与您实例关联的安全组。如果您不想更改原安全组,可以在目录左侧选择安全组并创建一个新的安全组,并与此实例关联。 ![image.png](https://dev-media.amazoncloud.cn/7704d96b55df486899ccf48156f4ec10_image.png "image.png") 选中此安全组后,点击编辑入站规则。您需要开启 port20-21 以让外界通过FTP 默认port 20和21连接服务器实例。您还需开启 port 1024-1048 用于FTP 的 passive 模式。(可选)您可以将源更改为您的IP地址以限制其他人访问您的实例。 ![image.png](https://dev-media.amazoncloud.cn/a7832f53b9df4f959bd1c434c6d321ed_image.png "image.png") ##### 安装 vsftpd **1)连接您的 Linux 实例 linux shell 后,安装 vsftpd** sudo yum install vsftpd **2)确认安装完成后,我们将修改 vsftpd 的config 文件来设置 ftp 服务器。使用 vim(或您想使用的编辑器)更改 config 文件:** sudo vim /etc/vsftpd/vsftpd.conf 为限制匿名用户访问我们的FTP服务器,将以下行: ``` anonymous_enable=YES改为: anonymous_enable=NO并在文件底下加入这些行: pasv_enable=YES pasv_min_port=1024 pasv_max_port=1048 pasv_address=< 您Linux实例的公网IP地址>您的实例如果使用的是ipv4 ip地址(大部分情况,您使用的都是ipv4地址,如果您使用的是弹性ip,一定是ipv4地址),请找到下面这行并将其注释掉(在此行前加一个#号): listen_ipv6=YES同时,将以下行: listen=NO改为: listen=YES ``` **3)重启 vsftpd:** 在 linux command line 中键入:sudo systemctl restart vsftpd 若您想要 vsftpd 每次都伴随开机自动启动,则键入: sudo systemctl enable vsftpd **4)设置用户:** 因为 vsftpd 自动限制所有 linux 上已存在的用户,我们需要新建一个用户,请使用以下命令:sudo adduser <您的用户名> sudo passwd <您的用户名>为了防止ftp用户访问根目录以外的目录,我们需要再次进入 config 文件更改设置: sudo vim /etc/vsftpd/vsftpd.conf 找到此行并取消这行的注释: chroot_local_user=YES 因为我们 adduser 创建的 user 自动有 write 权限,所以我们需要在 config 文件中允许 chroot write 权限。**您也可以单独设置 user 的权限,并不允许 chroot write。** 在 config 文件最底下加入此行:allow_writeable_chroot=YES 再次重启vsftpd 使您的更改生效: ##### sudo systemctl restart vsftpd 访问 FTP 服务 使用浏览器[<ftp://your-public-ip-address>](ftp://your-public-ip-address?trk=cndc-detail)即可访问与下载文件(未来浏览器可能会不支持 ftp 访问),也可以使用 FileZilla 客户端进行文件上传、文件夹管理。 如果您想用命令行访问 ftp,在 linux 下可安装 ftp client。sudo yum install ftp 安装后可使用以下命令来访问: ##### ftp <您的 linux 实例的公网 IP >启用 FTP over SSL(可选) 为了让您的 ftp 连接更加安全,我们推荐您使用 ftps 协议(explicit)来建立 ftp 连接。接下来我们将介绍如何设置 ftp 服务器来建立 ftpse 连接。 首先,在服务器端创建您的 SSL 证书和密钥,我们选择将密钥和证书放在一个文件里,您也可以将它们分开。您也可以自己设置证书和密钥的位置和文件名字。 sudo mkdir /etc/ssl/private openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem之后,打开vsftpd config文件设置ssl: sudo vim /etc/vsftpd/vsftpd.conf在文件中加入以下行以设置密钥和证书文件位置: rsa_cert_file=/etc/ssl/private/vsftpd.pem <或者您自己设置的证书位置> rsa_private_key_file=/etc/ssl/private/vsftpd.pem <或者您自己设置的密钥位置>在文件中加入以下行使ssl成为默认和必须的连接方式: ``` ssl_enable=YES allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES 在文件中加入以下行来设置我们使用的SSL版本和其他设置: ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO require_ssl_reuse=NO ssl_ciphers=HIGH 重启 vsftpd 使您的更改生效: sudo systemctl restart vsftpd ``` <!--StartFragment--> **提示:使用 ftps 连接最容易的方式是使用 filezilla,操作过程和 ftp 一样,只是会弹窗提示您是否认证此证书。在 linux 上可以考虑使用 lftp。** #### 问题排查 - 如果没有任何连接信息,检查安全组和防火墙有没有打开控制端口21。 - 如果您想开启需要详细的 ftp logging 来排查问题,请修改 config 文件:输入此命令打开 config 文件 - sudo vim /etc/vsftpd/vsftpd.conf加入此行 ```log_ftp_protocol=YES 将此行 xferlog_std_format=YES 改为 xferlog_std_format=NO 重启vsftpd使您的更改生效: sudo systemctl restart vsftpd 您可以在服务器端(ec2 实例)中的var/log/vsftpd.log 看到您的 log ``` #### 参考资料 - [<https://medium.com/tensult/configure-ftp-on-aws-ec2-85b5b56b9c94>](https://medium.com/tensult/configure-ftp-on-aws-ec2-85b5b56b9c94?trk=cndc-detail) - [<https://gist.github.com/gunjanpatel/37d306cd1585ece1179b>](https://gist.github.com/gunjanpatel/37d306cd1585ece1179b?trk=cndc-detail) - [<https://www.digitalocean.com/community/tutorials/how-to-configure-vsftpd-to-use-ssl-tls-on-a-centos-vps>](https://www.digitalocean.com/community/tutorials/how-to-configure-vsftpd-to-use-ssl-tls-on-a-centos-vps?trk=cndc-detail)