尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

官方给的默认配置,为什么不能直接照用

官方给的默认配置,为什么不能直接照用 授权与合规声明本文全部操作对象均为自建隔离靶场本机容器或隔离虚拟机涉及安全测试的环节必须以取得合法授权为前提。未经授权的渗透测试违反《中华人民共和国网络安全法》与《刑法》相关条款须承担相应法律责任。本文只讲环境配置、版本对照与靶场隔离不含任何攻击步骤、利用载荷与绕过手法请勿将文中环境指向任何非自有系统。一、能跑起来是不是就等于配置没问题1.1 一路顺利的那种顺利照官方文档敲命令是初学者最省心的一段体验把仓库拉下来按文档给的命令把容器起起来浏览器里输入那个地址靶场页面就出来了。整个过程里你几乎没有做过任何一个决定——文档写什么你敲什么。这种顺利会带来一个很自然的推论既然官方文档是这么写的而且我真的把它跑起来了那我这套配置应该就是对的。这个推论在当下不会立刻出问题所以它会安安静静地留在你脑子里。等到某一天你要把这套东西搬到另一台机器上、或者想让别人也照着跑一遍、或者你想照着它去配一个不那么练习用的环境时问题才会显形。还有一种更隐蔽的情形你照着教程做到一半发现现象对不上于是怀疑自己手滑。但分歧点往往不在操作上而在你用的默认值和教程作者用的那份本来就不是同一份。1.2 本文要问清楚的那个问题先把本文的问题摆出来“能跑起来和可以照这么用”是不是同一件事这两个判断看起来像同一件事其实在回答两个不同的问题。前者问的是这套配置能不能让程序活着后者问的是这套配置是否适合我的使用场景。官方文档在第一个问题上通常给你完整答案在第二个问题上往往只给了你一个默认值。本文要讲的这一层叫默认值层官方给出的默认端口、官方给的样例配置、以及默认的权限与暴露面。这一层最容易被忽略因为它不需要你做任何决定——你什么都不做它就在那里你照抄文档它就自动生效。在往下讲之前先做一次只读的确认把环境是通的这件事说清楚。下面这条命令只读未实测。⚠️代码待验证dockerversion这条命令只做一件事告诉你客户端和后台服务是不是都在。它不改任何配置也不告诉你该改什么。本文后面出现的每一条命令都是这个性质——只让事情变得更清楚不让事情发生改变。这一条很关键因为本文通篇不讲怎么改只讲该不该动、按什么判断。二、默认值到底是什么东西2.1 默认值的目标是让人先跑起来理解默认值得先理解它是给谁用的。官方文档给出默认值的第一目的是让人能跑起来看到东西。写文档的人心里那个读者是第一次接触这个项目的人他不知道该监听哪个端口不知道该填什么库名不知道哪些目录要挂进去、挂成什么样。这时候给一份能直接跑的样例是最高效的办法——先让他看到页面产生我跑通了的正反馈再谈别的。所以默认值的性质是示例性的不是规范性的。它表达的是照这么做你能看到东西而不是这么配就是合理的。这话听起来像在咬文嚼字但它能一口气解释掉很多让人困惑的现象为什么同一个项目里官方文档不同位置给的端口不一样为什么官方明明能直接给一份可用的配置却要你手动改名一份文件为什么有些默认项上官方干脆只留一句根据实际情况修改。2.2 一句可记忆的判断把上面这段压成一句你可以直接记住的话默认值是最小可运行集不是推荐配置。把这两个词拆开看。最小可运行集的意思是满足它能跑起来所需要的最小条件——没有多余的部分也没有考虑你的场景。推荐配置的意思是在知道你大概要做什么之后给出的那份经过取舍的配置。官方的默认值通常只做到前者。这不是官方偷懒而是它必须在谁都能用和在具体场景里合适之间做取舍而默认值选的是前者。对比项最小可运行集推荐配置目标是让程序先跑起来让程序在你的场景里合适面向谁第一次接触这个项目的人知道自己要做什么的人要不要你做决定不需要照抄即可需要取值取决于你的场景默认值属于哪一类属于这一类一般不属于这一类换个场景会不会有问题会换了场景可能就不合适了本来就该随场景变2.3 为什么这条判断在靶场里格外要紧靶场有一个特殊性它默认就是给别人练手用的所以官方在方便这件事上会额外让步。一个正常的业务系统默认配置往往会尽量保守而一个靶场能被方便地访问到、能被方便地改动本身就是它的目的之一。这就使得靶场的默认值里方便的权重比一般软件高。而在安全这件事上方便和安全通常是一对反向指标——你越省事往往意味着你默认交出去的越多。于是就有了后面三章要逐一取证的现象默认端口是随手挑的、样例配置是要你手动接手的、默认权限是默认就能改的。它们看起来是三件互不相干的小事其实指向的是同一句话。三、第一类 默认端口同一份官方文档里就不统一3.1 三个靶场的官方默认端口先把事实摆出来。下面这几个数字都来自各家官方 README 里讲容器用法的部分逐条核验日期见附表 A。靶场官方容器里的端口官方口径要点DVWA4280官方原话的意思很明确用容器方式跑 DVWAWeb 服务器监听的是 4280而不是通常的 80upload-labs80官方容器用法里容器端口就是 80Pikachu80官方 README 给出的两条容器命令容器端口都是 80但宿主机端口一条写 8765、另一条写 8080看完这张表初学者最想问的往往是那句到底哪个对。这个问题本身就问错了方向——三个数字都是官方给的没有哪个是错的。真正值得注意的是 DVWA 那一行的措辞。官方特意加了一句相当于不是通常的 80的说明。这句话透露了一个信息80 是通常值4280 是它这一次的选择。官方知道读者心里默认的是 80所以才要专门解释一句。想确认你自己那台机器上现在实际是什么情况只读看一眼就够了。下面这条命令只读未实测。⚠️代码待验证dockerps它会列出正在跑的容器其中一列就是端口。这一步的意义不在于看到哪个数字而在于建立一个习惯端口是运行时的事实不是你记忆里的那个数字。别靠记靠看。3.2 同一个项目的官方文档里两条命令就不一致Pikachu 那一行最值得单独拿出来说。它的官方 README 里给出了两条容器命令一条把宿主机端口写成 8765另一条写成 8080。而这两条命令的容器端口都是 80。也就是说同一份官方文档、同一个项目、相隔几行宿主机端口就给了两个不同的值。这不是谁抄错了——两条都出自官方 README。它说明的是这两个数字在写文档的人眼里属于挑一个没被占用的就行的量级。这就是本章最重要的一条结论默认端口不是一条规范是一个示例。规范是容器里的服务监听 80示例是那你在宿主机这一侧接哪个端口出来。前者要求一致后者本来就是可变的。3.3 那到底该不该动该按什么判断既然官方自己都不统一你就不能用和文档一致当成标准。判断依据可以换成三句话这个端口是容器内部的还是宿主机这一侧的容器内部那个通常由镜像决定你能动的是外面这一侧。改了会不会影响后面的步骤如果教程里后续步骤都是按某个端口写的你换了端口导致后面接不上那是你自己的选择带来的成本。这个端口在我这台机器上有没有被别的东西占着这是最实际的一条冲突了就必须换不冲突就没有必要为了看起来整齐去换。这里给的是判断依据不是操作步骤。本文从头到尾不给任何一条改配置的命令原因在第七章会说明。四、第二类 样例配置那一步手动动作是官方留给你的决定4.1 DVWA样例文件名里带着 dist改名之后才生效DVWA 官方给出的本地改动做法里有一条是这样的把config/config.inc.php.dist复制成config/config.inc.php。这个动作看着像一道手续其实是一个设计仓库里放的是样例真正生效的是你复制出来的那一份。官方完全可以直接把配置写成可用状态但它没有——它把从样例到正式这一步留给了你。想知道这个目录里到底摆了哪些文件只读列一下就知道。下面这条命令只读未实测。⚠️代码待验证ls-lconfig/你会看到带.dist后缀的那份如果你做过那一步还会看到不带后缀的那份。这一步的意义是让你亲眼确认一件事官方给你的是一份样品不是成品。4.2 Pikachu把数据库连接交给你按实际情况填Pikachu 官方部署步骤里有一条是根据实际情况修改inc/config.inc.php里面的数据库连接配置。根据实际情况这几个字很关键。它其实承认了一件事官方不知道你的库叫什么、账号是什么所以它没法替你决定。这类配置天然只能由使用者填官方能做的只是把位置指给你。项目官方给的样例形态官方要你做的动作这一步的性质DVWAconfig/config.inc.php.dist复制成不带.dist的正式文件从样例变成正式Pikachuinc/config.inc.php按实际情况填写数据库连接信息从占位变成实值两行的共同点是官方在这个位置停手了。它没有替你走完最后一步而是把最后那个决定留给了你。你如果把这个动作当成多余的仪式随手做过去也就跳过了官方专门留给你的那次思考。4.3 为什么官方不直接给一份能用的配置把上一章和这一章放在一起看是同一个模式端口那一层官方给的是示例不是规范样例配置这一层官方给的是样品不是成品。原因是一样的官方承诺的是谁都能跑起来而不是替你做决定。一份能直接用的配置必须绑死在某个具体场景上而官方要面对的是一群场景各不相同的人。它替某一类人做的决定就会让另一类人踩坑。理解了这一点你对官方默认值的期待就会跟着变不再指望它替你做完所有决定而是把它当成一个起点——它负责让你看到东西剩下的判断归你。五、第三类 默认权限与默认暴露面默认方便往往等于默认权限大5.1 绑定挂载默认对宿主机文件可写Docker 官方在讲绑定挂载时有这么一句原话“Bind mounts have write access to files on the host by default.”意思是绑定挂载默认对宿主机上的文件有写权限。这句话的落点在by default上。它意味着当你为了让容器能读到宿主机的文件而做了一次挂载这次挂载默认也是可写的——容器里的进程可以顺着这条通道改到宿主机上的文件。官方紧接着说明了后果大意是通过这条通道容器里跑的进程可以改变宿主机的文件系统包括创建、修改甚至删除重要的系统文件或目录而这会带来安全上的影响。把这句话和靶场连起来看就清楚了靶场本身就是要能被改动的所以你把目录挂进容器时天然更倾向于让它可写——方便是目的可写是代价。5.2 docker 组授予的是 root 级权限Docker 官方还有另一句原话“Thedockergroup grants root-level privileges to the user.”意思是docker 组会把 root 级权限授予该用户。这一句和上一句是同一个道理的另一种形态。为了让非 root 账号用起来方便——不用每次命令前面都加 sudo——官方提供了把账号加进 docker 组这个做法。而官方在同一个页面上是用警告的方式告诉你这一点的这么做的代价是这个账号拿到了 root 级的权限。想确认自己现在处在什么状态只读看一眼自己归属哪些组就够了。下面这条命令只读未实测。⚠️代码待验证id它不做任何改动只是把当前账号的归属列出来。看清之后你就知道你在这台机器上是一个普通用户还是一个手里握着 root 级权限的普通用户。本文在这里只讲默认方便就等于默认权限大这一个点不展开权限机制本身——那属于另一条轴上的事本文不重复。5.3 两个默认项合起来意味着什么把这两句官方原话放在一起能看出一个共同的形状官方默认项默认成什么样官方给出的代价绑定挂载对宿主机文件默认有写权限容器内进程可以改到宿主机文件系统可能影响到宿主机上的其他进程docker 组把账号加进去即可免 sudo该账号因此获得 root 级权限两行都没有错它们都是官方为了方便而做的默认选择。但两行也都没有承诺这么做是妥当的。这就是本章要请你记住的那句默认方便往往等于默认权限大。你享受了多少方便就承担了多少权限——这两件事是同一枚硬币的两面不可能只拿一半。配套资料把本文这几类默认值默认端口、样例配置、默认挂载权限、默认账号权限整理成了一页可以随手对照的检查表连同各家官方原文与出处放在资料包里扫码即可获取六、一条官方自己画的红线6.1 那句写在仓库注意事项里的话如果前面几章还只是说默认值可能不适合你那么这一章要引的这句是官方自己把话说到了底。Vulhub 官方仓库的注意事项里有一条逐字是“所有环境仅供测试与学习严禁用于生产环境”它的意思非常直接官方从不承诺这些默认值可以用于真实场景。它甚至没有留视情况而定的余地——这句话的重心在严禁不在建议。这句话就写在各家仓库自己的说明里是可以直接查到的。下面这条只读命令示意未实测用来在本地定位这句原文。⚠️代码待验证grep-n仅供测试与学习README.zh-cn.md它只读文件、只打印匹配到的行不改动任何东西。之所以把这个动作给你看是想说明一件事这类判断依据官方是明写出来的只是它常常不在教程正文里而在注意事项里。你读文档时如果只看怎么启动就会把这一句整个漏掉。6.2 能跑和可以用的差别官方一句话说透回头看第一章那个问题能跑起来和可以照这么用是不是一回事在默认端口那一层答案体现在官方自己都不统一的数字里在样例配置那一层答案体现在那一步留给你的手动动作里在默认权限那一层答案体现在官方用警告的方式把代价说出来而到了这一层答案变得不能再直白官方明确说了这些默认值不是给真实场景准备的。也就是说你在靶场里跑起来的那套默认配置它的适用边界就是靶场。它能跑起来是因为官方把它设计成能跑起来它不适合生产环境也是官方说在前面的。这里要把一件事说清楚免得被误读这句话不是在说默认值有问题。恰恰相反默认值在它自己的用途里是好用的——真正容易出问题的是使用者的预期。你如果把它当成一份可以照用的配置那就不算默认值的错而是预期错位。6.3 那该怎么摆正预期把这一章收成一句可以操作的话看到官方默认值先问它默认是给谁用的再问你要拿它做什么。它默认给谁用给第一次接触这个项目、目标是先看到东西的人。你要拿它做什么如果你是在自建隔离靶场里练手默认值大概率够用想把它搬到别的地方去就得重新判断一遍。这两句都答上来你就不会再把能跑起来当成配置没问题的证据了。七、一张判断表与三个可带走的动作7.1 默认值判断表把前面三章的事实压成一张表下次动手之前先扫一眼。默认值类别它默认成什么样该不该动判断依据默认端口DVWA 容器 4280upload-labs 与 Pikachu 容器 80Pikachu 官方 README 两条命令的宿主机端口还不一致看情况冲突了必须动不冲突不必动官方自己都不统一说明它不是规范只是示例以你机器上的实际情况为准样例配置DVWA 给的是带 dist 后缀的样例改名后才生效Pikachu 要你按实际情况填数据库连接必须动不动就用不上官方在这一步停手了这正说明最后那个决定归你默认挂载权限绑定挂载默认对宿主机文件有写权限看你做什么不需要写就别留写官方把可能的后果说清楚了说明这个默认值是个取舍不是结论默认账号权限把账号加进 docker 组即可免 sudo代价是该账号拿到 root 级权限知不知道比动不动更要紧官方用警告的方式给出这一点说明它是先知道再选的事这张表想传递的核心只有一句默认值是起点不是结论。每一行该不该动的答案都不一样但它们背后的判断方式是同一个——先看它默认给谁用再看你要拿它做什么。7.2 三个可带走的动作下面三个动作都是只读的可以在动手改任何东西之前先做一遍。动作只读命令方向它能回答什么看容器现在是什么状态、端口是多少列出正在跑的容器端口这件事以运行时为准不能靠记忆看这份配置是样例还是正式列出放配置的那个目录你现在动的是样品还是成品看这台机器上的整体设置长什么样查看运行时的整体信息默认值落在哪先看清再决定动不动最后一个只读命令示意如下同样是只读未实测。⚠️代码待验证dockerinfo它只打印信息不改任何东西。把它放在最后说是因为它代表的是本文最想让你养成的那个习惯在想改和真改之间先插进一个先看清的动作。这个动作能挡掉后面成片的无效折腾。7.3 本文使用限制写到这里把本文的边界交代清楚避免被误读本文只做默认值该不该动、按什么判断这一件事不给任何一条改配置的命令或步骤。文中出现的命令一律是只读的诊断动作且均未在本机实际运行一律标了代码待验证请在你自己的隔离环境里核实之后再决定要不要用。本文不重讲权限位怎么读、隔离层级怎么分、配置文件怎么归类这几件事——它们各自属于别的轴本文只在必要处一句话带过不重复展开。本文不含任何攻击步骤、利用载荷、绕过手法、具体报错文本与量级数字。文中所有官方口径均照抄原文英文原文逐字引用并附中文说明中文原文照抄核验日期逐条见附表 A。官方文档与仓库是会更新的本文引用的是核验日当天看到的内容动手前请以你手上那一份为准。本文列的这几类默认值是为了帮你定位不是官方分类官方文档不会这么归类。配套资料第七章这张默认值判断表我做成了可以打印出来随手对照的一页纸连同各家官方原文与出处放在资料包里扫码即可获取附表 A本文引用事实与官方出处对照表核验日期逐条标注于下表英文原文逐字引用中文原文照抄未作改写。仓库与页面会变化建议隔一段时间按同一出处复检一次。#本文写出的事实照官方口径官方一手出处核验日期本文位置1DVWA 官方原文「for running DVWA in containers, the web server is listening on port 4280 instead of the usual port of 80」DVWA 官方 README — https://raw.githubusercontent.com/digininja/DVWA/master/README.md2026-09-16三、3.12upload-labs 官方容器用法中容器端口为 80upload-labs 官方 README — https://raw.githubusercontent.com/c0ny1/upload-labs/master/README.md2026-09-16三、3.13Pikachu 官方 README 给出的两条容器命令宿主机端口一为 8765、一为 8080两条的容器端口均为 80Pikachu 官方 README — https://raw.githubusercontent.com/zhuifengshaonianhanlu/pikachu/master/README.md2026-09-16三、3.1、3.24DVWA 官方给出的本地改动做法之一把带.dist后缀的样例配置config/config.inc.php.dist复制成正式文件config/config.inc.php样例配置改名后才生效DVWA 官方 README — https://raw.githubusercontent.com/digininja/DVWA/master/README.md2026-09-16四、4.15Pikachu 官方安装步骤之一「根据实际情况修改inc/config.inc.php里面的数据库连接配置」Pikachu 官方 README — https://raw.githubusercontent.com/zhuifengshaonianhanlu/pikachu/master/README.md2026-09-16四、4.26Docker 官方原文「Bind mounts have write access to files on the host by default.」Docker 官方文档 Bind mounts — https://docs.docker.com/engine/storage/bind-mounts/2026-09-24五、5.17Docker 官方原文「Thedockergroup grants root-level privileges to the user.」Docker 官方文档 Linux post-installation steps — https://docs.docker.com/engine/install/linux-postinstall/2026-09-24五、5.28Vulhub 官方注意事项逐字「所有环境仅供测试与学习严禁用于生产环境」Vulhub 官方 README — https://raw.githubusercontent.com/vulhub/vulhub/master/README.zh-cn.md2026-09-16六、6.1附表 B术语速查表术语是什么为什么在本文里重要默认值层官方给出的默认端口、默认样例配置、默认权限与默认暴露面这一层它不需要你做任何决定所以最容易被忽略本文整篇都在讲这一层最小可运行集满足能跑起来所需要的最小条件不多也不少官方默认值的真实性质把它当成推荐配置就会踩坑推荐配置在知道你大概要做什么之后给出的、经过取舍的配置本文用来和默认值对照的那一端默认端口官方文档里给出的端口数字官方自己都不统一4280 / 80 / 8765 / 8080说明它是示例不是规范样例配置官方放在仓库里、需要你接手之后才生效的那份配置DVWA 的.dist后缀与 Pikachu 的根据实际情况修改都属于这一类绑定挂载把宿主机上的文件或目录挂进容器的做法官方明说它默认对宿主机文件有写权限是默认方便等于默认权限大的第一个例子docker 组让非 root 账号免 sudo 使用 Docker 的账号分组官方用警告的方式说明它授予 root 级权限是同一个道理的第二个例子只读诊断动作只查看状态、不产生任何改变的命令本文给出的全部命令都属于这一类本文不给任何改配置的操作核验日期引用的官方口径是哪一天看到的官方文档会更新写明日期才能判断这条口径还成不成立写在最后这篇用到的资料写这篇文章时我把 DVWA、upload-labs、Pikachu 与 Vulhub 的官方说明逐条核了一遍又对照 Docker 官方讲挂载与账号权限的两页把默认值该不该动这件事理成了一张判断表顺手也整理了几份配套的东西靶场默认值对照表四个靶场官方给的默认端口、样例配置位置以及官方注意事项里的原话Web 安全学习路线图从基础打牢到安全管理四个阶段各学什么常用靶场清单每个靶场练什么、适合哪个阶段资料是我自己整理的放在下面这个码上扫码即可获取添加时备注「靶场」优先通过。拿到之后建议先看靶场默认值对照表那一份——先把哪些默认值只是能跑、哪些必须你自己接手分清比改完发现不对再回头翻官方说明要省心得多。
返回列表