redhat 运维 -ftp 服务故障
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. 尝试从 workstation 使用 lftp 连接运行在 servera 服务器上的的 ftp 服务。
1.2. 尝试从 servera 上使用 lftp 连接运行在 servera/localhost 上的 ftp 服务
1.3 我们在 servera 上查看一下 pub/noclip 文件的内容
1.4 我们再去查看一下 pub/getall 的文件内容
我们可以看到这个文件确实是有问题的。
发现问题,我们就去收集信息解决问题:
收集有关在 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 上下文。**这也是可能错误的点
所以我们现在就可以做出这样的假设:
没有为 FTP 服务打开防火墙,导致远程机器连接失败。
我们就这些问题做出修改:
打开服务器上 FTP 服务的防火墙。
递归重置/var/ftp 上的 SELinux 上下文。
我们测试一下这个问题是否得到了解决:
尝试从 workstation 使用 lftp 连接运行在 servera 服务器上的的 ftp 服务。
我们很明显的发现之前 ls 是没有内容的,这算是解决了问题。
我们再尝试查看那两个文件内容:
至此,我们就顺利的解决了这一问题。
总结:
通过这个实验我们能获得的一些运维思路是,当遇到一些服务故障的时候,我们有没有去考虑以下这些情况呢?
收集有关在 servera 上运行的 FTP 服务的信息。包括网络端口、防火墙信息、文档根、文件权限、SELinux 拒绝等。
版权声明: 本文为 InfoQ 作者【阿柠xn】的原创文章。
原文链接:【http://xie.infoq.cn/article/c199b447379c5f1ca2c584eac】。文章转载请联系作者。
评论