共享服务器上phpMyAdmin会话目录必须隔离,因共用默认session.save_path会导致session文件混写、覆盖及越权读取;攻击者可通过LFI或遍历窃取其他实例登录态,PHP 8.0默认不校验文件所有权且多数环境未启用session.use_strict_mode=1。

为什么共享服务器上的 phpMyAdmin 会话目录必须隔离
多个 phpMyAdmin 实例(比如宝塔里不同站点、子目录或反代入口)若共用默认 session.save_path(如 /var/lib/php/sessions),会导致 session 文件混写、覆盖甚至越权读取。攻击者只要能上传文件或触发 LFI,就可能遍历整个 sessions 目录,窃取其他实例的登录态——这不是理论风险,PHP 8.0 默认不校验 session 文件所有权,且多数共享环境未启用 session.use_strict_mode=1。
直接改 session.save_path 到实例专属路径
这是最有效、无需额外服务的隔离方式。每个 phpMyAdmin 实例必须拥有自己不可被其他用户访问的 session 目录:
- 在对应站点的
config.inc.php开头(session_start()之前)插入:
ini_set('session.save_path', '/www/sessions/pma-site1'); // 路径需绝对、可写、不在 Web 根目录下
- 确保该路径由当前站点系统用户独占所有:
chown -R www:www /www/sessions/pma-site1,权限设为700 - 若用宝塔,推荐在【网站】→【设置】→【PHP 设置】→【禁用函数】下方的「配置文件」里追加
php_admin_value session.save_path "/www/sessions/pma-site1",比ini_set()更早生效且无法被脚本覆盖 - 不要复用
/tmp或/var/tmp:这些是全局可写目录,PHP 会话文件一旦落在此处,其他用户可通过glob()或暴力扫描读取
配合 session.name 和 session.cookie_path 防止 Cookie 冲突
仅隔离存储路径不够,浏览器仍可能把 A 站点的 PHPSESSID Cookie 发给 B 站点(尤其同域名不同子路径时):
抓取并分析 OpenClaw JSONL 会话日志,重建并回填代理记忆文件。适用于:(1) 模型切换后记忆不完整,(2) 验证记忆覆盖度,(3) 重建丢失记忆,(4) 通过 cron/heartbeat 自动同步每日记忆。支持简单提取及基于 LLM 的叙事摘要,并自动清理敏感信息。
- 在每个实例的
config.inc.php中,session_start()前添加:
session_name('PMA_SITE1');<br>session_set_cookie_params(0, '/phpmyadmin1/', '', true, true);
-
/phpmyadmin1/必须与该实例实际访问路径完全一致(如 Nginx 的location /phpmyadmin1/),否则 Cookie 不发送 - 若站点用子域名(如
pma1.example.com),则session_set_cookie_params()第三个参数填'.example.com',但务必确认其他实例用不同子域名,否则仍会共享 - 别依赖
$cfg['blowfish_secret']隔离 session——它只加密 cookie 内容,不改变 session ID 生成或存储逻辑
容易被忽略的权限与启动时机问题
很多“改了 save_path 却没生效”的案例,根子在两个地方:
立即学习“PHP免费学习笔记(深入)”;
- PHP-FPM 池配置中硬编码了
php_admin_value[session.save_path],会覆盖ini_set()和php.ini;检查/www/server/php/80/etc/php-fpm.d/www.conf里是否有该行,有就删或改成 per-pool 值 - 宝塔用户常把 session 目录建在
/www/wwwroot/下(如/www/wwwroot/pma1/sessions),这等于把 session 文件放在 Web 可访问路径里,攻击者直接请求http://pma1.example.com/sessions/sess_xxx就能下载原始 session 数据 - 如果用了 OPcache,修改
config.inc.php后要重启 PHP-FPM,否则旧字节码仍执行老路径
真正安全的隔离不是靠“看起来不同”,而是让每个实例的 session 文件物理不可见、Cookie 不可达、进程无权限交叉读写——三者缺一不可。


















