APP下载

排查Apache无法启动故障

2018-03-04

网络安全和信息化 2018年8期
关键词:命令进程端口

故障现象

单位的一台Apache服务器在一次意外宕机,重新启动后,管理员执 行“/usr/local/apache2/bin/apachectrl start”命令,却出 现了“Permission Denied:make_cock:cound not bind to address[::]:80,no listening sockets available,shutdown,Unable to open logs”之类的提示,造成无法启动Apache,在其上运行的网站平台也无法正常使用。执行“whoami”命令,显示当前的账户名为“gauser”。执行“cat /usr/local/apache2/conf/httpd.conf |grep Listen”命 令,在Apache配置文件中显示监听端口为80。切换到“/usr/local/apache2”目 录,执行“ls -al”命令,查看相关目录和文件的用户均为“gauser”,其权限都是“rwx------”,这说明权限设置没有问题。

故障排查

既然默认的80端口无法使用,那只有更换端口进行尝试。执行“sed -i 's/Listen 80/Listen 8080/' /usr/local/apache2/conf/httpd.conf”命令,将端口修改为8080。再次执行“/usr/local/apache2/bin/apachectrl start”命令,没有出现以上报错提示。但是执行“ps -ef|grep httpd”命令,检测httpd进程信息,在与上述启动命令对应的进程数量过少,说明Apache的启动依然存在问题。看来,只有打开Apache的日志,才能发现隐藏的问题。

执 行“cat /var/log/apache2/error.log”命令,在日志中根据时间进行查找,发现存在“pid file /usr/local/apache2/logs/httpd overwritten --Unclean shutdown of previous Apache run?”,“Permission denied:could not create /usr/local/apache2/logs/http.pid”,“could not log pid to file /usr/local/apache2/logs/httpd.pid”等错误信息。根据这些可以判断,问题是因为名为“httpd.pid”的文件权限不足引发的。

该文件存在于Apache的日志目录下,主要作用是记录进程的ID信息,该文件不能为空。执行“ll /usr/local/apache2/logs/httpd.pid ”命令,显示该文件的拥有者是Root账户。因为当前的账户名为“gauser”,执 行“chown gauser /usr/local/apache2/logs/httpd.pid”命令,将该文件的拥有者设置为当前用户。执行“/usr/local/apache2/bin/apachectrl start”命 令,Apcche顺利启动,执行“ps-ef|grep httpd”命令,和httpd相关的进程没有问题。因为上面将Apache的端口修改为8080,所以可以顺利启动,但是如果设置为80就会出现问题。

故障解决

对于TCP 80端口来说,实际上属于系统保留端口。在Linux中从0到1023端口,都是系统保留端口,这些端口主要用于关联常用的服务。例如80端口和HTTP服务对应,22端口和SSH服务对应等。出于安全性的考虑,对于这些保留端口,系统是要进行必要的安全控制的,即只允许Root账户控制这些端口的使用权,对于普通的账户,是不允许其随意绑定保留端口的。对于从1024到49151的端口,是允许普通用户使用的,即允许去将该范围内的端口和特定的应用程序绑定。

对于从49152到65535的端口,属于系统动态分配端口,只要有进程或者程序需要和外界建立连接时,系统就会从中选择可用的端口进行分配,当进程或程序运行结束,就会将该端口释放。综合以上分析不难看出,因为“gauser”是普通账户,所以无法使用系统80这一系统保留端口。如果使用Root账户启动Apache,虽然可以绑定80端口,但是存在一定的安全隐患,一旦黑客利用潜在的Apache漏洞入侵得手,黑客就会拥有Root权限,这对系统危害很大。最好的方法是,对Apache目录下的httpd文件的SUID属性进行修改,通过合理的授权来解决问题。SUID是一种特殊权限,设置了SUID的程序文件,在用户执行该程序时,用户的权限是该程序文件属主的权限。例如,程序文件的属主是Root,那么执行该程序的用户就将暂时获得Root账户的权限。

执 行“chmod u+s /usr/local/apache2/bin/httpd”,“chown Root/usr/local/apache2/bin/httpd”命令,让gauser账户在执行httpd文件时,拥有该文件属主的权限。执行“vi /usr/local/apache2/conf/httpd.conf”命令,在 Apache配置文件中将“User”项的值设置为“gauser”,将“Group”项的值设置为“gauser”,这表示运行httpd服务的用户和组均为“gauser”账户,主要作用是给Web应用降权。执行“ps -ef|grep httpd”命令,在进程列表第一行中的和“/usr/local/apache2/bin/apachectrl start”命令对应的账户名为Root,说明Apache是以Root账户身份启动,在列表其余行使用的依然是“gauser”账户,说明启动Apache时依然使用到了“gauser”账户,只是和该账户关联的是一些Apache子进程而已。

猜你喜欢

命令进程端口
只听主人的命令
一种端口故障的解决方案
硬件解耦三端口变换器的软开关分析与仿真
债券市场对外开放的进程与展望
改革开放进程中的国际收支统计
交换机生成树安全
移防命令下达后
这是人民的命令
卫星三端口DC-DC变换器技术综述
社会进程中的新闻学探寻