写点什么

redhat 运维 -ftp 服务故障

作者:阿柠xn
  • 2022-11-15
    陕西
  • 本文字数:1206 字

    阅读完需:约 4 分钟

FTP 概述

文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议。


FTP 允许用户以文件操作的方式(如文件的增、删、改、查、传送等)与另一主机相互通信。然而, 用户并不真正登录到自己想要存取的计算机上面而成为完全用户, 可用 FTP 程序访问远程资源, 实现用户往返传输文件、目录管理以及访问电子邮件等等, 即使双方计算机可能配有不同的操作系统和文件存储方式。


问题: 一个用户在 servera 服务器上运行 FTP 服务器,会遇到以下症状:


  • 用户无法从 workstation 连接使用 lftp。

  • 当用户登录到 servera 上的 shell 时,可以使用 lftp 连接到 localhost。

  • 连接后,文件 pub/noclip 会传输,但文件 pub/getall 不会传输


servera 上的 FTP 守护程序(vsftpd.service)将所有文件传输记录到**/var/log/xferlog**。如果该文件中某一行的最后一个字符是 c,则传输成功完成;如果最后一个字符是 I,则传输不完整。


  1. 我们尝试重现问题:


1.1. 尝试从 workstation 使用 lftp 连接运行在 servera 服务器上的的 ftp 服务。



1.2. 尝试从 servera 上使用 lftp 连接运行在 servera/localhost 上的 ftp 服务



1.3 我们在 servera 上查看一下 pub/noclip 文件的内容



1.4 我们再去查看一下 pub/getall 的文件内容



我们可以看到这个文件确实是有问题的。


  1. 发现问题,我们就去收集信息解决问题:


收集有关在 servera 上运行的 FTP 服务的信息。包括网络端口、防火墙信息、文档根、文件权限、SELinux 拒绝等。


2.1 收集有关 vsftpd(servera 上的 ftp 程序)在网络上侦听的位置的信息



这表明 vsftpd 正在监听默认的 FTP 端口(tcp:21),并接受来自所有 IP 地址的连接。


2.2 我们看看 servera 上的防火墙配置:



这说明防火墙中没有开放 ftp 服务。这就解释了为什么远程连接失败了,但是本地连接成功了。


2.3 查看 FTP 根目录内容,默认路径为/var/ftp



文件权限貌似是正确的。


2.4 检查前一天是否有 linux 拒绝



**这表明文件/var/ftp/pub/getall 具有 tmp_t 的 SELinux 上下文。**这也是可能错误的点


  1. 所以我们现在就可以做出这样的假设:


​ 没有为 FTP 服务打开防火墙,导致远程机器连接失败。


   文件/var/ftp/pub/getall包含不正确的SELinux上下文,不允许ftp守护程序读取该文件。
复制代码


  1. 我们就这些问题做出修改:


打开服务器上 FTP 服务的防火墙。


[root@servera ~]# firewall-cmd --add-service=ftp[root@servera ~]# firewall-cmd --permanent --add-service=ftp
复制代码



递归重置/var/ftp 上的 SELinux 上下文。


[root@servera ~]# restorecon -Rv /var/ftp
复制代码


  1. 我们测试一下这个问题是否得到了解决:


尝试从 workstation 使用 lftp 连接运行在 servera 服务器上的的 ftp 服务。



我们很明显的发现之前 ls 是没有内容的,这算是解决了问题。


我们再尝试查看那两个文件内容:




至此,我们就顺利的解决了这一问题。


总结:


通过这个实验我们能获得的一些运维思路是,当遇到一些服务故障的时候,我们有没有去考虑以下这些情况呢?


收集有关在 servera 上运行的 FTP 服务的信息。包括网络端口、防火墙信息、文档根、文件权限、SELinux 拒绝等。

发布于: 刚刚阅读数: 3
用户头像

阿柠xn

关注

还未添加个人签名 2022-08-29 加入

还未添加个人简介

评论

发布
暂无评论
redhat运维-ftp服务故障_Linux_阿柠xn_InfoQ写作社区