$cfg['CheckConfigurationPermissions'] 是 phpMyAdmin 中用于校验 config.inc.php 文件权限与属主的开关,仅在启动时检查文件是否为 644 且属主为 Web 进程用户(如 www-data),不检查代码逻辑或安全配置;设为 false 仅关闭该单项检查,不消除实际风险。
CheckConfigurationPermissions 是什么,不是 CheckConfigurationErrors
官方配置项叫 $cfg['checkconfigurationpermissions'],没有 checkconfigurationerrors 这个参数——搜不到、设了也无效。很多用户在 config.inc.php 里手误写错,或从过时博客复制错误配置,结果既不报错也不起作用,反而误以为“安全检查已开启”。
它只校验 config.inc.php 文件权限,不扫描代码逻辑
这个开关仅在 phpMyAdmin 启动时读取一次:config.inc.php 的文件权限是否为 644(所有者可读写,组和其他用户仅可读),所有者和组是否为 Web 进程用户(如 www 或 www-data)。它不检查变量初始化、SQL 注入点、CSRF token 是否启用,也不分析 PHP 代码风格。
- 权限是 600?→ 报错 “配置文件权限错误”
- 权限是 664?→ 报错(组用户可写,视为不安全)
- 权限是 644 但所有者是
root:root?→ 报错(Web 进程无法安全读取) - 设为
false后报错消失?→ 风险没消除,只是关掉了这个单项检查
真要识别配置风险,得靠组合动作
单靠 $cfg['CheckConfigurationPermissions'] 远不够。实际排查需分层验证:
- 用
ls -l /www/server/phpmyadmin/config.inc.php确认权限与属主 - 检查
$cfg['Servers'][$i]['auth_type']是否为cookie或http,而非config(后者明文存密码) - 确认
$cfg['LoginCookieValidity']不超过 300(5 分钟),防 CSRF 时间窗口扩大 - grep -r 'allownopassword' /www/server/phpmyadmin/ —— 若为
true,必须立刻改掉 - 运行
php -l /www/server/phpmyadmin/config.inc.php验证语法是否合法(避免因分号遗漏导致配置失效)
容易被忽略的细节:权限检查只在首次加载时触发
修改 config.inc.php 内容后重启 Web 服务,不会重新触发权限校验;只有删除 session、清空浏览器 cookie 后重新访问登录页,才会再次走完整校验流程。所以改完权限后,别只刷新首页——要彻底退出、清缓存、新开无痕窗口再进,否则可能误判修复成功。



















