[TOC]
快速入门
描述:Apache起初由伊利诺伊大学香槟分校的国家超级电脑应用中心(NCSA)开发,此后Apache Httpd被开放源代码团体的成员不断的发展和加强,从上个世纪90年代开始它的市场占有率就超过了50%。
如今虽然它的使用率有些下降但是仍是世界使用排名第一的 Web 服务器软件,它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的 Web服务器端软件之一。
安全加固
Apache自身的安全性是很高的,但是人为的错误设置会导致Apache产生安全问题 。
1.服务器运行权限(注意操作系统环境) 描述:Linux中默认给予Apache的是一个www-data账户,执行命令:lsof -i:80 或者:ps aux|grep apache|grep -v grep
代码语言:javascript复制
- 第一行是Apache主进程以root权限运行的,因为Apache的Web端口是80或443,而在Linux中开启小于1024的端口需要root权限,所以主进程必须以root权限运行。
- 第二行起为Apache子进程,其执行用户为www-data,www-data是Ubuntu中运行Web服务的默认用户,权限较低。
比如当我们使用一个shell.php去执行添加文件测操作就会由于权限问题而失败。
WeiyiGeek.
Linux操作
如果是一个高权限用户可以尝试更改为低权限用户,Apache的运行用户的配置信息可以在 /etc/apache2/apache2.conf 文件中看到,提示用户和用户组设置在 /etc/apache2/envvars
文件中
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
然后在到/etc/apache2/envvars文件中设置即可
代码语言:javascript复制export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
Windows操作 由于windows机器默认是administrator权限所以第一步需要进行对Apache降权或者说设置一个安全的执行账户
代码语言:javascript复制net user apache /add
net localgroup guests apache /add #将Apache的用户组改为Guests,注意要将Apache目录下的日志的可写权限赋给Guests账户。
打开·Apache服务属性
中的登录选项卡
,点选此账户,写入刚才添加的用户名和密码,最后重启服务
WeiyiGeek.
注意事项:
- Windows中Apache安装完成后默认是administrator权限,如果使用此权限运行Web服务一旦攻击者拿下webshell就很容易控制整个服务器
2.目录及文件权限 描述:Linux在默认情况下如果当前目录不存在默认文件(比如index.html),Apache会列出当前目录。
其权限设置位置在Apache配置文件httpd.conf中
代码语言:javascript复制$vim /etc/httpd/conf/httpd.conf
<Directory /var/www/>
Options Indexs FollowSymLinks
AllowOverride None
Rquire all granted
<Directory>
#Indexes:可以在该目录中使用符号连接,从漏洞角度上讲也就是目录遍历漏洞,操作这个参数即可进行权限控制。
#FollowSymLinks:允许目录浏览,当客户仅指定要访问的目录,但没有指定要访问目录下的哪个文件,而且目录下不存在默认文档时,Apache以超文本形式返回目录中的文件和子目录列表(虚拟目录不会出现在目录列表中)。
加固后的再次进行访问时,另外也Linux中可以通过Linux自带的chmod命令进行权限控制
代码语言:javascript复制$vim /etc/httpd/conf/httpd.conf
<Directory /var/www/>
Options ollowSymLinks
AllowOverride None
Rquire all granted
<Directory>
WeiyiGeek.
补充:对于Windows防止目录列出的与上面差不多,主要说明windows自带的权限控制,还是以访问flag.txt文件为例,默认情况下 想要设置单个文件对其的访问:右键==>属性==>安全(前面已经将Apache添加Guests用户组)
WeiyiGeek.
3.错误重定向
描述:错误重定向是指通过在Web程序出错令其跳转到指定的显示界面,首先可以通过设置.htaccess文件达到目的,但是windows中正常情况下无法直接创建.xxx的文件,所以要是使用DOS命令echo 1 > .htaccess
,然后在用其他编辑器编辑.htaccess文件即可,
比如设置404错误重定向,在.htaccess文件中添加:ErrorDocument 404 /404.html
代码语言:javascript复制$vim .htaccess
ErrorDocument 404 /404.html
#然后在同目录下创建404.html文件
<html><h1>Page Not Found</h1></html>
然后随机访问一个不存在的文件,则会自动跳转到404.html
WeiyiGeek.
或者采用精准匹配,通过配置httpd.conf文件也可以达到跳转的目的,还是在刚才添加设置目录权限的地方
代码语言:javascript复制DocumentRoot "/var/www/html"
<Directory "/var/www">
Options Indexs FollowSymLinks ExecCGI
RewriteEngine On
RewriteRule "tttt.html$" "404.html"
Order allow,deny
AllowOverride All
Allow from all
Require all granted
</Directory>
比如对于本条正则当访问tttt.html时会跳转到404.html界面。
- RewriteEngine On:开启跳转
- RewriteRule “tttt.html$” “404.html” 第一个参数是一个正则 第二个参数使要跳转到的相对地址;也就是说当符合正则时进行跳转。
WeiyiGeek.
4.安全日志
Apache日志常规路径是,注意采用源码安装或者系统安装软件安装以及不同的Linux版本可能位置
不一样;
采用的变量${APACHE_LOG_DIR},且日志记录是有等级
- ubuntu:/var/log/apache2/
- Centos:/etc/httpd/logs/
日志级别的详细分类:
WeiyiGeek.
其中的压缩文件为Apache自动压缩以节省空间:
- other_vhosts_access.log 虚拟主机日志
- access.log 成功访问记录文件
- error.log 失败访问以及启动报错记录文件,一般格式为”[日期和时间] [错误等级] 错误消息”
httpd.conf定义的日志文件格式在:
代码语言:javascript复制192.168.228.1 - - [22/Sep/2017:05:26:41 -0700] "GET /flag.txt HTTP/1.1" 403 515 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0"
参数解释:
- 远端主机:192.168.228.1
- 远端登录名:-
- 远程用户名:-
- 访问时间:[22/Sep/2017:05:26:41 -0700]
- HTTP请求:GET /flag.txt HTTP/1.1
- HTTP状态码:403
- 发送的字节数:515
- Referer:-
- User-Agent:”Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0”