基于 CentOS 搭建 FTP 文件服务

腾讯云
入门
0 个任务
剩余 1 个名额

你还可以 创建 或者 使用已有 云主机不限时上机

实验内容

FTP 是一个很实用的文件传输协议,方便在客户端和服务器之间进行文件的传输。本实验带您使用 vsftpd 来搭建一个 FTP  服务,并且创建专有的 FTP 登录账户,保障服务器安全。

首次可免费使用云主机 45 分钟 ,到期后云主机将被重置并退库,若想保留成果请及时留用。

实验资源

云服务器

软件环境

CentOS 7.2 64 位

目录

# 搭建 FTP 文件服务 ## 安装并启动 FTP 服务 > <time>5min ~ 10min</time> ### 安装 VSFTPD 使用 `yum` 安装 [vsftpd][]: ``` yum install vsftpd -y ``` > <bubble for="vsftpd"> > `vsftpd` 是在 Linux 上被广泛使用的 FTP 服务器,根据其[官网介绍][https://security.appspot.com/vsftpd.html],它可能是 UNIX-like 系统下最安全和快速的 FTP 服务器软件。 > </bubble> > <checker type="output-contains" command="ls /etc/vsftpd -la" hint="安装 vsftpd"> > <keyword regex="vsftpd.conf" /> > </checker> ### 启动 VSFTPD 安装完成后,启动 FTP 服务: ``` service vsftpd start ``` 启动后,可以看到系统已经[监听了 21 端口][21]: ``` netstat -nltp | grep 21 ``` 此时,访问 [ftp://${runtime.vars.cvmIpAddress}][] 可浏览机器上的 [/var/ftp][ftp-home] 目录了。 > <bubble for="21"> > FTP 协议默认使用 21 端口作为服务端口 > </bubble> > <locate for="ftp-home" path="/var/ftp" hint="默认 FTP 访问目录在此" /> > <checker type="output-contains" command="netstat -nltp" hint="启动 vsftp 服务"> > <keyword regex=":21" /> > </checker> ## 配置 FTP 权限 > <time>5min ~ 10min</time> 目前 FTP 服务登陆允许匿名登陆,也无法区分用户访问,我们需要配置 FTP 访问权限 ### 了解 VSFTP 配置 vsftpd 的配置目录为 [/etc/vsftpd][0],包含下列的配置文件: - [vsftpd.conf][1] 为主要配置文件 - [ftpusers][2] 配置禁止访问 FTP 服务器的用户列表 - [user_list][3] 配置用户访问控制 阅读上述配置以了解更多信息。如果您准备好了,点击下一步开始修改配置来设置权限。 > <locate for="0" path="/etc/vsftpd" hint="vsftp 配置目录" /> > <locate for="1" path="/etc/vsftpd/vsftpd.conf" hint="vsftp 主要配置" /> > <locate for="2" path="/etc/vsftpd/ftpusers" hint="vsftp 黑名单用户列表" /> > <locate for="3" path="/etc/vsftpd/user_list" hint="vsftp 用户访问控制" /> ### 阻止匿名访问和切换根目录 匿名访问和切换根目录都会给服务器带来[安全风险][safety],我们把这两个功能关闭。 [编辑 /etc/vsftpd/vsftpd.conf][edit],[找到下面两处配置][find]并修改: ``` # 禁用匿名用户 anonymous_enable=NO # 禁止切换根目录 chroot_local_user=YES ``` 编辑完成后,按 `Ctrl + S` 保存配置,重新启动 FTP 服务,如: ``` service vsftpd restart ``` > <bubble for="safety"> > 匿名访问让所有人都可以上传文件到服务器上而无需鉴权,而允许切换根目录则可能产生越权访问问题。 > </bubble> > <bubble for="find"> > 在代码编辑器中,用 `Ctrl + F` 进行搜索,Mac 用户用 `Cmd + F` 进行搜索 > </bubble> > <locate for="1" path="/etc/vsftpd/vsftpd.conf" hint="编辑主配置文件" /> > <edit for="edit" file="/etc/vsftpd/vsftpd.conf" /> > <checker type="output-contains" command="cat /etc/vsftpd/vsftpd.conf" hint="修改配置以禁止匿名用户访问"> > <keyword regex="^anonymous_enable=NO" /> > </checker> > <checker type="output-contains" command="cat /etc/vsftpd/vsftpd.conf" hint="修改配置以禁止用户切换根目录"> > <keyword regex="^chroot_local_user=YES" /> > </checker> > <checker type="output-contains" command="curl ftp://${runtime.vars.cvmIpAddress} -v 2>&1" hint="重启 FTP 服务"> > <keyword regex="530" /> > </checker> ### 创建 FTP 用户 创建一个用户 `ftpuser` [:question][user]: ``` useradd ftpuser ``` 为用户 `ftpuser` 设置密码 [:question][password]: ``` echo "${runtime.vars.allocatedPassword}" | passwd ftpuser --stdin ``` > <bubble for="user"> > 为了方便后面的实验步骤,不建议使用其它的用户名 > </bubble> > <bubble for="password"> > 下面命令中的密码为实验室为您生成,为了方便后面的实验步骤,不建议使用其他密码 > </bubble> > <checker type="output-contains" command="cat /etc/passwd" hint="创建 FTP 用户(如果您使用其它用户,请直接下一步)"> > <keyword regex="ftpuser:" /> > </checker> ### 限制该用户仅能通过 FTP 访问 限制用户 `ftpuser` 只能通过 FTP 访问服务器,而不能直接登录服务器: ``` usermod -s /sbin/nologin ftpuser ``` > <checker type="output-contains" command="cat /etc/passwd" hint="限制 FTP 用户登录方式"> > <keyword regex="ftpuser:/sbin/nologin" /> > </checker> ### 为用户分配主目录 为用户 `ftpuser` 创建[主目录][ftp-home]并约定: `/data/ftp` 为主目录, 该目录不可上传文件 `/data/ftp/pub` 文件只能上传到该目录下 ``` mkdir -p /data/ftp/pub ``` 创建登录欢迎文件 [:question][welcome]: ``` echo "Welcome to use FTP service." > /data/ftp/welcome.txt ``` 设置访问权限: ``` chmod a-w /data/ftp && chmod 777 -R /data/ftp/pub ``` 设置为用户的主目录: ``` usermod -d /data/ftp ftpuser ``` > <bubble for="ftp-home"> > 用户的主目录是用户通过 FTP 登录后看到的根目录 > </bubble> > <bubble for="welcome"> > 方便用户登录后可以看到欢迎信息,并且确定用户确实登录到了主目录上。 > </bubble> > <checker type="output-contains" command="ls -la /data" hint="创建目录 /data/ftp"> > <keyword regex="ftp" /> > </checker> > <checker type="output-contains" command="ls -ld /data/ftp" hint="设置 /data/ftp 访问权限为 a-w"> > <keyword regex="dr-xr-xr-x" /> > </checker> > <checker type="output-contains" command="ls -ld /data/ftp/pub" hint="设置 /data/ftp/pub 访问权限为 777"> > <keyword regex="drwxrwxrwx" /> > </checker> > <checker type="output-contains" command="cat /etc/passwd" hint="设置 /data/ftp 为用户 ftpuser 的主目录"> > <keyword regex="ftpuser" /> > <keyword regex="/data/ftp" /> > </checker> > <checker type="output-contains" command="ls -la /data/ftp" hint="创建登录欢迎文件 welcome.txt"> > <keyword regex="welcome" /> > </checker> ## 准备域名和证书 > <time>15min ~ 30min</time> 注:如果您不需要通过域名访问 FTP 服务器则可以直接点击“已完成,下一步”跳过域名和证书的准备环节 ### 域名注册 如果您还没有域名,可以[在腾讯云上选购][buy_link],过程可以参考下面的视频。 * [视频 - 在腾讯云上购买域名][buy_domain_video] > <link for="buy_link" href="https://dnspod.qcloud.com/?fromSource=lab"></link> > <video for="buy_domain_video" platform="qq" vid="p05077pwelw" name="域名选购"></video> ### 域名解析 域名购买完成后, 需要将域名解析到实验云主机上,实验云主机的 IP 为: ``` ${runtime.vars.cvmIpAddress} ``` 在腾讯云购买的域名,可以[到控制台添加解析记录][https://console.qcloud.com/domain],过程可参考下面的视频: * [视频 - 如何在腾讯云上解析域名][video_resolve_domain] > <video for="video_resolve_domain" platform="qq" vid="t0507ps9kxo" name="域名解析"></video> 域名设置解析后需要过一段时间才会生效,通过 `ping` 命令检查域名是否生效 [:question][replace],如: > <bubble for="replace">注意替换下面命令中的 `www.yourmpdomain.com` 为您自己的注册的域名</bubble> ``` ping www.yourdomain.com ``` 如果 ping 命令返回的信息中含有你设置的解析的 IP 地址,说明解析成功。 ## 访问 FTP 服务 > <time>5min ~ 10min</time> FTP 服务已安装并配置完成,下面我们来使用该 FTP 服务 ### 访问 FTP 服务 根据您个人的工作环境,选择一种方式来访问已经搭建的 FTP 服务 #### 通过 Windows 资源管理器访问 Windows 用户可以复制下面的[链接][address]到资源管理器的地址栏访问: > <bubble for="address"> > 如果您申请了域名,可以将链接中的 Ip 地址替换为对应的域名访问 FTP 服务 > </bubble> ``` ftp://ftpuser:${runtime.vars.allocatedPassword}@${runtime.vars.cvmIpAddress} ``` #### 通过 FTP 客户端工具访问 FTP 客户端工具众多,下面推荐两个常用的: - [WinSCP][ws] - Windows 下的 FTP 和 SFTP 连接客户端 - [FileZilla][fz] - 跨平台的 FTP 客户端,支持 Windows 和 Mac 下载和安装 FTP 客户端后,使用下面的凭据进行连接即可: [主机][host]: > <bubble for="host"> > 如果您申请了域名,可以将 Ip 地址替换为对应的域名作为访问凭据 > </bubble> ``` ${runtime.vars.cvmIpAddress} ``` 用户: ``` ftpuser ``` 密码: ``` ${runtime.vars.allocatedPassword} ``` 如果能够正常连接,那么大功告成,您可以开始使用属于您自己的 FTP 服务器了! 接下来,请上传任意一张图片到您的 FTP 服务器上的pub目录下,然后,就可以在 [/data/ftp/pub][ftp] 中看到了。 注意: `请不要直接上传文件到根目录下`,您应该选择上传到 `pub` 目录下 > <locate for="ftp" path="/data/ftp/pub" hint="上传后,重新打开此目录查看文件" /> > <checker type="output-contains-no" command="ls -1p /data/ftp/pub | grep -v '/' | wc -l" hint="上传图片到 FTP 服务器上"> > <keyword regex="0" /> > </checker> ### 大功告成 恭喜!您已经成功完成了搭建 FTP 服务器的实验任务。