其他管理面板取证

宝塔之外,Linux 服务器上还有大量其他管理面板。

最后更新 2026-10-09版本 v1.0维护 DigiForensics查看历史 0

关键词:1Panel、Webmin、Usermin、aaPanel、面板识别、端口指纹、配置目录 难度:进阶 前置知识:Linux 目录结构、Web 服务器基本概念、HTTP 状态码、进程与端口排查

一、概述

宝塔之外,Linux 服务器上还有大量其他管理面板。

它们的共性是:一个 Web 口令 = 一次 root 级操作。取证逻辑与宝塔完全一致——查「谁在什么时候用过面板」,再查「面板替谁保管了哪些凭据」。

但不同面板的差异极大,混用路径会直接导致结论错误。最常见的取证错误是「认错面板」:在 1Panel 的机器上去找 /www/server/panel,当然什么都找不到,然后错误地下结论「该服务器没有装面板」。

这类误判的代价不是漏检,而是把「存在但路径不同」写成了「不存在」。

本篇因此把目标定在两件事上:一张能快速认面板的对照表(目录、数据库、日志、默认端口),以及一套不依赖面板类型的通用识别方法——即使遇到没见过的面板,也能从端口、HTTP 响应、报错信息、文件系统残留里认出它来。

第二部分才是本篇最有迁移价值的部分。

在取证流程中的位置:本篇属于识别层,位于「服务器上到底装了什么」这个问题之前或之中。它与 宝塔面板取证 不是替代关系——宝塔是国内最主流的,值得单独一篇;本篇负责剩下的一切,并给出通用方法。上游依赖 Linux 服务器取证工件地图 的路径全景;下游是针对识别出的面板做具体分析(配置、日志、凭据),以及与站点侧的衔接。

涉及的证据形态(面板对照表,用「存在性测试」逐项过一遍,命中哪项就是哪个面板):

面板 主目录 配置/数据库 主要日志 默认端口
宝塔 BT Panel /www/server/panel/ data/default.db(旧)/ data/db/*.db(新) logs/request.log 8888(旧版 888)
1Panel /opt/1panel/ db/1Panel.db(SQLite) log/、logs/(随版本变化) 10086
Webmin /etc/webmin/、/usr/share/webmin/ users.pl、webmin.config(Perl 序列化) /var/log/webmin/ 10000
Usermin /etc/usermin/ users.pl /var/log/usermin/ 20000
aaPanel /www/server/panel/ 与宝塔同源(英文版分支) logs/request.log 8888
cPanel / WHM /usr/local/cpanel/ main.db(SQLite)、vars/ /var/log/cpanel/ 2082/2083
DirectAdmin /usr/local/directadmin/ admin.conf /var/log/directadmin/ 2222
Plesk /usr/local/psa/ plesk.db /var/log/plesk/ 8443/8880
Cockpit /etc/cockpit/ cockpit.conf journald 9090

⚠️ 版本差异必须现场确认。 1Panel 的日志目录尤其不稳定:不同版本出现过 log/、logs/、甚至只输出到容器日志的情况。判定时以「目录是否存在」为准,不要只按表里的名字 ls 一次就断定没装。

两类特殊结构必须单独讲:

  • 1Panel 是容器化的——面板本体是一个容器,Web 应用也是独立容器。日志可能不在宿主机文件系统上;离线镜像上通常只能看到宿主机层,容器数据在 /var/lib/docker/volumes/ 里。取证时必须区分「宿主机」与「容器」两层(见 Docker 取证工件地图)。
  • Webmin 用 Perl 序列化配置——users.pl 不是文本也不是 SQLite,用文本编辑器打开是乱码。不能把「打开是乱码」当成「文件已加密」。

通用识别方法(本篇最有迁移价值的部分),四类线索:

HTTP 响应特征(最可靠,404 页面里出现面板自己的产品名是最直接的确认方式)。

报错信息(高,实际办案中一条错误信息直接暴露面板类型)。

端口指纹(线索而非证据——端口可改、可反代、必须交叉验证)。

文件系统存在性(离线镜像可靠,但单一目录存在只能说明「装过」,不能说明「当前在用」)。

多条线索同时命中同一面板时,才能做出认定。 建议按 3.1 第 1 步 普查后再用 3.2 第 2 步 区分状态。

能回答什么:这台服务器上装的是哪个面板(或装了哪几个)、版本与架构大致如何、面板的配置与凭据存在哪、面板当前是否在运行、日志在哪。

不能回答什么:面板里具体发生过什么操作(要读它的日志,格式随版本与面板类型变化);「装过」不等于「在用」(面板可能已卸载但残留目录);某个面板的完整加密机制(宝塔新版见 宝塔新版加密数据解密,其他面板各不相同);配置打不开时不能一律写「已加密」——可能是格式没认对。

内容边界:本文用于已获得合法授权的取证场景。面板配置中含真实凭据,提取分析须在受控环境内完成,报告中脱敏。识别面板时只做存在性测试与被动观察,不触发面板的漏洞利用,不尝试绕过认证。

读者前提:需要 Linux 服务器取证工件地图 的路径全景与面板基础概念、宝塔面板取证 的取证逻辑(本篇的多处判读标准以宝塔篇为对照),以及基本的 HTTP 与端口知识。建议先做 3.1 第 1 步 的普查,再决定按哪个面板展开。

二、核心原理

2.1 面板对比表

**这张表是本篇最实用的部分。**拿到一台服务器,先用「存在性测试」逐项过一遍,命中哪项就是哪个面板:

面板 主目录 配置/数据库 主要日志 默认端口 技术栈
宝塔 BT Panel /www/server/panel/ data/default.db(旧)data/db/*.db(新) logs/request.log 8888(旧版 888) Python
1Panel /opt/1panel/ db/1Panel.db(SQLite) log/、logs/(随版本变化) 10086(可自定义) Go
Webmin /etc/webmin/(配置)/usr/share/webmin/(程序) users.pl、webmin.config(Perl 序列化) /var/log/webmin/ 10000 Perl
Usermin /etc/usermin/ users.pl /var/log/usermin/ 20000(可自定义) Perl
aaPanel /www/server/panel/ 与宝塔同源(英文版分支) logs/request.log 8888 Python
cPanel / WHM /usr/local/cpanel/ main.db(SQLite)、vars/ /var/log/cpanel/ 2082/2083(2087/2088 强制 SSL) Perl
DirectAdmin /usr/local/directadmin/ admin.conf /var/log/directadmin/ 2222 C
Plesk /usr/local/psa/ plesk.db /var/log/plesk/ 8443/8880 PHP
Cockpit /etc/cockpit/ cockpit.conf journald(systemd-journald) 9090 C/Python
小皮面板(Windows 为主) Linux 版少见 — — 888(Windows 环境) —

⚠️ 版本差异必须现场确认。上表中 1Panel 的日志目录尤其不稳定:不同版本出现过 log/、logs/、甚至只输出到容器日志的情况。判定时以「目录是否存在」为准,不要只按表里的名字 ls 一次就断定没装。

2.2 1Panel 的特殊性:容器化

1Panel 与其他面板最大的结构差异是它以 Docker 容器为核心:面板本体是一个容器,Web 应用(OpenResty、MySQL、Redis 等)也是独立容器。

这带来两个取证影响。

其一,日志可能不在宿主机文件系统上。

docker ps -a --format 'table {{.Names}}\	{{.Image}}\	{{.Status}}'
docker logs 1panel 2>&1 | tail -100        # V1 容器名
docker logs 1panel-v2 2>&1 | tail -100     # V2 容器名
ls -l /opt/1panel/log/  /opt/1panel/logs/  2>/dev/null

**其二,取证时必须区分「宿主机」与「容器」两层。**在离线镜像上通常只能看到宿主机层,容器数据在 /var/lib/docker/volumes/ 里(若使用命名卷):

位置 内容
/opt/1panel/db/1Panel.db 面板主数据库(SQLite),含账号、设置、数据库信息
/opt/1panel/conf/ 各应用的配置(Nginx、PHP、数据库等)
/opt/1panel/apps/ 通过面板安装的应用(OpenResty 等)及其配置
/opt/1panel/log/ 或 logs/ 面板自身日志(版本相关)
/var/lib/docker/volumes/ 容器命名卷(应用数据可能在此)

2.3 Webmin 的特殊性:Perl 序列化配置

Webmin 不使用 SQLite,而使用 Perl 的 Storable/Data::Dumper 序列化格式。

这意味着不能直接用文本编辑器或 SQLite 工具读,必须用 Perl 解析:

# 直接 cat 会看到 $VAR1 = {...}; 这类内容
perldump /mnt/df/etc/webmin/users.pl

/etc/webmin/ 下的关键文件:

文件 内容 取证价值
miniserv.conf 主配置:端口、监听地址、allow/deny IP 白名单、TLS 设置 ★★★★★
users.pl Webmin 用户到 Unix 账户的映射与权限 ★★★★★
webmin.config 全局配置(Perl 序列化) ★★★★
ssl/ 证书与私钥(取证的敏感目标) ★★★★★
/ 下各模块配置 各模块的独立配置目录 ★★★
/usr/share/webmin/ 程序本体(判断是否被篡改的比对基线) ★★★

miniserv.conf 的取证价值最高,因为 allow= 行直接回答「谁被允许访问面板」:

port=10000
listen=0.0.0.0
ssl=1
allow=203.0.113.0/24      ← 只有这个网段被允许

若 allow 为空或为 0.0.0.0/0,说明未设置访问限制,是重要风险项。

日志位置(不同安装方式略有差异):

ls -l /var/log/webmin/ 2>/dev/null
# miniserv.log   ← 服务端访问日志
# auth.log       ← 认证日志(登录成败)
# webmin.log     ← 操作日志(需在 Webmin 配置里开启"记录每个操作的文件改动")

关键陷阱:webmin.log(操作日志)默认不开启。未开启时不存在「没有操作记录」的结论——而是「从未记录过」。这两个说法的证据价值完全不同。

2.4 aaPanel 与国产面板概览

aaPanel 是宝塔的国际版分支,代码同源,因此目录结构、数据库位置、日志位置、默认端口全部相同。

差异在于界面语言、安装包来源,以及部分模块的默认配置。取证时按宝塔处理即可,但要注意区分「装了 aaPanel」和「装了宝塔中文版」——可通过面板文件中的语言包目录或安装记录判断。

面板 平台 特点与取证注意
宝麒麟 Linux 国产面板,取证参照宝塔思路,路径以实际安装为准
悬镜 Linux 偏向安全加固的运维平台,配置目录随版本变化
小皮面板 Windows 为主 国内常见的 Windows 建站面板;Linux 版本极少,遇到 Linux 服务器时不应优先假设
AMH Linux 开源面板,PHP 实现,目录与数据库路径随版本变化
定制开发面板 视情况 无通用路径,只能靠实际样本逐一识别

诚实说明:国产面板(尤其定制版)没有稳定的取证路径资料。上表只列识别思路,具体路径必须以实际样本验证。遇到未知面板时,用 2.5 节的通用方法。

2.5 通用识别方法(不依赖已知面板)

这是本篇最有迁移价值的部分。即使遇到没听过的面板,也能从以下四类线索认出它。

方法一:端口指纹

端口线索 指向
8888 / 888 宝塔 / aaPanel / 小皮
10086 1Panel(较常见)
10000 Webmin(默认)
20000 Usermin(默认)
9090 Cockpit
2222 DirectAdmin
2082/2083/2087/2088 cPanel / WHM
8443 / 8880 Plesk

注意:端口是线索不是证据。端口可改、可反代、可能与其他服务冲突。必须与目录/响应头/进程名交叉验证。

方法二:HTTP 响应特征(最可靠)

如果目标还在运行,直接访问可疑端口看响应(curl -skI https://127.0.0.1:8888 | head -20):

响应特征 指向
响应头带 X-Powered-By: BT-Panel 一类标识 宝塔
Set-Cookie 名为 1panel_session 一类 1Panel
页面标题/页脚含 Webmin Webmin
404 页面里出现面板自己的版权/产品名 最直接的确认方式

方法三:一条报错信息往往就够

实际办案中,经常是一条错误信息直接暴露了面板类型:

报错/线索 判断
404 页面脚注「Powered by 1Panel」 1Panel
500 错误堆栈里出现 webmin_ajax / miniserv.pl Webmin
日志路径 /www/server/panel/logs/error.log 出现在报错里 宝塔/aaPanel
提示「请访问 http://<IP>:8888/xxx 安全入口」 宝塔(安全入口机制独有)

方法四:文件系统存在性(离线镜像的可靠方式)——见 3.1。

**多条线索同时命中同一面板时,才能做出认定。**单一目录存在只能说明「装过」,不能说明「当前在用」——面板可能已卸载但残留目录。

本篇只覆盖面板这一类工件。服务器上还有哪些日志、站点目录与系统痕迹需要一并固定,见第 01 篇。


三、操作步骤

3.1 第 1 步:面板存在性普查

for d in /www/server/panel /opt/1panel /etc/webmin /etc/usermin \
         /usr/local/cpanel /usr/local/directadmin /usr/local/psa \
         /etc/cockpit /opt/cockpit; do
  [ -d "/mnt/df$d" ] && echo "命中  $d"
done
ls /mnt/df/etc/systemd/system/ 2>/dev/null | grep -iE 'panel|webmin|1panel|cockpit'
ss -tulpn | grep LISTEN          # 在线时的端口

3.2 第 2 步:判定"装过"还是"在用"

这是本篇强调的一个关键区分,很多案件在这里出错的根源:

# 1) 配置文件是否完整且近期被修改
ls -l --time-style=long-iso /mnt/df/etc/webmin/miniserv.conf 2>/dev/null
# 2) 数据库是否近期被写入(应用层活动痕迹)
ls -l --time-style=long-iso /mnt/df/opt/1panel/db/1Panel.db 2>/dev/null
# 3) 日志的最后一条记录时间
tail -3 /mnt/df/var/log/webmin/miniserv.log 2>/dev/null
# 4) 面板程序本体是否完整(可能被删了程序留了配置)
ls /mnt/df/www/server/panel/class/ 2>/dev/null | head
观察 结论
目录 + 程序 + 近期日志 在用(按在用取证)
目录 + 程序存在,但日志早已停止 装过但已停用(仍可能被攻击者重新启用)
只有配置和数据库,程序目录为空 被卸载但数据残留——数据本身仍是高价值证据
目录完全不存在 未安装(注意区分「从未装过」与「装完即删」)

3.3 第 3 步:1Panel 取证

先完整复制并固定哈希,再只读打开 SQLite(不要用 sqlite3 直接写镜像路径):