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服务打开防火墙,导致远程机器连接失败。
文件/var/ftp/pub/getall包含不正确的SELinux上下文,不允许ftp守护程序读取该文件。
- 我们就这些问题做出修改:
打开服务器上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
- 我们测试一下这个问题是否得到了解决:
尝试从workstation使用lftp连接运行在servera服务器上的的ftp服务。
我们很明显的发现之前ls是没有内容的,这算是解决了问题。
我们再尝试查看那两个文件内容:
至此,我们就顺利的解决了这一问题。
总结:
通过这个实验我们能获得的一些运维思路是,当遇到一些服务故障的时候,我们有没有去考虑以下这些情况呢?
收集有关在servera上运行的FTP服务的信息。包括网络端口、防火墙信息、文档根、文件权限、SELinux拒绝等。
- 点赞
- 收藏
- 关注作者
评论(0)