站点运营

站点运营:文件權限與目錄列表自查,別让备份文件和隐藏目錄對外公開

服務器上常见的意外暴露,往往来自备份包、編輯器临时文件、版本控制目錄和開着索引的文件夹。本文给出一套可执行的自查方法:如何判断目錄會不會列文件、可疑路径怎么逐個驗證、文件權限怎么设、以及把清理動作寫進上线流程與巡检节奏。

站点运营

站点运营:文件權限與目錄列表自查,別让备份文件和隐藏目錄對外公開

很多站点的暴露不是被攻破,而是自己把文件摆在了公開目錄里。备份包、編輯器临时文件、版本控制目錄、資料库導出脚本,只要放在網站根目錄下,任何人訪問對應 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 高频路径,出現大量陌生路径請求时留個心。
  • 每月:按上面四步走一遍,重点看新增了哪些备份和临时文件。
  • 每次上线後:抽查目錄列表與常见敏感路径,確認新增内容没有留下口子。

這些检查花不了多少時間,但能避免某天突然發現資料库备份在網上挂着這類麻烦。