Apache httpd安全配置标准

1、目的

本标准是信息系统安全技术标准的一部分,主要目的是根据信息安全管理政策要求,为我司apache配置提供安全标准。php

2、范围

本规范适用于我司全部apache。html

3、内容

3.1 版本

使用较新的稳定版本java

3.2 启动用户

使用非root账号启动,例如web

User daemon
Group daemon

3.3 加载模块

只加载必须的模块,无关模块所有注释或删除。apache

3.4 日志

记录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

3.5 php加载方式

如需支持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>

3.6 预防php文件名解析漏洞

在全局配置(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

3.7 目录权限

apache启动账号应对web目录下全部文件及子目录无写权限,若是web应用需写日志文件,不该该放在web目录下。

标准配置:apache以nobody/daemon/apache账号启动,WEB目录下全部文件及子目录的属主应该为root.root,权限为0755(-rwxr-xr-x)。

3.8 可写目录禁止执行

若是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,子目录的权限应该跟父目录彻底一致。

注意:这里指的不是去除文件系统rwx权限中的x,文件系统权限中的x能够保留,无危害。
3.9 阻止用户修改系统设置

应在每一个Directory下面增长以下配置,阻止用户经过.htaccess修改系统安全设置:

<Directory "*">
    AllowOverride None
    ....
</Directory>

3.10 禁止目录浏览

应在每一个Directory下面删除"Indexes",禁止目录浏览。或者设置为:

<Directory "*">
    Options -Indexes
    ....
</Directory>

注意:前面有"-"号,表示禁用。

3.11 删除默认文件

删除默认的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>

注意:绝对路径可能有区别,但配置是相似的。

3.12 禁止访问.ht规则文件

这个配置默认就有,保持不变便可。相似以下:

<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
</Files>

有些版本的相似以下:

<FilesMatch "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</FilesMatch>

3.13 关闭apache版本号

在http头里面默认会显示apache版本号,经过以下配置来关闭:

ServerTokens Prod
ServerSignature Off

3.14 禁止Trace请求

在全局配置(server config)里面把Trace禁用,默认是启用,配置以下:

TraceEnable Off

注意:这个功能在1.3.34,2.0.55及以后的版本才存在

相关文章
相关标签/搜索