你可能也遇到过这种处境:明明只是想在 Kali 里跑个 PHP 项目、搭个本地调试环境,结果光编译 Nginx 就折腾掉一个下午,装 MySQL 又碰到依赖冲突,最后项目没写几行代码,时间全耗在环境上。我最早在 Kali 上搭 Web 环境也是手动编译三件套,踩了一堆坑之后才意识到,其实 Linux 下完全可以直接用集成面板来管理环境,也就是常说的“小皮面板”。
小皮面板是 phpStudy 的 Linux 版本,它把 Nginx/Apache、MySQL/MariaDB、PHP 多版本管理、FTP、伪静态配置、SSL 证书申请这些常见功能全部收进一个 Web 控制台里,浏览器点一点就能完成站点创建和环境切换。在 Kali 这种基于 Debian 的发行版上,它同样可以跑得很顺。这篇文章我就把自己在 Kali 上从零搭建小皮面板的完整过程、遇到过的坑、以及最终的排查方案写出来,给同样想在 Kali 上做 Web 开发或本地环境测试的朋友做个参考。
有一点要先说清楚:Kali 是专注于安全审计和渗透测试的发行版,但它的底层就是 Debian,完全能做常规的 Web 开发环境使用。这篇文章只讨论在 Kali 上搭建和维护网站开发环境这类合法用途,不涉及任何其他方向的内容。你自己拿这套环境去写项目、做学习实验、给队友搭个内部协作站点,都没问题。
1. 为什么不用手动编译,要用小皮面板
1.1 Kali 跑 Web 环境的三个典型场景
很多人的第一反应是:Kali 不是做安全测试用的吗,谁会在上面正经写网站?实际并不是这样。我在实际使用中见过三类需求,都很正常。
第一类是学习 PHP 和前端技术。Kali 自带一堆渗透测试工具,但是并不自带可用的 PHP + MySQL 运行环境。如果你是想在 Kali 里学 ThinkPHP、Laravel,或者跑一套开源 CMS 做代码审计练习,你总得有地方把代码跑起来。手动去编译这些组件很烦,但用面板能五分钟搞定。
第二类是搭本地实验环境。比如说你去分析一个开源项目,需要看它的页面效果,或者要对某段 PHP 代码做调试,本地建一个站点要比扔到公网服务器上方便得多。Kali 作为日常使用的系统,直接在上面跑一个本地站点,浏览器访问 localhost 就行。
第三类是给团队或实验室搭内部服务。有些工具平台(比如漏洞靶场、资产管理平台)本身就是基于 PHP/MySQL 的 Web 应用,需要稳定的运行环境。用面板管理这些服务,重启、看日志、切 PHP 版本都直观很多,不用每次 SSH 进去敲命令。
我自己的场景是第二类偏多。因为经常要在不同 PHP 版本之间切换测试兼容性,手动维护多版本 PHP 的编译安装确实是噩梦,这也是我最终选择面板方案的根本原因。
1.2 手动编译 Nginx/PHP/MySQL 的痛点和面板方案的取舍
手动编译这事,不是说不能做,而是维护成本太高。我最早在 Kali 上按教程一步步编译 Nginx + PHP + MySQL,编译参数要自己选,扩展要自己写,PHP 版本升级要重新编译一遍,MySQL 初始化又有一堆参数要填。最崩溃的是某次 Kali 滚动更新把系统库升级了,编译好的二进制直接起不来,排查错误花了一整晚。
面板方案解决的正是这些问题。它把软件包依赖关系、编译参数、配置模板、进程管理都封装好了,你只需要选择要装的版本,面板自动处理下载、编译、配置、注册系统服务这一整条链路。而且版本切换是很自然的操作——面板里装了 PHP 7.4 和 PHP 8.2,创建站点时选一个就行,互不干扰。
那面板方案有没有代价?有。主要代价是:你对自己环境的控制粒度变低了。比如你想给 Nginx 增加一个冷门模块,或者给 PHP 手动编译一个扩展,在面板里操作可能会受限制,需要依赖面板的扩展管理功能,或者手动改配置再重启。另外面板本身占用的资源也不算少,跑一个小内存 VPS 或老电脑会有点吃力,但 Kali 一般跑在虚拟机或配置还行的物理机上,这个重叠问题不算大。
所以在 Kali 上,我个人的取舍结论是:日常开发和实验环境,用面板省心省力;如果有定制的编译需求,再单独用 Docker 或者手动编译也不迟。
2. 搭建前的环境检查与准备
2.1 确认系统版本与权限
小皮面板的 Linux 版对发行版有要求,它官方支持 CentOS、Ubuntu、Debian 这几个主流系列。Kali 基于 Debian Testing/Rolling,架构上属于 Debian 分支,安装脚本能识别,实际跑起来也没有兼容性问题。但有一点要注意:Kali 默认是 root 用户登录,这和 Ubuntu 那种用普通用户 + sudo 的模式不一样。
小皮面板官方推荐在 root 环境下安装,这一点和 Kali 的默认习惯正好对上。如果你用普通用户登录 Kali,安装时脚本会提示权限不足,所以最稳妥的做法是用 root 用户执行安装命令。检查当前用户很简单:
whoami id如果输出的是root,那就直接继续。如果不是,先切换到 root 或者用sudo -i提权。
另外建议在安装前先确定磁盘空间充足。小皮面板会自动安装 Nginx、MySQL、PHP 等多个组件,完整装下来大概需要 2GB 到 3GB 的磁盘空间。用df -h看一下根分区剩多少,如果低于 5GB,最好先清理一些没用的包或文件,免得安装到一半磁盘写满。
2.2 换源与基础依赖安装
Kali 默认使用的软件源在国外,国内网络环境下下载速度不稳定。小皮面板在安装过程中会调用 apt 安装一些依赖包,如果源太慢,整个安装过程会被拖得很久。所以我一般会先换成国内镜像源。
编辑 Kali 的软件源配置文件:
vim /etc/apt/sources.list可以看到里面有http://http.kali.org/kali之类的地址,把它换成国内镜像站的地址就行,比如清华、阿里云、中科大的 Kali 镜像。以清华源为例,内容大致是:
deb https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main non-free contrib deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main non-free contrib换好之后记得更新软件列表并升级现有软件包:
apt update apt full-upgrade -y基础依赖方面,至少要保证有wget、curl、vim、tar、unzip这几个工具。Kali 默认一般带了 wget 和 curl,剩下几个如果没有就装一下:
apt install -y wget curl vim tar unzip这一步主要是确保安装脚本在执行时不会因为缺少基础命令而中断。我在全新安装的 Kali 虚拟机上实测过,缺少unzip确实会导致后续脚本解压失败,这个坑虽小但很折腾人。
2.3 常见误区:Kali 不能跑面板?
很多人对 Kali 有刻板印象,觉得它就是拿来测网络的,装 Web 面板有点不伦不类。这个想法其实站不住脚。Kali 自己就内置了大量 Web 应用测试工具,很多工具本身就需要 PHP + MySQL 环境才能跑起来。官方文档里也明确支持把 Kali 当作日常开发环境使用,只是它带了额外的安全工具集而已。
安装面板之后,Kali 原有的功能完全不受影响。你想继续使用各种安全工具,面板不会占用它们的端口,也不会修改系统关键配置。两者是并行的关系:面板管理的 Nginx/PHP/MySQL 跑在面板自己的目录下,默认数据目录是/www,和系统其他部分隔离开。所以不用担心“装面板会污染 Kali 环境”这种问题。
当然,有一个点需要你提前想清楚:如果你以后打算把这台 Kali 机器直接暴露到公网,那面板的 Web 管理端也是一个攻击面,需要做好访问控制和防火墙策略。如果只是本地虚拟机里用,那基本没有这方面的顾虑。
3. 安装小皮面板完整实操
3.1 获取安装脚本并执行
官方提供了一键安装脚本,直接在终端执行就行。在 Kali 上,我用的命令是:
wget -O install.sh https://notdocker.xp.cn/install.sh && sudo bash install.sh如果 wget 下载失败或者很慢,多半是网络问题,可以先确认 DNS 能不能解析域名:
ping -c 4 xp.cn安装脚本执行后,会自动检测系统版本、安装依赖、下载并编译需要的组件。整个过程根据机器配置和网络速度,一般在 5 到 15 分钟之间。执行过程中终端会滚动输出日志,红色字体一般是错误警告,正常的信息是白色或绿色。
注意事项有一个非常关键:脚本执行期间不要中途断开 SSH 会话或者关闭终端窗口。如果 SSH 断了又没装 tmux/screen,脚本进程会被挂断,导致安装状态不一致。我吃过这个亏,后来学聪明了,执行长时间安装任务前都会先开一个 tmux 会话:
apt install -y tmux tmux new -s install然后在 tmux 里执行安装命令。这样即使 SSH 断线,安装进程也不会中断,重连后执行tmux attach -t install就能回到现场。
3.2 首次登录与初始化配置
安装完成后,脚本会在终端打印面板的访问地址、用户名和初始密码,大概长这样:
=============== 安装完成 =============== 面板地址: http://192.168.x.x:9080 用户名: xp 密码: xxxxxxxx =======================================这里要注意,面板默认监听9080端口,不是常见的 80 或 8888。如果你是在本机访问,浏览器输入http://localhost:9080即可;如果是远程访问,就用 Kali 机器的 IP 加端口。
首次登录后,系统会强制要求修改初始密码,这是正常的安全策略。面板还会提示绑定手机号,这个步骤用的是官方账号体系。如果你不想绑定,可以点击跳过,不影响面板核心功能的使用。
进入面板首页后,你会看到服务器状态信息,包括 CPU、内存、磁盘占用,以及已安装软件的版本列表。这个界面和 Windows 版 phpStudy 的界面风格很像,用过的朋友应该会有种熟悉感。这里我建议你先做两件事:一是修改面板自身的端口,二是设置访问授权 IP,避免局域网内其他人也能直接打开面板管理端。
3.3 创建第一个站点与数据库
面板装好之后,最典型的操作就是创建一个 PHP 站点并搭配一个 MySQL 数据库。我以一个名为test.local的站点为例,走一遍完整流程。
在面板左侧菜单点击“网站”,然后选择“添加站点”。弹出的表单里需要填几项:
- 域名:写
test.local,如果你本地有 hosts 映射或者内网 DNS,可以填实际域名;没有的话,填 IP 地址也能建站 - 根目录:默认是
/www/wwwroot/test.local,可以改成其他路径 - PHP 版本:选择面板里已安装的版本,比如 PHP 7.4 或 8.2
- 创建数据库:勾选创建,填写数据库名、用户名和密码,注意密码强度要足够
提交后,面板会自动创建目录、生成 Nginx 配置、建立 MySQL 数据库和账号,整个过程在几秒内完成。然后你到根目录放一个测试文件:
echo "<?php phpinfo(); ?>" > /www/wwwroot/test.local/index.php浏览器访问对应域名或 IP,如果看到 PHP 信息页面,说明整个链路已经通了。
这里有一个很常见的坑:如果你填写的域名没有在内网 DNS 或 hosts 里解析,访问时会找不到服务器。解决办法是在本机 hosts 文件里加一行:
127.0.0.1 test.localKali 的 hosts 文件路径是/etc/hosts,修改后立即生效。这是本地开发时的标准操作,如果你准备用 IP 访问,就不需要这步。
4. 实战中的坑与排查记录
4.1 面板页面打不开怎么办
安装完成后有时会遇到浏览器访问不了面板的情况,这时不要着急,按顺序排查就行。
先看面板进程在不在:面板的主进程名是panel,可以通过ps aux | grep panel查看,或者直接查看端口监听:
ss -lntp | grep 9080如果端口没有监听,说明面板服务没起来,到面板安装目录手动启动:
cd /www/server/panel python3 panel.py start如果是远程访问,还要检查防火墙有没有放行端口。Kali 默认没有启用复杂的防火墙规则,但如果你装过 ufw 或 firewalld,就要确认 9080 端口是放行的:
ufw allow 9080/tcp另外还要注意,面板默认绑定的是0.0.0.0,也就是监听所有网卡。如果面板配置文件里把监听地址改成了127.0.0.1,那远程肯定访问不了。检查面板配置里的 bind 参数,改成0.0.0.0再重启面板即可。
4.2 数据库连接失败与密码重置
建站后连接数据库报Access denied,这是新手最常遇到的问题。大部分情况是密码填错了,但小皮面板的 MySQL 默认不会把密码显示在面板网站列表里,你需要到“数据库”页面查看对应数据库的账号密码。
还有一种情况是 MySQL 服务没有启动。在面板首页看 MySQL 的状态是否是运行中,如果不是,点启动按钮。如果启动失败,去看 MySQL 日志,路径一般在/www/server/data下,或者用面板集成的日志查看器打开错误日志。
如果密码遗忘了,直接在面板的“数据库”操作里选择“重置密码”。它会要求你设置一个新密码,然后自动应用到对应的 MySQL 用户。比起命令行里手动改用户权限要安全省事得多。
在 Kali 上偶尔会碰到 MySQL 启动后连不上本地 socket 的问题,报错一般是Can't connect to local MySQL server through socket。这个多半是 socket 文件路径对不上。检查面板生成的 my.cnf 里 socket 路径和客户端工具使用的路径是否一致。默认路径一般是/tmp/mysql.sock,如果你用系统的 mysql 客户端连不上,可以试试:
mysql -uroot -p -S /tmp/mysql.sock4.3 PHP 扩展缺失和版本切换
建站后运行一些开源程序时,有时会提示缺少某个 PHP 扩展,比如curl、gd、mysqli等。手动去编译这些扩展确实麻烦,但在小皮面板里很简单:进入面板的“PHP 管理”页面,选择当前 PHP 版本,点击“安装扩展”,勾选需要的扩展即可自动完成安装和加载。
不同程序对 PHP 版本的依赖差别很大,老项目可能在 PHP 7.4 下跑得很稳,换到 PHP 8.2 就各种报错。面板的多版本共存特性这时候就很香了。在“网站”页面编辑站点配置,直接切换 PHP 版本,面板会自动修改对应的 PHP-FPM 配置并重载服务。
切换版本时有一个要注意的地方:如果站点的代码里用到了已被新版本废弃的函数,比如 PHP 8.0 移除的each()、create_function()等,切换后页面会直接报致命错误。这不是面板的问题,是代码兼容性问题,排查时可以打开 PHP 错误日志,路径一般在/www/server/php/{版本}/var/log下。
4.4 面板自动更新失败或卡住
小皮面板偶尔会在后台提示有新版本,点击更新有时会卡住,尤其是网络波动的时候。遇到这种情况,不要多次重复点击更新,容易导致更新进程叠加。正确做法是先看面板后台是否有更新进程在跑:
ps aux | grep update如果有进程,等它结束;如果没有,可以尝试重启面板再更新。还是不行的话,到面板设置里检查更新源地址是否可访问。官方源的地址一般在面板配置里能找到,确认 DNS 正常之后重试。
我自己遇到过一次升级到一半卡死,最后是通过手动执行面板自带的修复脚本恢复的。小皮面板目录下有类似/www/server/panel/tools.py的修复脚本,执行后可以恢复面板功能和数据库服务,整个过程对用户数据没有影响。
4.5 端口冲突问题实录
建站时如果你把站点端口设为 80,但本机已经有其他服务占了 80 端口,Nginx 会起不来。Kali 上最常见的情况是 Apache 默认占用了 80 端口。这时候用命令查看端口占用:
ss -lntp | grep :80如果确实是 Apache 占用了,要么停掉 Apache,要么把站点端口改成 8080。在小皮面板里,你可以在添加站点时手动指定端口,也可以在站点配置里修改监听端口。修改后记得在浏览器里用带端口的方式访问,比如http://localhost:8080。
5. 写在最后的实操建议
搭建和使用小皮面板这件事,说难不难,但细节确实不少。我在 Kali 上从最初的手动编译转用面板,整个过程花了两三天反复踩坑,主要时间其实花在了理解面板的资源目录和管理逻辑上。
这里有几个我后来一直遵守的习惯,供你参考。
第一,勤用快照。如果你是在虚拟机里装 Kali,装好面板之后给虚拟机做个快照,之后无论怎么折腾环境,出了问题回滚就行,比任何排查都高效。
第二,改配置前先备份。小皮面板的每个配置页面基本都有备份按钮,改动前点一下备份并保存好备份记录,万一配置改错了能快速恢复。直接手改配置文件之前,也先复制一份原文件。
第三,合理设置面板访问控制。哪怕你只在本地使用,也建议设置一个端口限制和复杂的后台密码。小皮面板是有公网访问能力的,一旦暴露出去被扫描到,弱口令的风险很高。
第四,不要盲目追求新版本。Kali 是滚动发行版,系统组件已经很新了。如果你的项目在 PHP 8.2 下跑得好,就别手痒去切 PHP 8.3 或者其他更新版本,稳定性优先。
我在实际使用中发现,小皮面板在 Kali 上跑得比想象中要稳,Web 响应速度、PHP-FPM 进程管理、MySQL 运行状态都很正常。即使后来我换了其他环境管理方式,这台 Kali 上面的站点我也一直保留着,毕竟里面存了不少测试数据和调试记录。如果你也想在 Kali 上搭一套省心的 Web 开发环境,小皮面板这条路值得走一趟。