apache启动报错原因和解决方案

一.现象

今天项目搭建测试环境时,启动apache报错,错误日志如下:

[wolf@ccbudev150133x bin]$ ./startws 
Start server copy ...... OK!
Start JBoss configuration copy ...... OK!

[color=red](13)Permission denied:[/color] make_sock: could not bind to address [::]:80
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
/home/wolf/legal/intl-legal/deploy/bin/apachectl start: httpd could not be started
HTTP Start in 19 seconds.

二、分析

从错误现象可以看出,apache启动监听80端口失败,原因是因为Permissiondenied,权限不够,httpd执行需要root权限,只需给apache启动脚本httpd授权即可。执行下面两条命令即可:

1. chmod u+s httpd
2. chown root httpd

三、我的弯路

出现这个问题后,我执行了第一条命令,重试,问题依旧。在我原来的理解中,+s操作是给当前用户赋予root执行权限,所以误以为该文件已经是root执行权限,进而从其他方面排查原因。兜圈了一小时后,仅人提点,才发现原来对"chmod+s"理解有误。

四、chmod命令

执行两条命令之前httpd文件特性:

-rwxr-xr-x 1 wolf admin   2429431 Nov  4 13:35 httpd

执行两条命令之后:

-rwsr-xr-x 1 root admin 2429431 Nov  4 13:35 httpd

chmod命令+s参数解释如下:

s在文件执行时把进程的属主或组ID置为该文件的文件属主。

原来只有wolf这个用户可以执行httpd这条命令,u+s后其他用户都可享有文件属主的权限。通过chown将文件属主调整为root,这样其他用户即可以root权限操作该文件。

五、示例

通常开发过程中需要编辑/etc/hosts文件,每次编辑以sudo方式执行,每次都要输入密码令人不爽,通过执行以下命令即可解决:

chmod u+s /etc/hosts

相关推荐