分享Apache环境禁止目录浏览的方法
发布时间:
本文字数:767 字 阅读完需:约 2 分钟
在Apache环境中,文件目录列表默认是允许的,也就是说,如果没有默认索引文件,如index.php或index.html,那么访问域名时则会显示目录的内容。在网站上线之后,不建议启用目录浏览,因为它可能导致网站信息泄漏,并帮助攻击者确定网站或Web应用程序是如何构造的,并增加攻击面。本文简单说说在Ubuntu20.04系统中测试和禁用Apache目录浏览。
实验环境
Ubuntu20.04系统、LAMP环境,网站www.appjzw.com,sudo用户权限。
创建测试目录
使用SSH登陆远程服务器,然后在根目录下创建一个的测试目录,命令如下:
$ sudo mkdir /var/www/html/test
在test目录下创建两个子目录。
$ sudo mkdir /var/www/html/test/sub-directory_1 $ sudo mkdir /var/www/html/test/sub-directory_2
将两个文件添加到test目录。
$ sudo touch /var/www/html/test/file1.txt $ sudo touch /var/www/html/test/file2.txt
打开网页浏览器并访问下面的URL。请将appjzw.com替换成你自己的域名或服务器IP地址**。**
http://www.appjzw.com/test
如果启用了Apache目录列表,您应该会看到您创建的所有文件和子目录的列表。
在Apache配置中禁用
打开**/etc/apache2/apache2.conf配置文件**。
$ sudo nano /etc/apache2/apache2.conf
找到下面的内容。
... <Directory /var/www/> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> ...
将下面的行:
Options Indexes FollowSymLinks
更改为:
Options -Indexes +FollowSymLinks
替换完成之后,应该是这样的。
... <Directory /var/www/> Options -Indexes +FollowSymLinks AllowOverride None Require all granted </Directory> ...
默认情况下,Indexes选项中未检测到默认索引文件时,Apache将会显示文件和目录列表。而在**/var/www**目录的前缀Indexes中使用连字符的选项,表示将禁止显示文件和目录列表。 保存并关闭文件。然后,重新启动Apache Web服务器。
$ sudo systemctl restart apache2
尝试访问测试目录的URL。请将appjzw.com替换成你自己的域名或服务器IP地址**。**
http://www.appjzw.com/test
这一次访问时将会显示禁止载入,也就不会将网站的文件和目录呈现出来。
虚拟主机禁用方法设置
如果你有多个网站托管在同一个Apache Web服务器上,则可以通过单独编辑每个网站的虚拟主机配置文件来禁用目录列表。 通过运行下面的命令,列出Apache Web服务器上可用的站点。
$ sudo ls -lsa /etc/apache2/sites-available
下面的输出可能是不同的,这取决于在服务器上托管的网站。
4 drwxr-xr-x 2 root root 4096 Jul 15 12:19 . 4 drwxr-xr-x 8 root root 4096 Jul 16 11:33 .. 4 -rw-r--r-- 1 root root 1332 Apr 13 20:19 000-default.conf 8 -rw-r--r-- 1 root root 6338 Apr 13 20:19 default-ssl.conf
获取要编辑的网站的配置文件名(例如000-default.conf打开文件。
$ sudo nano /etc/apache2/sites-available/000-default.conf
这时候文件的内容将在某种程度上类似于下面所示的内容。
<VirtualHost *:80> ... #ServerName www.appjzw.com ##这个替换你自己的网站
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
... </VirtualHost>
通过添加<Directory /var/www/>...</Directory>
备选方案如下:
<VirtualHost *:80> ... #ServerName www.appjzw.com ##这个替换你自己的网站
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
... <Directory /var/www/> Options -Indexes +FollowSymLinks AllowOverride None Require all granted </Directory> </VirtualHost>
保存并关闭文件。然后,重新启动Apache Web服务器。
$ sudo systemctl restart apache2
这样经成功地禁用了在该站点上的直接浏览。