一聚教程网:一个值得你收藏的教程网站

热门教程

如何彻底移除phpMyAdmin中的setup安装文件夹以防配置被篡改?

时间:2026-07-02 11:14:46 编辑:袖梨 来源:一聚教程网

必须从服务器层彻底阻断 /setup 路径处理,仅删目录或改权限无法防止攻击者利用解析漏洞执行PHP文件;Apache需用<Directory>精确拒绝,Nginx需用location = 精确匹配并返回404。

直接删掉 /setup 目录不保险,攻击者仍可能通过 web 服务器解析漏洞或残留配置访问其中的 php 文件(比如 /setup/lib/common.inc.php),必须从服务器层彻底阻断路径处理。

为什么不能只删目录或改权限

常见错误现象:https://your-site.com/phpmyadmin/setup/ 返回 404 但日志里仍有大量 GET 请求;或者页面打不开,却能用 curl 绕过直接请求 /setup/index.php?step=2 触发逻辑。这是因为:

  • Apache/Nginx 仍会尝试解析该路径下的 PHP 文件,只要目录存在且 PHP 模块启用,就可能执行
  • chmod 644 或重命名只是让文件不可执行,但 Web 服务器仍可读取、返回源码(尤其当 php_flag engine off 未生效时)
  • 某些一键包(如 AMPPS)默认给 /setup 开启了 AllowOverride All.htaccess 规则反而被绕过

Apache 下必须用 <Directory> 粗暴拒绝

推荐写法(放入虚拟主机配置,非 .htaccess):

<Directory "/usr/share/phpmyadmin/setup">    Require all denied</Directory>

关键点:

  • 路径必须和实际安装路径完全一致(查 ls -l /etc/apache2/conf-enabled/ 确认符号链接指向)
  • 不能写成 Deny from all(旧版 Apache 语法,新版已废弃)
  • 不要依赖 RewriteRule 返回 404——它只拦 GET/POST,OPTIONS 或 HEAD 仍可能穿透

Nginx 必须用 location = 精确匹配

错误写法:location /phpmyadmin/setup(前缀匹配,会误杀 /phpmyadmin/setup_xxx)或 location ~ ^/phpmyadmin/setup(正则开销大且易漏)

立即学习“PHP免费学习笔记(深入)”;

正确写法(放入 server 块内):

location = /phpmyadmin/setup {    return 404;}location = /phpmyadmin/setup/ {    return 404;}

注意:

  • 如果 phpMyAdmin 部署在子路径(如 /pma),必须同步改成 location = /pma/setup
  • 不要用 deny all——Nginx 不支持该指令,配置会直接报错
  • 加第二行 /phpmyadmin/setup/ 是为了拦截末尾带斜杠的请求,否则可能被自动重定向绕过

删目录前先确认你真不需要 setup 向导

如果你后续要手动调整 config.inc.php(比如新增多服务器配置、切换认证方式),删光 /setup 就只能靠手写或临时恢复备份。更稳妥的做法是:

  • 先按上述规则屏蔽访问
  • 保留目录但清空所有 PHP 文件:sudo find /usr/share/phpmyadmin/setup -name "*.php" -delete
  • 仅留空壳目录 + index.html(内容为 <h1>Disabled</h1>),既防扫描又留退路

真正危险的不是目录存在,而是服务器还允许执行其中任意 PHP 脚本——这点最容易被忽略,也最常被 PoC 利用。

热门栏目