分享Apache环境禁止目录浏览的方法

标签

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

这样经成功地禁用了在该站点上的直接浏览。