Apache Web服务器安全配置

尽管现在购买的云服务器很多都有一键 web 环境安装包,但是如果是自己配置 web 环境则需要对各种安全配置十分了解,今天我们就来尝试这做好 web 服务器安全配置。这里的配置不尽完善,若有纰漏之处还望指出。

修改 Apache 配置文件 http.conf

以专用的 apache 用户运行

一般情况下,Apache 是由 Root 来安装和运行的。如果 Apache Server 进程具有 Root 用户特权,那么它将给系统的安全构成很大的威胁,应确保 Apache Server 进程以最可能低的权限用户来运行。
1.window 系统中创建 apache 用户
在命令行中输入

net user 查看系统已经存在的用户
net user apache 131978jesse /add 添加apahce用户
net localgroup apachegroup /add 添加apachegroup用户组
net localgroup apachegroup apache /add 将apache添加进apachegroup用户组

2.给予 apache 用户读取和执行所有文档和脚本目录(例如:htdocs 和 cgi-bin)的权限。 对 Apache 的 logs 目录具有读/写/删除(RWD)的权限。
3.在 http.conf 文件中修改以下内容:

User apache
Group apachegroup

4.在 service.msc 服务中选择 Aapche 属性,登录账号改为 apache,重启 apache 即可

apache 目录禁止访问

Indexes  的作用就是当该目录下没有  index.html 文件时,就显示目录结构。
默认 apache 在当前目录下没有 index.html 入口就会显示目录。让目录暴露在外面是非常危险的事,如下操作禁止 apache 显示目录:

Options FollowSymLinks

将 Options Indexes FollowSymLinks 中的 Indexes  去掉,就可以禁止  Apache  显示该目录结构。

阻止用户修改系统设置

在 Apache 服务器的配置文件中进行以下的设置,阻止用户建立、修改 .htaccess 文件,防止用户超越能定义的系统安全特性。

AllowOveride None
Options None
Allow from all

然后再分别对特定的目录进行适当的配置。

apache 隐藏版本信息

ServerSignature Off
ServerTokens Prod

自定义错误页面

ErrorDocument 400 /custom400.html
ErrorDocument 401 /custom401.html
ErrorDocument 403 /custom403.html
ErrorDocument 404 /custom404.html
ErrorDocument 405 /custom405.html
ErrorDocument 500 /custom500.html

删除如下 apache 的默认文件

删除默认的HTML文件:   # apache网页根目录htdocs下的html文件
删除默认的icons文件:  # apache安装目录下的icons文件夹及里面的文件
删除默认的的CGI脚本:  # apache安装目录下的cgi-bin文件夹及里面的文件
删除Apache说明文件:   # apache安装目录下的manual文件夹及里面的文件以及安装目录下的其他介绍性文件

使用 rotatelogs 每隔一天记录一个日志

CustomLog "|bin/rotatelogs.exe logs/access.log 86400 480" combined

rotatelogs logfile [ rotationtime [ offset ]] | [ filesizeM ]
logfile:它加上基准名就是日志文件名。如果 logfile 中包含’%’,则它会被视为用于的 strftime(3)的格式字串;否则,它会被自动加上以秒为单位的.nnnnnnnnnn 后缀。这两种格式都表示新的日志开始使用的时间。
rotationtime:日志文件回卷的以秒为单位的间隔时间,86400 表示一天,即每天生成一个新的日志文件。
offset:相对于 UTC 的时差的分钟数。如果省略,则默认为 0,并使用 UTC 时间。比如,要指定 UTC 时差为-5 小时的地区的当地时间,则此参数应为-300,北京时间为+8 时间,应设置为 480。这样日志里的时间才会和服务器上的时间一致,方便查看日志。
filesizeM:指定回卷时以兆字节为单位的后缀字母 M 的文件大小,而不是指定回卷时间或时差。

修改 PHP 配置文件 php.ini

将时区修改为东八区北京时间

date.timezone = “PRC”

响应头中 y 隐藏 PHP 版本信息

expose_php = Off

禁止相关函数

disable_functions = phpinfo, get_cfg_var
safe_mode = On //开启安全模式,这个开了,可能会有些 php 功能没办法使用了