ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

M 系列 Mac 跑靶场:架构不兼容时先确认三件事

M 系列 Mac 跑靶场:架构不兼容时先确认三件事 授权与合规声明本文全部操作对象均为自建隔离靶场本机容器或隔离虚拟机涉及安全测试的环节必须以取得合法授权为前提。未经授权的渗透测试违反《中华人民共和国网络安全法》与《刑法》相关条款须承担相应法律责任。本文只讲环境配置、版本对照与靶场隔离不含任何攻击步骤、利用载荷与绕过手法请勿将文中环境指向任何非自有系统。一、先给结论跑不起来先确认三件事1.1 一个很常见的场景在 M 系列芯片的 Mac 上把 Vulhub 这样的漏洞靶场环境取到本地敲下启动命令终端回了几行输出然后就没有下文了有的环境一直起不来有的起来之后又自己退出了还有的看起来在跑浏览器里却什么都没有。这时候最容易脱口而出的一句判断是——“架构不兼容”。这句话有一半可能是对的但它没有告诉你下一步该做什么也没有告诉你什么情况下它是错的。先交代两件与下文有关的事。第一本文拿 Vulhub 当例子它是官方所说的开源的、即开即用的漏洞靶场环境集合不是一个单一靶场而是一批各自独立的环境逐字引文见附表 A 第 6 行。第二Vulhub 是一个持续在维护的开源项目截至 2026-10-02其官方仓库最近一次推送时间为 2026-09-16处于非归档状态它归在一个组织账号下创建于 2017-04-09见附表 A 第 8 行。这两点合起来意味着官方说法是活的读的时候要带上日期不能拿旧印象当结论。1.2 三件事按顺序确认本文把这个问题拆成三件事顺序不能颠倒顺序要确认的事靠什么确认最容易出现的想当然第一件本机芯片架构与这个镜像的目标平台是不是同一套看本机架构 看镜像声明的平台“Mac 是 arm64跑什么环境都一样”第二件这个环境的官方有没有说过支持 ARM读这个项目官方文档里的原话“跑不起来就是官方不支持”第三件这次失败到底是架构引起的还是内存等其他原因分清现象再对照官方列出的前提条件“凡是起不来都是架构的锅”第一件回答两边说的还是不是同一种语言第二件回答官方有没有对这个平台表过态第三件回答这一次的失败该归到哪一类。三件事都过一遍再决定要不要动官方给的那条临时写法。1.3 本文只做什么本文只做三件事的确认不给任何攻击步骤、利用载荷与绕过手法也不给任何具体报错文本——官方文档里没有的本文不替它补。所有命令只做看的动作不拉取、不删除、不修改任何东西并且全部标注待验证写这篇文章的本机没有可用的容器环境未实际运行。⚠️代码待验证# 三件事的骨架只读理解用不执行任何写操作# 第一件本机架构 与 镜像目标平台 是不是同一套# 第二件这个环境的官方 有没有谈过 ARM# 第三件这次失败 是架构还是内存等其他原因本章可以带走的一句架构不兼容是一个结论不是一个排查动作先按顺序确认三件事再下这个结论。二、先弄明白为什么会有两套指令集2.1 程序最终要变成机器能直接执行的指令一段用高级语言写出来的程序机器并不能直接读。它要先被翻译成一条条最底层的机器指令CPU 才认识。而翻译成什么样子是由一套约定决定的这套约定就是指令集。关键的一点在于指令集并不只有一套。为某一套指令集翻译好的程序换到另一套指令集上CPU 读不懂。这不是版本高低的问题也不是新旧的问题——是本来就不是同一种语言。2.2 arm64 与 amd64 是两套不同的母语日常接触到的机器很可能说的不是同一种母语叫法常见出现在哪一句话说明arm64也写作 aarch64M 系列芯片的 Mac、多数 ARM 服务器本文读者的 Mac 属于这一类amd64也写作 x86_64传统的 Intel / AMD 个人电脑与服务器大量现成镜像与老教程面向这一类M 系列 Mac 属于 arm64 这一边而互联网上大量现成的容器镜像、以及很多年前写的教程是按 amd64 准备的。两边对不上就是所谓架构不兼容的由来。还要多说一句同一个软件可能同时发布两个架构的版本也可能只发其中一个。“有这个软件和有这个软件在你机器上能跑的那一版”是两件事。2.3 连第三方工具也会把两种 Mac 分开写这种区分不只出现在容器里。以第三方 Homebrew tapshivammathur/php为例它的官方仓库写明自己运行于 Linux x86_64/arm64 与macOS arm64而macOS Intel 不支持⚠️ 这是第三方 tap、非 PHP 官方本文只引用它的支持范围不展开任何安装步骤。一句带过就够了**同样是macOS在不同芯片下会被当成两个不同的目标平台。**这也正是第一件事要逐台机器、逐个镜像去确认的原因——判断依据得从两边各自的信息里去取不能拿一个笼统的印象去套。⚠️代码待验证# 只读动作一看本机是哪一套架构uname-m# 只读动作二看容器工具自己报告的架构信息里架构那一项写的是什么dockerversion两条都只看不改不安装、不删除任何软件。本章可以带走的一句arm64 与 amd64 是两套不同的指令集不是同一个东西的两个版本两边对不上程序就是读不懂。三、第一件事确认芯片架构与镜像的目标平台3.1 先把本机这一头看清楚第一件事有两头先看自己这一头本机是什么架构。在 M 系列 Mac 上答案通常是 arm64。这一步的意义不在于得到一个新鲜的答案而在于不让它停留在我记得好像是上——换了一台机器、换了一台服务器这一头就要重新看一遍。3.2 再看镜像那一头声明的是什么另一头是镜像。**镜像不是一坨没有属性的文件它有自己的目标平台。**一个镜像面向的是 arm64 还是 amd64是它被构建时就带上的信息。这里有个特别容易踩的错觉**“我把仓库 clone 下来了、把环境目录打开了”并不等于我要用的那个镜像已经就位。**目录里放的是配置与说明镜像要么本机早就有要么在启动时从远端取——这是两件不同的事Vulhub 官方也写明每个环境目录下都包含详细的 README见附表 A 第 7 行。3.3 两边对不上时该怎么描述两边对不上现象是起不来或者起来之后又退出——本文不给任何具体报错文本因为官方文档里没有这类文本照抄别人的报错去对号入座等于把别人的机器当成自己的机器。第一件事的正确收尾是这一句**本机是 arm64这个镜像声明的目标平台是另一套所以两者之间需要一层额外的处理才能在这台机器上跑。**至于这层处理是否存在、由谁提供就交给第二件事。⚠️代码待验证# 只读动作看本机已有的镜像以及其中某一个镜像声明的平台信息dockerimages# 把上一步里出现的镜像名填进去只做查看不拉取dockerimage inspect镜像名这两条都只看不改镜像名是需要你自己替换的占位符。本章可以带走的一句第一件事就是拿本机的架构和镜像声明的目标平台对一下两头不一致才轮到第二件事。四、第二件事确认这个环境官方说不说支持 ARM4.1 官方确实说过部分环境可能不支持 ARM先摆出 Vulhub 官方 README 里那句最常被引用的话逐字引文见附表 A 第 2 行部分环境可能不支持 ARM 架构这句话信息量很大①官方承认ARM 这一类平台在这套环境里存在跑不起来的可能②注意官方用词是部分环境而不是全部③这句话写在官方注意事项里是官方主动交代的边界不是谁的推测。4.2 官方也说过 M 系列大部分环境可以直接跑同一份 README 的常见问题里官方还写了另一句逐字引文见附表 A 第 3 行Apple SiliconM 系列大部分环境可直接运行失败时可用export DOCKER_DEFAULT_PLATFORMlinux/amd64这里要注意两个细节。第一官方说的是大部分环境可直接运行——也就是说M 系列 Mac 并不是一律跑不起来第二官方紧接着给出了失败时的做法说明官方把失败当成个别情况来处理而不是整类环境都被判了死刑。4.3 两句话要并列读不能只挑一句这两句话放在一起看才是官方的完整口径官方原话它回答的问题单独读会变成什么部分环境可能不支持 ARM 架构这套环境里有没有跑不起来的可能容易读成ARM 一律不支持M 系列大部分环境可直接运行失败时可设平台变量具体到 M 系列 Mac是什么情况容易读成Mac 上什么都能跑**只挑第一句会把部分读成全部只挑第二句会把大部分读成全部。**两句合起来才是官方口径大多数能直接跑少数失败时官方给了一条临时写法。至于某个具体环境在 arm64 上到底跑不跑得起来官方没有逐个列举本文也未实测。4.4 别的项目官方口径各不相同第二件事的关键在于**“官方说不说支持 ARM”是逐个项目去看的没有通用答案。**这一点在同类的 Web 靶场项目上体现得很清楚——它们连钉在哪个基础镜像上都不一样DVWA 官方 Dockerfile 的基础镜像是FROM docker.io/library/php:8-apache即 PHP 8见附表 A 第 10 行upload-labs 官方容器的基础镜像则是php:5.5-apache即 PHP 5.5见附表 A 第 11 行而 PHP 5.5 早在2016-07-21就已经结束支持PHP 官方 EOL 页末版 5.5.38见附表 A 第 12 行。这里不展开版本对照只说一句与本文有关的话这两个项目各自钉在不同的基础镜像上正说明支持不支持 ARM没有一个可以套用的通用答案。某台 Mac 上某个环境到底能不能跑得回到那个项目自己的官方文档里去看原话而不是拿另一个项目的结论来推。所以第二件事要读官方原话不能凭这个项目应该支持吧来猜。4.5 顺带交代一条常被忽略的事实Vulhub 官方还有一句常被忽略的话逐字引文见附表 A 第 4 行你不再需要安装独立的 docker-compose而是使用Docker 自带的 compose 命令来启动 Vulhub 环境。这句话与支持不支持 ARM没有直接关系但它常常和架构问题搅在一起**命令本身没被识别和容器起不来是两种完全不同的失败。**如果连启动命令都没跑对就不要急着把结论下成架构不兼容。站内老教程里常见的连字符写法docker-compose截至 2026-10-02官方已明确不再需要。本章可以带走的一句同一个平台有的项目官方明确表过态、有的没表态读官方原话别读想象。五、第三件事确认失败到底是架构还是别的5.1 官方列的前提里第一条是内存三件事里最容易被跳过的是第三件这次失败凭什么算到架构头上先把官方列的前提摆出来。Vulhub 官方注意事项的第一条是逐字引文见附表 A 第 1 行推荐使用至少1GB 内存的 VPS 或虚拟机注意这里的关键词是推荐和至少。它是一条资源前提和架构没有关系。本地机器内存紧张、同时开着别的东西、或者分配出去的空间不够都可能让一个环境起不来——这类失败看起来和架构问题一样都是起不来。5.2 同样是起不来原因可能完全不同把常见的几种情况并排放一放你看到的现象第一件事架构怎么看第三件事其他原因怎么看环境一直起不来命令像没被识别与架构关系不大先看启动命令写法对不对环境起来了又退出有可能与平台有关也要看内存等资源够不够环境在跑但打不开页面与架构关系不大属于访问方式层面的问题另见本号相关篇目同一套步骤换一台机器结果不同高概率与平台有关也要排除那台机器资源更紧张这张表想说的是**“起不来是一个现象不是一个原因。**把现象直接翻译成架构不兼容”跳过的恰恰是最该确认的第三件事。5.3 怎么把架构和别的分开一个朴素的顺序是先确认第一件事两边架构对不对得上再确认第三件事资源等前提够不够最后才看官方给的那条临时写法。理由很简单**官方给的那条临时写法是为了解决两边架构对不上这一类失败的。**如果这次失败根本是内存不够那么用它也只是换一种方式失败。先归类再动手。⚠️代码待验证# 只读动作看本机给容器环境分配了多少内存、当前还剩多少# 这一步的目的只是排除资源不足这一类原因不修改任何设置dockerinfo这条只看不改也不据此调整任何分配。完整版环境对照表这一章的同样是起不来、原因可能完全不同对照表加上第二章的 arm64 / amd64 架构说明、第四章的各项目官方口径一并收进资料包扫码即可获取本章可以带走的一句先把失败归类再动手内存等前提没过关时架构那一条临时写法帮不上忙。六、官方给的临时处理动作以及它的边界6.1 官方那条写法长什么样三件事确认完如果结论确实落在架构这一头官方给的临时写法是这一条逐字引文见附表 A 第 3 行⚠️代码待验证# 官方针对 Apple SiliconM 系列失败时给出的写法逐字# 仅在确认失败属于架构对不上时使用exportDOCKER_DEFAULT_PLATFORMlinux/amd64逐字读这条命令它把默认的目标平台设置成了linux/amd64。也就是说在它生效之后取镜像与运行容器时会按 amd64 这个目标平台来做而不是按本机原生的 arm64。6.2 它做了什么为什么不是变通了这里要解释清楚一层本机还是 arm64机器并没有变成 amd64。这条写法的作用是让流程改按另一套目标平台去准备两边之间因此需要一层额外的转换工作。这也解释了它的两个使用特征特征说明它是临时写法官方把它放在失败时这个前提下给出不是默认就该加它写在环境变量里一次设置作用于之后按默认平台执行的命令本文不展开它的实现细节也不给加了之后一定成功的说法——官方只说失败时可以这样写并没有说这样写之后每个环境都能跑起来。6.3 它的边界在哪把这条写法的边界说清楚比把它当成万能钥匙更重要第一**它只针对架构对不上这一类失败。**内存不够、命令写法不对、环境目录里那一步没做对这些都不在它的覆盖范围内第五章已经说过这一层。第二**它不改变部分环境可能不支持 ARM这个官方前提。**官方写下这句注意事项时这条临时写法也已经存在了——两者是同一位作者在同一份文档里给出的这一点本身就说明临时写法并不等于所有环境都被支持了。第三**它是否有效要看具体是哪个环境。**官方没有逐个环境列举结果本文也未实测因此不给任何某某环境加上就一定跑得起来的结论。6.4 两条容易被混进来的东西顺带把两条容易和架构混为一谈的东西分开。一是镜像拉不下来。那是取不到不是取到了但平台不对两者是不同的一段这类问题另见本号相关篇目本文一句带过。二是容器内监听的端口。这一点和架构没有关系但常被一起提起DVWA 官方容器内的 Web 服务器监听的是4280不是通常的 80官方原文 “instead of the usual port of 80”upload-labs 官方容器内则是80见附表 A 第 13、14 行。本文只作为事实引用冒号左右的含义不在这里展开。⚠️代码待验证# 官方现行写法空格的 docker composeDocker 自带的子命令dockercompose up-d# 若确认失败属于架构对不上再按官方常见问题加上平台变量exportDOCKER_DEFAULT_PLATFORMlinux/amd64# 官方给出的清理命令原文照抄本文不展开它删了什么dockercompose down-v本章可以带走的一句这条临时写法解决的是两边架构对不上它不改变官方部分环境可能不支持 ARM的前提也不是加了就一定能跑起来。七、把三件事串成一条确认顺序7.1 压成一句话在 M 系列 Mac 上跑靶场环境先确认三件事两边架构对不对得上、官方有没有表态支持 ARM、这次失败到底是架构还是别的——三件都过一遍再看官方那条临时写法。这个顺序是官方文档自己摆出来的官方注意事项里既写了部分环境可能不支持 ARM也写了推荐至少 1GB 内存一条讲平台、一条讲资源说明这两类本来就是分开的官方常见问题里又单独给了一条针对 M 系列的失败处理说明大部分能跑和少数要处理是并存的两件事。7.2 常见现象对照你看到的现象先确认哪一件事那件事该看什么命令像没被识别不算三件事里的任一件启动命令的写法对不对环境起来又退出第一件 第三件目标平台对不对得上、资源够不够环境在跑但页面打不开不属于本文范围访问方式层面的问题另见本号相关篇目换一台机器结果就不同第一件那台机器是什么架构官方文档里提到部分环境第二件官方原话怎么说别只读半句想直接加平台变量第三件先确认这次失败是不是架构引起的7.3 三件事确认清单⚠️代码待验证# 【三件事确认清单 · 只看不改】# 第一件 架构# 1. 本机是什么架构 uname -m# 2. 要用的镜像声明的目标平台是什么# 3. 两头对得上吗对不上 - 记下来进第二件# 第二件 官方口径# 4. 这个项目的官方文档怎么谈 ARM逐字读一遍# 5. 有没有把部分环境读成了全部# 第三件 失败归类# 6. 这次失败是起不来还是起来了又退# 7. 资源等前提过了吗官方注意事项第一条讲内存# 8. 确认属于架构 - 再看官方那条临时写法7.4 本文不覆盖什么第一不覆盖某个具体环境在 arm64 上的实际运行结果——官方只说大部分可直接运行本文未实测不给任何逐环境结论。第二不覆盖镜像的实际取用情况——镜像能否取到、取到的架构变体是哪一个属环境实测本文未实测这类问题另见本号相关篇目。第三不覆盖任何修复动作——本文只做三件事的确认与归类不给改配置、给权限、调资源的具体做法。第四不给任何具体报错文本、量级数字、利用步骤与绕过手法也不给这样设置就一定能跑起来的说法。完整版环境对照表这份三件事确认清单加上第三章的架构对照、第五章的失败归类表、第六章官方临时写法的边界一并收进资料包扫码即可获取本章可以带走的一句先在纸上把三件事走一遍比在终端里反复重试快得多确认属于架构再动那条临时写法。附表 A本文引用事实与官方出处对照表#事实照口径一手出处含 URL核验日期本文位置1逐字推荐使用至少1GB 内存的 VPS 或虚拟机Vulhub 官方 README中文NOTE 块 — https://raw.githubusercontent.com/vulhub/vulhub/master/README.zh-cn.md2026-09-16第 5 章2逐字部分环境可能不支持 ARM 架构同第 1 行NOTE 块2026-09-16第 4 章3逐字常见问题Apple SiliconM 系列大部分环境可直接运行失败时可用export DOCKER_DEFAULT_PLATFORMlinux/amd64同第 1 行常见问题2026-09-16第 4、6 章4逐字虽然所有 Vulhub 环境都基于 Docker compose 制作但你不再需要安装独立的 docker-compose而是使用 Docker 自带的 compose 命令来启动 Vulhub 环境。同第 1 行前置条件2026-09-16第 4 章5逐字命令序列curl -s https://get.docker.com/经管道交给sh→systemctl start docker→git clone --depth 1 https://github.com/vulhub/vulhub→cd vulhub/langflow/CVE-2025-3248→docker compose up -d清理docker compose down -vvulhub/langflow/CVE-2025-3248为官方示例目录同第 1 行快速开始2026-09-16第 6 章6逐字Vulhub 是一个开源的、即开即用的漏洞靶场环境集合。无需 Docker 基础只需一条命令即可快速启动用于安全研究、学习或演示的漏洞环境。同第 1 行2026-09-16第 1 章7逐字每个环境目录下都包含详细的 README请参阅以了解复现步骤和使用说明。同第 1 行2026-09-16第 3 章8Vulhub 仓库vulhub/vulhubowner 为 Organization创建于 2017-04-09截至 2026-10-02官方仓库最近一次 push 时间为 2026-09-16archived false即非归档状态GitHub API — https://api.github.com/repos/vulhub/vulhub2026-09-16第 4 章9第三方 Homebrew tapshivammathur/php运行于 Linux x86_64/arm64 与macOS arm64macOS Intel 不支持⚠️第三方 tap、非 PHP 官方本文只引用其支持范围不展开安装步骤官方 tap 仓库 README — https://github.com/shivammathur/homebrew-php2026-09-16第 2 章10DVWA 官方 Dockerfile 基础镜像 FROM docker.io/library/php:8-apacheDVWA Dockerfile — https://raw.githubusercontent.com/digininja/DVWA/master/Dockerfile2026-09-16第 4 章11upload-labs 官方容器基础镜像 php:5.5-apache不是 README 手装推荐的 5.2.17upload-labsdocker/Dockerfile— https://raw.githubusercontent.com/c0ny1/upload-labs/master/docker/Dockerfile2026-09-16第 4 章12PHP 官方 Unsupported Branches 页PHP 5.5 于2016-07-21EOL末版 5.5.38PHP 官方 EOL 页 — https://www.php.net/eol.php2026-09-16第 4 章13逐字for running DVWA in containers, the web server is listening on port 4280 instead of the usual port of 80即 DVWA 容器内监听4280不是 80DVWA 官方 README「Docker」— https://raw.githubusercontent.com/digininja/DVWA/master/README.md2026-09-16第 6 章14upload-labs 官方命令docker run -d -p 80:80 upload-labs:latest官方容器内端口80upload-labs 官方 README「2.3 Linux快速搭建」— https://raw.githubusercontent.com/c0ny1/upload-labs/master/README.md2026-09-16第 6 章15官方给出推荐至少 1GB 内存与部分环境可能不支持 ARM两条并列前提第 1、2 行并列得出平台与资源是两类不同的前提由第 1 行 第 2 行并列得出同一份官方 README2026-09-16第 5、7 章16未实测项某个具体环境在 arm64 上的实际运行结果——官方只说大部分环境可直接运行未逐个列举本文未实测故不写任何逐环境结论官方原文见第 3 行 本文未实测—本文未实测第 4、6、7 章17未实测项M 系列 Mac 上实际取到的镜像架构变体、以及DOCKER_DEFAULT_PLATFORM设置后的实际效果——官方未给结果说明本文未实测官方原文见第 3 行 本文未实测—本文未实测第 3、6 章附表 B术语速查表术语一句话解释指令集机器指令的约定不同指令集的程序无法互相直接执行arm64一套指令集也写作 aarch64M 系列 Mac 属于这一类amd64另一套指令集也写作 x86_64传统 Intel / AMD 机器属于这一类目标平台镜像被构建时面向的架构与系统组合如linux/amd64架构不兼容本机架构与镜像目标平台不是同一套程序读不懂镜像容器运行所依据的模板本机没有就要从远端取容器镜像运行起来的实例要区分起来过与还在跑架构模拟转译让一套指令集的程序在另一套指令集的机器上运行的额外处理DOCKER_DEFAULT_PLATFORM官方常见问题里给出的环境变量用于设置默认目标平台docker compose空格写法Docker 自带的 compose 子命令官方现行口径docker-compose连字符写法需独立安装的 compose 二进制截至 2026-10-02官方已说明不再需要三件事本文框架架构对不对得上 → 官方说不说支持 ARM → 失败是架构还是别的代码待验证本文标记该命令未在本机实际运行过写在最后这篇用到的资料写这篇时我把 Vulhub 官方 README 的 NOTE 块、常见问题与前置条件逐字读了一遍又回头看了两个 Web 靶场各自的基础镜像才确认部分环境可能不支持 ARM和M 系列大部分可直接运行这两句话必须并列着读——顺手整理了几份配套的东西M 系列 Mac 跑靶场三件事确认清单架构怎么看、官方口径怎么读、失败怎么归类靶场环境对照表DVWA、upload-labs 在 Windows / macOS / Linux 三平台的可行性与推荐路径Web 安全学习路线图从基础打牢到安全管理四个阶段各学什么常用靶场清单每个靶场练什么、适合哪个阶段资料是我自己整理的放在下面这个码上扫码即可获取添加时备注「靶场」优先通过。拿到之后建议先看三件事确认清单那一份先把架构不兼容从结论变回一个需要确认的问题再回头查卡住的那一头。
返回列表