浅谈Linux系统下常见的故障与处理方法(7)

3.检查DNS解析文件是否设置正确

在Linux系统中,有两个文件用来指定系统到哪里寻找相关域名解析的库。分别是文件/etc/host.conf和/etc/nsswitch.conf。

/etc/host.conf文件指定系统如何解析主机名,Linux通过域名解析库来获得主机名对应的IP地址。下面是RedHat Linux安装后缺省的/etc/host.conf内容:

order hosts,bind

其中,order指定主机名查询顺序,这里表示首先查找/etc/hosts文件对应的解析,如果没有找到对应的解析,接着就根据/etc/resolve.conf指定的域名服务器进行解析。

/etc/nsswitch.conf文件是由SUN公司开发的,用于管理系统中多个配置文件查询的顺序,由于nsswich.conf提供了更多的资源控制方式,nsswich.conf文件现在已经基本取代了hosts.conf,虽然Linux系统中默认这两个文档都存在,但实际上起作用的是nsswitch.conf文件。

nsswitch.conf文件每行的配置都以一个关键字开头,后跟冒号,紧接着是空白,然后是一系列方法的列表。

例如这段信息:

hosts:   files dns

表示系统首先查询主机库文件,如果没有找到对应的解析,接着会去DNS配置文件指定的DNS服务器进行解析。

清楚了Linux下域名解析的原理和过程,我们就可以根据这两个文件的设定,确定解析的顺序,从而判断出域名解析可能出现的问题。

4.检查服务是否正常打开

在一个应用出现故障时,必须要检查的就是服务本身,比如服务是否开启,配置是否正确等等,检查服务是否正确打开,分为两步,第一步是查看服务的端口是否打开:

例如,我们不能用root用户ssh登录到192.168.60.133这台Linux服务器,首先检查sshd服务的22端口是否打开:

[root@localhost init.d]# telnet 192.168.60.133 22

SSH-2.0-OpenSSH_4.3

这个输出表示192.168.60.133的22端口对外开放,或者可以说sshd服务是处于打开状态。如果没有任何输出,可能是服务没有启动,或者服务端口被屏蔽。

也可以在服务器上通过netstat命令检查22端口是否打开:

[root@localhost xinetd.d]# netstat -ntl

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN

tcp        0      0 :::80                       :::*                        LISTEN

tcp        0      0 :::22                       :::*                        LISTEN

可以看到,22端口在服务器上是打开的,同时,服务器上打开的还有3306、80端口。

接着进行第二步的检查,既然服务已经打开,可能是sshd服务配置的问题,检查sshd服务端配置文件/etc/ssh/sshd_config,发现有下面一行信息:

PermitRootLogin no

由此可知是ssh服务端配置文件限制了root用户不能登录系统,如果需要root登录系统,只需更改为如下即可:

PermitRootLogin yes

到这里为止,我们通过对端口和服务配置文件的层层检查,最终找到了问题的根源。需要说明的是,这里的重点不是讲述如何让root登录Linux系统,而是要通过这个例子让读者学会处理类似问题的思路和方法。

5.检查访问权限是否打开

(1)检查系统防火墙iptables的状态

当某些服务不能访问时,一定要检查是否被Linux本机防火墙iptables屏蔽了,可以通过iptables -L指令查看iptables的配置策略,例如我们不能访问某台Linux服务器提供的www服务,通过检查,系统网络、域名解析都正常,并且服务也正常启动,然后检查了服务器的iptables策略配置,信息如下:

[root@localhost ~]# iptables -L -n

Chain INPUT (policy DROP)

target     prot opt source               destination

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination

Chain OUTPUT (policy DROP)

target     prot opt source               destination

从上面的输出可知,这个Linux服务器仅仅设置了预设策略,而致命的是将INPUT链和OUTPUT链都设置为DROP,也就是所有外部数据不能进入服务器,服务器数据也不能出去,这样的设置相当于没有网络。

为了能访问这台服务器提供的www服务,增加两条策略即可:

[root@localhost ~]#iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT

[root@localhost ~]#iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

这样以来,internet上的其他人就能访问我们的www服务了。

(2)检查seLinux是否打开

在前面的章节,我们已经讲述过seLinux的含义和功能,它可以最大限度地保证Linux系统的安全,但是seLinux有时也会给Linux下软件的运行带来一些问题,这些问题大部分是对seLinux不了解造成的,为了迅速定位问题,最简单的方法是先关闭seLinux,然后测试软件运行是否正常,这不是个好方法,但是对于判断问题往往是很有用的,seLinux是个很好的安全访问控制软件,可是如果你还不能熟练运用seLinux访问控制策略的话,还是建议将它暂时关闭,等到对Linux有了更深入的认识后,再开启seLinux不失为一个明智的策略。

6.检查局域网主机之间联机是否正常

通过上面5步的检查,Linux系统自身的问题已经基本排除,接下来需要扩展到Linux主机之外的网络环境,检查网络之间的连通是否存在故障,可以先通过ping命令测试局域网主机之间的连通性,然后ping网关,检测主机到网关的通信是否正常。

任何网络故障的出现,都是有原因的,只要我们根据上面给出的解决问题流程,逐一排查,99%的问题都能得到很好的解决。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/24076.html