Apache是怎样启动的

时间:2022-05-03 16:10:03

原文连接http://www.linuxidc.com/Linux/2012-07/64252.htm
和监控部门提到一个问题,开发部门的人启动Apache是使用root启动,但是监控部门的人认为不正常,用root启动有安全隐患。如果Apache有漏洞,服务器就被黑了。
这个问题,其实我在上一家公司也遇到同样想法的人,使用root启动究竟有没有安全隐患?
我在一台RHEL4上编译安装了Apache,用了全默认参数,使用下面命令启动
/usr/local/apache/bin/apachectl start
看系统里的情况
[root@localhost conf]# ps -ef | grep httpd | grep -v grep
root     32485     1  0 21:50 ?        00:00:00 /usr/local/apache/bin/httpd -k start
daemon   32486 32485  0 21:50 ?        00:00:00 /usr/local/apache/bin/httpd -k start
daemon   32487 32485  0 21:50 ?        00:00:00 /usr/local/apache/bin/httpd -k start
daemon   32488 32485  0 21:50 ?        00:00:00 /usr/local/apache/bin/httpd -k start
daemon   32489 32485  0 21:50 ?        00:00:00 /usr/local/apache/bin/httpd -k start
daemon   32490 32485  0 21:50 ?        00:00:00 /usr/local/apache/bin/httpd -k start
[root@localhost conf]# cat httpd.conf | grep daemon
# httpd daemons, you will need to change at least LockFile and PidFile.
User daemon
Group daemon    # socket used to communicate with the CGI daemon of mod_cgid.
试下把daemon改成root看看
[root@localhost conf]# /usr/local/apache/bin/apachectl start
Syntax error on line 65 of /usr/local/apache/conf/httpd.conf:
Error:\tApache has not been designed to serve pages while\n\trunning as root.  There are known race conditions that\n\twill allow any local user to read any file on the system.\n\tIf you still desire to serve pages as root then\n\tadd -DBIG_SECURITY_HOLE to the CFLAGS env variable\n\tand then rebuild the server.\n\tIt is strongly suggested that you instead modify the User\n\tdirective in your httpd.conf file to list a non-root\n\tuser.\n
[root@localhost conf]# cat httpd.conf | grep root
# httpd as root initially and it will switch.  
User root
Group root
可以看到,Apache根本不给你启动!
根据Apache的文档里这么描述
   如果配置文件中Listen定义的是默认的80端口(或1024以下),那么启动Apache将需要root权限以将它绑定在特权端口上。一旦服务器开始启动并完成了一些诸如打开日志文件之类的准备操作,它将创建很多子进程来完成一些诸如侦听和回应客户端请求的工作。
   httpd主进程仍然以root用户的权限运行,而它的子进程将以一个较低权限的用户运行。这将由你选择的多路处理模块进行控制。
    所以,用root启动Apache并不存在安全问题。非root用户不能启动1024以下的端口,所以非root启动Apache不能启动80,443端口,到时候再用iptable做跳转就是很麻烦的事情,而且iptables性能也是问题。
像bind这样的程序使用的是chroot的方式来解决权限控制问题,用root启动一样没有安全问题。
有些时候,这些想法都是人传人,大多数人不仔细想想,找找内因。