How to Secure Your MediaWiki Site: Permission Advice

From 清冽之泉
Revision as of 14:55, 3 September 2025 by Mwroot (talk | contribs) (Created page with "== 思想理念 == * 只把对外要用到的 PHP 入口文件放在 web 根目录,其他一切(配置文件、源码、开发文件、构建工具配置、测试文件、文档等)都应移到 web 根之外,然后用 .htaccess 或 webserver 配置限制访问。 * 业务逻辑(源码)、静态资源分开放置 * webserver 仅可读源码,不可写入,不可执行 * websever 可拥有静态资源 * 上传目录要禁止代码运行 * 要阻止对编译...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

思想理念

  • 只把对外要用到的 PHP 入口文件放在 web 根目录,其他一切(配置文件、源码、开发文件、构建工具配置、测试文件、文档等)都应移到 web 根之外,然后用 .htaccess 或 webserver 配置限制访问。
  • 业务逻辑(源码)、静态资源分开放置
  • webserver 仅可读源码,不可写入,不可执行
  • websever 可拥有静态资源
  • 上传目录要禁止代码运行
  • 要阻止对编译产生的 .dot 文件的访问
  • root:root 755 比 root:www-data 750 更开放,后者有时更好,因为对 o 做了限制
  • 任何人、程序、浏览器,访问内容时,都属于某个用户组
  • www-data 既是一个用户名,也是一个用户组名
  • others 指属主、属主之外的任意用户
  • mediawiki.conf sites.conf sites-le-ssl.conf 分开更有逻辑性,不用合并
  • 对源码的各类配置只能是第二道防线,第一道防线应该从 apache 或 nginx 入手
  • 把源码放在 /var/www 本身就是大隐患,会暴露技术栈。源码另存,仅把入口文件放在 /var/www 或 var/www/html,则入口只是 /,更安全
  • Apache 尝试访问某个文件时,该文件的每一个上级路径都要有 x 权限
  • Apache 通过 symbollink 也能访问文件,symbollink 权限由指向的源文件决定
  • .htaccess 本身就是针对当前目录生效的配置,所以 <Directory> 块只能放在 sth.conf
  • 改文件前先备份一个

知识清单

+FollowSymLinks → 允许 Apache 跟随文件系统里的符号链接

-Indexes → 禁止列目录(防止别人看到文件清单)。不会阻止访问目录下的具体文件

AllowOverride All → 开放 .htaccess 管理权限

php_admin_flag engine off → 禁止执行 PHP(防止上传漏洞)

目录的列目录 list 权限是由 r 控制的。

源码解读

文件保护

根限配置

其他

数据库

# /etc/mysql/mariadb.conf.d/50-server.cnf
skip-networking
# 或者
bind-address = 127.0.0.1

使生效

a2enconf mediawiki-hardening && apachectl configtest && systemctl reload apache2
php update.php

Emacs

杜绝 ~ # 文件泄密。

(setq make-backup-files nil)   ;; 禁止生成 xxx~
(setq auto-save-default nil)   ;; 禁止生成 #xxx#

tar

sudo tar czf xx -C /var/www mediawiki

大写 C 代表切换进目录。

小写 c 代表 create。

小写 z 代表 gzip。

小写 f 代表 file。

整条命令意思是进入 /var/www 目录,对 mediawiki 文件夹执行打包操作,形成 xx 文件。

ln

ln -sfn 存在 不存在

小写 s 代表 symbolic,软链,俗称快捷方式

小写 f 代表 force,目标位置有同名文件则先删除再链接

小写 n 代表 no dereference,不跟随符号链接。如果目标路径已经是一个符号链接,那么 -n 会把它当作普通文件来覆盖,而不会去跟随这个符号链接的指向。 👉 没有 -n 时,假如目标是个符号链接,可能会去覆盖它指向的文件,比较危险。

&&

&&:只有当前一个命令返回 0(成功) 时,才会执行后一个命令。

||:只有当前一个命令返回 非 0(失败) 时,才会执行后一个命令。

&:是把命令放到后台执行,并不是条件执行。

go-w

chmod -R go-w /var/www/mediawiki 令该目录无写入权限。