CentOS魔法笔记:轻松掌握FTP服务搭建与管理技巧

42 阅读12分钟

image.png

前言

在数字化时代,文件传输是网络管理和团队协作的关键一环。而搭建一个高效稳定的FTP服务,则是确保文件共享和传输顺畅的必要条件之一。本文将深入探讨在CentOS平台下搭建FTP服务的技巧和管理方法,旨在为您提供全面而易懂的指导。无论您是初学者还是有经验的系统管理员,都能通过这份“CentOS魔法笔记”轻松掌握FTP服务的精髓,让文件传输变得轻松而高效。

FTP是什么

FTP,即文件传输协议,是一种用于在基于TCP的网络(如互联网)上从一个主机传输文件到另一个主机的标准网络协议。它于1970年代初开发,仍然广泛用于各种目的,包括将网页上传到服务器、从远程服务器下载文件或在网络上的计算机之间共享文件。

FTP能干什么

使用FTP,用户可以执行以下操作:

  • 上传(上传)文件:用户可以将文件从本地计算机上传到远程服务器。这对于将网站文件上传到Web服务器或备份文件到远程存储等操作非常有用。
  • 下载文件:用户可以从远程服务器下载文件到本地计算机。这对于从服务器获取文件副本或下载共享文件等操作非常有用。
  • 创建、删除和重命名文件和目录:用户可以在远程服务器上创建、删除和重命名文件和目录,以便管理远程文件系统。
  • 列出远程目录内容:用户可以获取远程服务器上特定目录的文件列表,以便查看可用文件和目录。

FTP基本工作原理

客户端-服务器模型:FTP使用客户端-服务器模型进行工作。客户端是指发起文件传输请求的计算机,而服务器是负责接受和处理这些请求的计算机。客户端使用FTP客户端软件(如FileZilla、WinSCP等)与服务器建立连接,并通过发送命令和数据来执行文件传输操作。

FTP协议支持两种不同的连接模式:主动模式和被动模式。

  • 主动模式(Active Mode):在主动模式下,客户端(即请求文件的一方)首先建立与服务器的控制连接。一旦控制连接建立,客户端会通过该连接发送一个PORT命令,指定数据连接所要使用的端口号。然后服务器在自己的端口上开启一个数据连接,并向客户端的指定端口发送数据。这种模式下,客户端的防火墙需要允许来自服务器的数据连接。
  • 被动模式(Passive Mode):在被动模式下,客户端同样首先建立与服务器的控制连接。但是,当客户端要求数据传输时,服务器会指示一个临时端口,并在该端口上等待客户端的连接。客户端在控制连接上发送PASV命令,并从服务器返回的IP地址和端口号中建立数据连接。被动模式适用于客户端位于防火墙后面的情况,因为数据连接是由客户端发起的,不需要服务器发起对客户端的连接。

身份验证: FTP通常需要用户名和密码进行身份验证。一些FTP服务器还可能支持匿名登录,允许用户在不提供用户名或密码的情况下登录。

安全问题: FTP不加密传输的数据,包括用户名和密码。为了更安全的文件传输,通常使用支持传输层安全性(TLS)或安全套接层(SSL)协议的FTP安全(FTPS)和SSH文件传输协议(SFTP)等协议。

FTP常用命令

在绝大多数情况下,可以使用FTP客户端软件(如FileZilla、WinSCP等)与服务器建立连接,并进行其他相关的操作,这些操作都有按钮或其他交互组件,并不需要手动输入命令,实际上命令已经封装到可视化的交互中了,在日志中会记录每个交互操作实行的是什么命令,为了方便解读日志内容的含义,常见的FTP命令还是有必要了解一下的:

  • USER/PASS: 使用用户名和密码进行身份验证。
  • PWD: 打印当前工作目录 - 显示当前目录。
  • CWD: 更改当前工作目录 - 更改当前目录。
  • LIST: 列出当前目录中的文件和目录。
  • GET/RETR: 从服务器检索文件。
  • PUT/STOR: 在服务器上存储文件。
  • QUIT: 结束FTP会话。

在基本了解完FTP是什么、能干什么以及其基本工作原理和常用的命令后,接下来就是如何搭建自己的FTP服务器。在CentOS 7中,可以使用vsftpd(Very Secure FTP Daemon)软件包来配置和管理FTP(File Transfer Protocol)服务。

vsftpd安装与启动

安装vsftpd软件包 如果您的CentOS 7系统上没有安装vsftpd软件包,可以使用以下命令安装:

yum install vsftpd

启动和设置FTP服务 安装完毕后,可以使用以下命令启动FTP服务并设置其开机自启动:

systemctl start vsftpd.service 
systemctl enable vsftpd.service

至此,ftp服务端安装完成了!其安装过程还是相当简单的。安装完成后,执行查询服务状态的命令可以查看ftp服务的工作状态:

查询vsftpd状态

systemctl status vsftpd

image.png

如果修改了vsftpd.conf中的内容,则需要需要停止或重启vsftpd服务才能生效,可以使用下面两个命令:

停止vsftpd服务

systemctl stop vsftpd

重启vsftpd服务

systemctl restart vsftpd

vsftpd (Very Secure FTP Daemon)作为一种非常流行的 FTP 服务器软件,它使用20和21端口来提供 FTP 服务。具体来说:

  • 21端口是 FTP 控制连接的端口。当客户端连接到 FTP 服务器时,它们将首先连接到21端口,并向服务器发送一些控制命令,例如登录、获取文件列表等。控制连接是一个永久连接,它在整个 FTP 会话期间保持打开状态。
  • 20端口是 FTP 数据连接的端口。当客户端需要上传或下载文件时,它们会建立一个数据连接,该连接使用20端口进行传输,因此在客户端所在的防火墙上要确保20端口是打开的。数据连接只在需要上传或下载文件时才会建立,并在文件传输完成后关闭。

因为FTP协议是基于TCP/IP协议栈的,所以20和21端口都是TCP端口。在使用 Vsftpd 作为 FTP 服务器时,需要确保这两个端口未被其他服务占用,并且防火墙已经允许客户端连接到这些端口。当你操作vsftp服务端的防火墙的时候,会用到以下命令:

查询已开放的端口(如果防火墙开放的端口中没有21、20,则使用开放端口的命令)

sudo firewall-cmd --list-port

开放端口

sudo firewall-cmd --zone=public --add-port=21/tcp --permanent
sudo firewall-cmd --zone=public --add-port=20/tcp --permanent
  • -zone 作用域;
  • --add-port 添加端口,格式为:端口/通讯协议
  • --permanent 永久生效,没有此参数重启后失效

查看防火墙状态

sudo firewall-cmd --state

重启防火墙

systemctl restart firewalld.service

vsftpd常规配置

FTP服务器的配置文件位于/etc/vsftpd/vsftpd.conf。可以使用编辑器打开该文件,并根据需要进行修改。下面是一个默认的配置文件(已经翻译成中文了,贴心不?)


        # 示例配置文件 /etc/vsftpd/vsftpd.conf
        # 默认编译设置相对较为谨慎。这个示例文件稍微放宽了一些,以使 FTP 守护进程更易于使用。
        # 请查看 vsftpd.conf.5 以获取所有已编译的默认值。
        # 阅读说明:此示例文件并非是 vsftpd 选项的详尽列表。
        # 请阅读 vsftpd.conf.5 手册页以全面了解 vsftpd 的功能。
        # 允许匿名 FTP 吗?(小心 - 如果将其注释掉,默认情况下允许匿名 FTP)。
        anonymous_enable=YES
        anon_upload_enable=YES
        anon_mkdir_write_enable=YES
        # 取消注释以允许本地用户登录。
        # 当 SELinux 强制执行时,请检查 SE bool ftp_home_dir
        local_enable=YES
        # 取消注释以启用任何形式的 FTP 写入命令。
        write_enable=YES
        # 本地用户的默认掩码为 077。如果您的用户期望是 022(大多数其他 ftpd 使用 022),
        # 您可能希望更改此值。
        local_umask=022
        # 取消注释以允许匿名 FTP 用户上传文件。只有在激活上面的全局写入权限时才会生效。
        # 此外,您显然需要创建一个由 FTP 用户可写的目录。
        # 当 SELinux 强制执行时,请检查 SE bool allow_ftpd_anon_write, allow_ftpd_full_access
        # anon_upload_enable=YES
        # 取消注释,如果您希望匿名 FTP 用户能够创建新目录。
        # anon_mkdir_write_enable=YES
        # 激活目录消息 - 在远程用户进入特定目录时显示的消息。
        dirmessage_enable=YES
        # 激活上传/下载的日志记录。
        xferlog_enable=YES
        # 确保 PORT 传输连接起源于端口 20(ftp-data)。
        connect_from_port_20=YES
        # 如果愿意,您可以安排上传的匿名文件由不同的用户所有。注意!对于上传的文件使用 "root" 是不推荐的!
        # chown_uploads=YES
        # chown_username=whoever
        # 如果愿意,您可以覆盖日志文件的默认位置。默认位置如下。
        # xferlog_file=/var/log/xferlog
        # 如果愿意,您可以将日志文件设置为标准 ftpd xferlog 格式。请注意,在这种情况下,默认的日志文件位置是 /var/log/xferlog。
        xferlog_std_format=YES
        # 您可以更改空闲会话超时的默认值。
        # idle_session_timeout=600
        # 您可以更改数据连接超时的默认值。
        # data_connection_timeout=120
        # 建议在您的系统上定义一个唯一的用户,该用户可以作为一个完全隔离和无特权的用户供 FTP 服务器使用。
        # nopriv_user=ftpsecure
        # 启用此选项,服务器将识别异步 ABOR 请求。出于安全原因不推荐(代码较为复杂)。不启用此选项,
        # 但可能会使旧的 FTP 客户端混淆。
        # async_abor_enable=YES
        # 默认情况下,服务器会假装允许 ASCII 模式,但实际上会忽略该请求。打开下面的选项,以使服务器在 ASCII 模式下实际执行 ASCII
        # 对文件的篡改。vsftpd.conf(5) 手册页解释了在禁用这些选项时的行为。
        # 请注意:在某些 FTP 服务器上,ASCII 支持允许通过 ASCII 模式中的命令 "SIZE /big/file" 进行拒绝服务(DoS)攻击。
        # vsftpd 预测到这种攻击并始终是安全的,报告原始文件的大小。
        # ASCII 篡改是协议的一个可怕特性。
        # ascii_upload_enable=YES
        # ascii_download_enable=YES
        # 您可以完全自定义登录横幅字符串。
        # ftpd_banner=Welcome to blah FTP service.
        # 您可以指定一个文件,其中包含不允许的匿名电子邮件地址。显然对抗某些 DoS 攻击很有用。
        # deny_email_enable=YES
        # (默认如下)
        # banned_email_file=/etc/vsftpd/banned_emails
        # 您可以指定一个显式的本地用户列表,将其 chroot() 到其主目录。如果 chroot_local_user 是 YES,则此列表将变成一个
        # 不进行 chroot() 的用户列表。
        # (警告!chroot 可能非常危险。如果使用 chroot,请确保用户对 chroot 内的顶级目录没有写访问权限)
        # chroot_local_user=YES
        # chroot_list_enable=YES
        # (默认如下)
        # chroot_list_file=/etc/vsftpd/chroot_list
        # 您可以激活到内置 ls 的 "-R" 选项。默认情况下禁用此选项,以避免远程用户能够在大型站点上导致过多的 I/O。
        # 但是,一些损坏的 FTP 客户端,例如 "ncftp" 和 "mirror" 假设存在 "-R" 选项,因此有充分的理由启用它。
        # ls_recurse_enable=YES
        # 当启用 "listen" 指令时,vsftpd 以独立模式运行,并在 IPv4 套接字上侦听。此指令不能与 listen_ipv6 指令一同使用。
        listen=NO
        # 此指令启用在 IPv6 套接字上侦听。默认情况下,在 IPv6 "any" 地址 (::) 上侦听将接受来自 IPv6 和 IPv4 客户端的连接。
        # 没有必要同时在 *both* IPv4 和 IPv6 套接字上进行监听。如果需要(也许因为要监听特定地址),那么必须运行两个带有两个配置文件的 vsftpd 实例。
        # 请确保其中一个监听选项已被注释!
        listen_ipv6=YES
        pam_service_name=vsftpd
        userlist_enable=YES
        tcp_wrappers=YES

卸载vsftpd

1、停止 VSFTPD 服务:在终端中执行以下命令以停止 VSFTPD 服务:

sudo systemctl stop vsftpd

2、卸载 VSFTPD 软件包:如果你的vsftpd服务是用yum包管理器安装的,也可以使用yum包管理器来卸载

sudo yum remove vsftpd

3、删除配置文件和数据文件:卸载软件包后,如果您不再需要 VSFTPD 的配置文件和数据文件,可以选择删除它们。通常这些文件位于 /etc/vsftpd.conf 和 /var/ftp 目录下。

4、清理残留的配置和数据:如果担心还会其他残留数据,希望手动检查并清理,可能会用到下面的两个命令.

find / -name vsftpd rm -rf vsftpd

5、重启系统(可选):为了确保所有变更生效,您可以选择重启您的系统。执行以下命令:

sudo reboot

写在最后

如果你觉得这篇文章对你有所帮助,不妨点击点赞按钮,让更多的人看到这篇优质的技术分享。同时,别忘了将这篇文章收藏起来,以备日后查阅。这样,你就能随时回顾和复习文章中的重要知识点,确保你的技术水平始终保持在最高水平。

对了,下篇文章将会重点分享一下,如何以匿名用户的身份访问搭建好的ftp服务,敬请期待哦!