分享Apache环境禁止目录浏览的方法
在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
这样经成功地禁用了在该站点上的直接浏览。如果要禁用其他网站的目录列表,可以重复此
- merge语句导致的CPU使用率过高的优化(r7笔记第4天)
- 由dual导致的一个潜在的监控问题(r7笔记第3天)
- 剑指Offer——编程题的Java实现
- Python中if __name__ == "__main__": 的作用
- 每周算法练习——大数的乘法问题
- Java基础-25(01)图形用户界面编程GUI
- 每周算法练习——n皇后问题
- dg broker配置的问题及分析 (r7笔记第22天)
- 备库搭建中的一波三折(r7笔记第21天)
- Java基础-25(02)图形用户界面编程GUI
- 每周算法练习——最近对问题
- Java基础-25(03)图形用户界面编程GUI
- 数据结构和算法——用动态规划求解最短路径问题
- 备库报警邮件的分析案例(一) (r7笔记第14天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- C语言——for循环和while循环的效率区别——类似哨兵思想
- 机器学习(八)—Apriori算法
- 机器学习(九)—FP-growth算法
- LeetCode — (1)
- Django初体验——搭建简易blog
- Python开发简单记事本
- 在stm32开发可以调用c标准库的排序和查找 qsort bsearch
- Python解析excel文件并存入sqlite数据库
- python学习总结
- C语言calloc()函数:分配内存空间并初始化——stm32中的应用
- 提升代码的运算速度——代码优化的方法总结
- 自己实现sizeof+大小端测试
- 写一个程序检查一个整数是2的幂
- 持续部署入门:基于 Kubernetes 实现滚动发布
- Python源码分析(一)