站点运营

站点运营:文件权限与目录列表自查,别让备份文件和隐藏目录对外公开

服务器上常见的意外暴露,往往来自备份包、编辑器临时文件、版本控制目录和开着索引的文件夹。本文给出一套可执行的自查方法:如何判断目录会不会列文件、可疑路径怎么逐个验证、文件权限怎么设、以及把清理动作写进上线流程与巡检节奏。

站点运营

站点运营:文件权限与目录列表自查,别让备份文件和隐藏目录对外公开

很多站点的暴露不是被攻破,而是自己把文件摆在了公开目录里。备份包、编辑器临时文件、版本控制目录、数据库导出脚本,只要放在网站根目录下,任何人访问对应 URL 都能直接下载。日常巡检时,把文件权限与目录列表当成固定动作,能省掉不少后患。

先弄清常见的暴露来源

大部分意外暴露都来自几类固定文件,可以在巡检时按类别过一遍:

  • 整站或数据库备份:www.zip、site.tar.gz、db.sql、带日期的备份包。
  • 编辑器与系统临时文件:.index.php.swp、style.css.bak、以 ~ 结尾的文件。
  • 版本控制与部署残留:.git/、.svn/、.env、部署脚本里带的示例配置。
  • 调试页面:info.php、test.php、phpinfo 输出页。
  • 服务器目录列表本身:目录里没有默认首页时,服务器把文件清单直接列出来。

自查一:访问目录,看它会不会列出文件

挑几个没有默认首页的目录,直接访问目录地址,例如 /uploads/、/backup/、/static/,观察返回内容。如果看到文件清单,说明目录索引开着。

怎么关

  • Nginx:确认没有开启 autoindex on,默认即为关闭。
  • Apache:在对应目录配置中去掉 Indexes,写作 Options -Indexes。
  • 兜底做法:在没有默认首页的目录放一个空的 index.html。

关掉之后重新访问一次,确认返回的是 403 或 404,而不是 200 加一串文件名。

自查二:把可疑路径挨个敲一遍

这一步不需要工具,浏览器地址栏就够,重点是把常见的文件名试一遍:

  1. 在网站根目录地址后依次加上 /backup.zip、/www.zip、/db.sql、/.git/config、/.env,看是否直接返回文件内容。
  2. 返回 200 且有内容,就要立刻处理:要么删掉,要么移到网站根目录之外。
  3. 如果这些路径曾被搜索引擎抓取过,删除后还应观察一段时间日志,确认没有继续被请求。

需要注意,这类检查只适用于自己管理的站点,批量扫描别人的站点既不礼貌,也可能触碰法律边界。

自查三:文件权限与目录归属

权限设得过松,等于给上传目录开了后门;设得过紧,又会出现图片不显示、程序无法写入的问题。常见的安全基线是:

  • 目录 755,文件 644,不要图省事设成 777。
  • 数据库配置文件、私钥文件放在网站根目录之外,只允许运行用户读取。
  • 上传目录、缓存目录单独划分,并禁止执行脚本,只允许读取静态文件。
  • 运行网站的用户与拥有网站目录的用户分开,减少被写入后直接执行的机会。

自查四:把清理做成流程

靠人记得住并不现实,更稳妥的做法是把它写进固定流程:

  • 打包备份统一放到站点目录之外,需要下载时通过单独入口获取。
  • 部署脚本最后加一步清理:删除 .git、.svn、临时文件与测试页。
  • 上线检查清单里加三条:能不能列目录、可疑路径能不能下载、权限是否合规。
  • 每月做一次全量巡检,平时以上线后抽样为主。
服务器上的公开目录,就像没有上锁的抽屉。里面的东西未必重要,但被路过的人随手拉开看一眼,总归不是好事。

巡检节奏建议

  • 每周:翻一次访问日志里的 404 高频路径,出现大量陌生路径请求时留个心。
  • 每月:按上面四步走一遍,重点看新增了哪些备份和临时文件。
  • 每次上线后:抽查目录列表与常见敏感路径,确认新增内容没有留下口子。

这些检查花不了多少时间,但能避免某天突然发现数据库备份在网上挂着这类麻烦。