本标准是信息系统安全技术标准的一部分,主要目的是根据信息安全管理政策要求,为我司apache配置提供安全标准。php
本规范适用于我司全部apache。html
使用较新的稳定版本java
使用非root账号启动,例如web
User daemon Group daemon
只加载必须的模块,无关模块所有注释或删除。apache
记录access log和error log,按日期切分,至少按天切分。示例以下:安全
ErrorLog "| /usr/local/apache/bin/rotatelogs /var/log/httpd/default.qunar.com/%Y-%m-%d_error.log 86400 480"CustomLog "| /usr/local/apache/bin/rotatelogs /var/log/httpd/default.qunar.com/%Y-%m-%d_access.log 86400 480" common
如需支持php,应以模块方式加载,示例以下:app
LoadModule php5_module modules/libphp5.so AddType application/x-httpd-php .php
禁止以CGI方式加载php,错误示例:ide
ScriptAlias /php/ "/usr/local/php/"AddType application/x-httpd-php .php Action application/x-httpd-php "/php/php-cgi"
禁止以FASTCGI方式加载php,错误示例:spa
<IfModule fastcgi_module> ScriptAlias /fcgi-bin/ "/usr/local/apache2/fcgi-bin/" FastCgiServer /usr/local/apache2/fcgi-bin/php-cgi -processes 10 AddType application/x-httpd-php .php AddHandler php-fastcgi .php Action php-fastcgi /fcgi-bin/php-cgi <Directory "/usr/local/apache2/fcgi-bin/" > SetHandler fastcgi-script Options FollowSymLinks Order allow,deny Allow from all </Directory> </IfModule>
在全局配置(server config)里面增长以下配置日志
<Files ~ "\.php."> Order Allow,Deny Deny from all </Files>
注意:这个配置要放在全局,不能放在"<VirtualHost *></VirtualHost>"。放在全局,将对全部VirtualHost生效。
上述配置将拦截相似这样的URL请求(若是不拦截,这些文件将以php类型执行):
/x.php1 /x.php2 /x.php3 /x.php4 /x.php5 /x.phps /x.php.jpg
apache启动账号应对web目录下全部文件及子目录无写权限,若是web应用需写日志文件,不该该放在web目录下。
标准配置:apache以nobody/daemon/apache账号启动,WEB目录下全部文件及子目录的属主应该为root.root,权限为0755(-rwxr-xr-x)。
若是web应用确实须要支持文件上传功能,或者因其它缘由须要对WEB目录有写权限,应在配置文件里面限制可写目录无脚本执行权限。假设可写目录绝对路径为"/var/www/html/upload",配置示例以下:
<Directory "/var/www/html/upload"> AllowOverride None <Files ~ "\.php"> Order Allow,Deny Deny from all </Files> .... </Directory>
假设web服务启动账号为nobody,可写目录是/var/www/html/upload,正确的权限设置应该是:
chown -R nobody:nobody /var/www/html/upload && chmod -R 0755 /var/www/html/upload
便可写目录的属主应该为web启动账号,权限应该为0755,子目录的权限应该跟父目录彻底一致。
应在每一个Directory下面增长以下配置,阻止用户经过.htaccess修改系统安全设置:
<Directory "*"> AllowOverride None .... </Directory>
应在每一个Directory下面删除"Indexes",禁止目录浏览。或者设置为:
<Directory "*"> Options -Indexes .... </Directory>
注意:前面有"-"号,表示禁用。
删除默认的icons、cgi-bin和manual,在配置文件中删除相似这些项:
Alias /icons/ "/var/www/icons/"<Directory "/var/www/icons"> * </Directory> ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"<Directory "/var/www/cgi-bin"> * </Directory> AliasMatch ^/manual(?:/(?:de|en|es|fr|ja|ko|pt-br|ru))?(/.*)?$ "/usr/local/apache-2.2.3.cache/manual$1"<Directory "/usr/local/apache-2.2.3.cache/manual"> * </Directory>
注意:绝对路径可能有区别,但配置是相似的。
这个配置默认就有,保持不变便可。相似以下:
<Files ~ "^\.ht"> Order allow,deny Deny from all </Files>
有些版本的相似以下:
<FilesMatch "^\.ht"> Order allow,deny Deny from all Satisfy All </FilesMatch>
在http头里面默认会显示apache版本号,经过以下配置来关闭:
ServerTokens Prod ServerSignature Off
在全局配置(server config)里面把Trace禁用,默认是启用,配置以下:
TraceEnable Off
注意:这个功能在1.3.34,2.0.55及以后的版本才存在