How to Secure Your MediaWiki Site: Permission Advice: Difference between revisions

From 清冽之泉
Jump to navigation Jump to search
Line 28: Line 28:


目录的列目录 list 权限是由 r 控制的。
目录的列目录 list 权限是由 r 控制的。
== 源码解读 ==


== 文件保护 ==
== 文件保护 ==

Revision as of 15:32, 4 September 2025

思想理念

  • 只把对外要用到的 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 控制的。

文件保护

要善用 Apache 配置文件,把重要文件保护起来。且上传用的文件夹,要禁止源码被 webserver 写入。

常用的四个定位用关键字为:

  • <Directory> </Directory>
  • <DirectoryMatch> </DirectoryMatch>
  • <Files> </Files>
  • <FilesMatch> </FilesMatch>

需要保护的文件、文件夹有:

  • 根目录
  • 最重要的配置文件
  • images 目录
  • extensions 目录
  • 其他源码目录
  • .dot 文件

根限配置

其他

数据库

# /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 令该目录无写入权限。