Apache配置中的安全问题

Apache是非常流行的Web服务器,近几年虽然Nginx大有取代之势,但Apache仍占有不少的使用量。本文介绍生产中需要注意的一些安全配置,帮助我们搭建更稳定的Web服务。

1、Apache的安全配置。

1.1 禁止服务器广播敏感信息。

将 ServerSignature 设置为 Off,避免暴露Apache软件的版本号等信息。

禁用目录浏览选项,在Directory中,将 Indexes 去掉。

禁用符号链接追踪功能,避免恶意用户通过符号链接访问系统文件。禁用 FollowSymLinks 选项。如有有些用户必须使用符号链接的功能,可以使用 SymLinksIfOwnerMatch 的选项。

1.2 Apache的运行用户

最小权限原则。

记住一定不要用 root 用户运行 Apache,使用 www 用户也并非十分安全,确保 Apache 运行在一个具有有限权限的用户下。

一般情况下,最好让Apache运行在一个单独的用户和用户组下,该用户一定不能具有SSH的登录权限。

1.3 只安装所需要的功能模块

有一些默认打开的模块,使用频率很低,可以关掉,避免不必要的危险:userdir、autoindex、status、env、setenvif、cgi、actions、negotiation、include、filter、version等。

安装Apache后,可以通过./httpd -l 查看安装的模块。

如果不需要安装,在编译阶段可以通过configure命令指定。

1.4 为conf和bin文件夹设置合适的权限。

一般情况下,只有系统管理员才能够对conf文件进行查看和修改,执行bin下的命令,应该禁止管理员以外的用户查看这些文档。

1.5 禁止.htaccess

在目录的配置中,添加 AllowOverride None,例如:

1
2
3
4
5
6
<Directory />
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>

2、PHP的安全配置。

2.1 隐藏PHP。

expose_php = Off

2.2 关闭错误提示

display_errors = Off

2.3 禁用危险的系统函数

disable_functions = system,exec,shell_exec,passthru,popen,fsockopen,chmod,rmdir,opendir

这个选项只能在 php.ini 中配置,无法在单独的虚拟机上配置

2.4 限制可以打开的目录

这个配置的目的相当于为项目创建一个沙盒。

在 php.ini 中配置 open_basedir 参数

3、其他方法

3.1 勤打补丁

定期查看是否有软件的升级补丁,发生紧急漏洞修复补丁时,在第一时间为自己的系统安装补丁。

参考资料:

1、Apache安全配置
2、PHP手册
3、Apache安全设置
4、An Apache Trick to Mitigate Shell File Attack
5、构建安全的Apache+Mysql+PHP的Web服务器
6、Apache安全设置
7、10 Tips to Secure Your Apache Web Server on Linux/Unix

cocowool

A FULL STACK DREAMER!