LANMP安全配置之Apache安全配置

0x00 前言

主要是参考了《PHP Web安全开发实战》一书,再百度了一些知识点进行补充
抱着了解的心态学习了一下 之后深入学习时再补充笔记吧~~

0x01 屏蔽版本信息

关闭步骤:
(1)打开Apache配置文件httpd.conf
a.找到ServerRoot OS,修改为ServerRoot ProductOnly
b.找到ServerSignature On,修改为ServerSignature Off
(2)重启Apache

0x02 目录权限隔离

Apache安装后会产生ServerRootDocumentRootScripAliasCustomlogErrorlog目录,这些目录分别有对应的功能,所以需要对它们设置单独的权限,具体权限配置如下。
(1)ServerRoot目录只有具有管理权限的用户才能访问
(2)DocumentRoot能够被管理Web站点内容的用户、使用Apache服务器的Apache用户(组)访问
(3)只有Admin组的用户可以访问日志目录

0x03 关闭默认主机

在安装好Apache后一般会有一个默认的主机目录,这个目录可以不通过域名访问IP直接访问到,主机中可能会存在一些服务器敏感信息。
因此换件搭建好了后记得关闭默认主机,只开放自定义的主机以避免留下安全隐患。
默认如下:

改虚拟主机的话就只能访问一个域名
但打开虚拟主机配置文件httpd-vhosts.conf就能配置多个网站域名
并且在主配置文件下打开虚拟主机配置文件,主配置文件就失效了

0x04 低权限运行

Windows系统下,Apache默认由root权限安装、运行。
为避免风险,要让Apache在低权限下运行。
打开httpd.conf,在文件中找到UserGroup

User和Group表示运行httpd服务的用户和组,主要是给网站应用降权的。apache默认是用daemon来运行的,建议降权,所以我得改改了。
改为:

User nobody; Group# -1; 

具体的降权操作可参考:
windows服务器下Apache 的降权

0x05 防止用户自定义设置

在httpd.conf进行以下设置,阻止用户建立、修改.htaccess文件,防止用户超越能定义的系统安全性。

也就是这三个参数分别设置成NoneNoneall

  • Options是控制特定目录将启用哪些服务器特性
  • AllowOveride参数就是指明Apache服务器是否去找.htacess文件作为配置文件,如果设置为none,那么服务器将忽略.htacess文件,如果设置为All,那么所有在.htaccess文件里有的指令都将被重写。
  • Allow from all 用来控制目录和文件的访问授权。
    详见Apache的Order Allow,Deny 配置详解

顺便将Options中参数含义都列出来学习一下

All 准许以下除MultiViews以外所有功能
MultiViews 允许多重内容被浏览,如果你的目录下有一个叫做foo.txt的文件,那么你可以通过/foo来访问到它,这对于一个多语言内容的站点比较有用
Indexes 若该目录下无index文件,则准许显示该目录下的文件以供选择
IncludesNOEXEC 准许SSI,但不可使用#exec和#include功能
Includes 准许SSI
FollowSymLinks 在该目录中,服务器将跟踪符号链接。注意,即使服务器跟踪符号链接,它也不会改变用来匹配不同区域的路径名,如果在;标记内设置,该选项会被忽略
SymLinksIfOwnerMatch 在该目录中仅仅跟踪本站点内的链接
ExecCGI 在该目录下准许使用CGI

0x06 禁止显示目录

在默认情况下,如果你在浏览器中输入地址:http://localhost/,文件目录里有index.html,浏览器就会显示index.html的内容,如果没有,就会显示文件根目录下的文件和子目录。
这些信息在某种情况下很有可能会造成数据泄露或被其他方式攻击。
下图为phpstudy的一个目录的配置

Indexes的作用是当该目录下没有Index文件时,就显示目录结构。
所以只要将Indexes去掉,就可以禁止Apache显示该目录结构。

睡觉睡觉~