ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Firezone GUI 客户端开发与构建指南:Linux/Windows 环境搭建、打包与双进程调试

Firezone GUI 客户端开发与构建指南:Linux/Windows 环境搭建、打包与双进程调试 网络网络安全零信任后端【免费下载链接】firezoneBlazing-fast remote access项目地址https://gitcode.com/gh_mirrors/fi/firezone点击查看免费下载本指南以 rust/gui-client/README.md 为主线系统讲解 Firezone 桌面 GUI 客户端Tauri 应用在 Ubuntu 与 Windows 上的完整开发流程从 rustup、pnpm、mise 等工具链安装到pnpm build打包、Windows MSI 的 CI 签名再到 GUI 与 Tunnel service 双进程联调的运行与调试方法。读完本文你将能够在本地完成该客户端从零搭建、编译、打包到运行调试的全部操作并理解其底层 IPC、权限模型与测试验证方式。crate 定位桌面客户端 两个进程rust/gui-client是 Firezone 的桌面 GUI 客户端仓库。从 docs/intended_behavior.md 的架构说明可以看到它并非单进程应用而是由两个进程协作组成GUI 进程本 crate以登录用户的普通权限运行负责绘制系统托盘菜单与设置窗口、驱动登录流程并通过 IPC 与 Tunnel service 通信Tunnel servicefirezone-client-tunnel由安装包安装并作为特权服务运行Linux 为 root、Windows 为SYSTEM独占 TUN 设备、connlib、DNS 控制、设备 ID 持久化、高级设置与 MDM 托管策略以及 Windows 上的wintun.dll。IPC 在 Linux 上是 Unix domain socket在 Windows 上是命名管道named pipe。由于所有特权操作都集中在 Tunnel service 中GUI 进程自身永远不需要提权不会触发 UAC 弹窗。这一点贯穿了后续构建、打包与调试的几乎所有设计决策。源码布局上src-tauri/src 下可以看到与上述架构一一对应的模块controller.rsIPC 控制器、service.rsTunnel 服务、settings/设置、deep_link.rs浏览器深链回调、mdm_migration.rsMDM 迁移、package_identity.rsWindows 包身份等。Ubuntu 开发环境搭建在 Ubuntu 上原生编译 x86_64 Linux 版本需要依次完成以下步骤安装 rustupRust 工具链管理器安装 pnpm前端包管理器安装系统依赖库sudo apt-get install build-essential curl file pkg-config libgtk-3-dev libsoup-3.0-dev libayatana-appindicator3-dev librsvg2-dev libssl-dev libwebkit2gtk-4.1-dev libxdo-dev wget其中libgtk-3-dev与libwebkit2gtk-4.1-dev是 Tauri 在 Linux 上渲染 WebView 所需libayatana-appindicator3-dev用于系统托盘图标librsvg2-dev提供 SVG 渲染libxdo-dev供enigo/按键模拟类依赖使用。创建firezone-client系统组并把自己加入其中。生产环境中该组由安装器创建GUI 启动时会检查组成员身份因为 Tunnel service 的 IPC socket 仅对组可读sudo groupadd --system firezone-client sudo usermod -aG firezone-client $USER # 完成后请重新登录使组成员身份生效若跳过此步GUI 启动时会报“你不是firezone-client组成员”的错误——这也是 docs/intended_behavior.md 烟雾测试清单Smoke test checklist中特意验证的第一项。Windows 开发环境搭建Windows 上原生编译 x86_64 版本推荐使用 winget 安装以下工具括号内为对应命令PowerShell 7—winget install Microsoft.PowerShellVisual Studio C 构建工具MSVC 编译器 Windows SDK—winget install Microsoft.VisualStudio.2022.BuildTools --override --quiet --wait --add Microsoft.VisualStudio.Workload.VCTools --includeRecommendedrustup—winget install Rustlang.Rustupmise多语言版本管理工具—winget install jdx.miseSudo for WindowsWindows 11 24H2 及以上在“设置 系统 高级”中启用并配置为内联提权sudo config --enable normal。README 特别提醒新开的控制台不处理 ANSI 转义序列会弄乱 Tunnel service 的日志输出代码编辑器推荐方案见下文 推荐 IDE 设置。用 mise 管理 Node 与 pnpm 工具链node和pnpm的版本被固定在 rust/.tool-versions 中当前分别为 nodejs 24.13.0 与 pnpm 10.33.0由 mise 统一提供不需要单独安装。安装 mise 后在 PowerShell 7 中激活它并从rust/目录安装整套固定工具链# 为当前会话激活 mise mise activate pwsh | Out-String | Invoke-Expression # 持久化到 $PROFILE。-Force 用于创建尚不存在的 $PROFILE 及其目录。 # 注意$PROFILE 若位于 Documents\WindowsPowerShell\ 下说明你仍在 5.1而不是 7。 New-Item -ItemType File -Path $PROFILE -Force Add-Content $PROFILE mise activate pwsh | Out-String | Invoke-Expression # 追加 Tab 补全 mise completion powershell | Add-Content $PROFILE # 安装固定版本的工具node、pnpm、cargo-tauri 等 mise installmise install会读取仓库根目录的 mise.toml 及其 lockfile自动安装开发所需的一切工具含cargo-tauriCLI确保本地环境与 CI 完全一致。推荐 IDE 设置以下推荐来自 Tauri 默认 READMEVS CodeTauri 扩展提供tauri.conf.json配置校验与常用命令面板rust-analyzerRust 语言服务跨进程跳转、补全与 inline diagnostics构建与打包统一入口pnpm build构建最好从前端工具pnpm发起因为这样可以保证 TypeScript 与 CSS 在打包应用之前被正确编译。package.json见 package.json中的build脚本使用run-script-os按平台分发Linux/macOS 执行 build.sh先pnpm vite build打包前端资源再cargo build --release -p firezone-cli编译独立的firezoneCLI它是独立的 workspace 成员tauri build不会编译它需显式构建最后pnpm tauri build编译 Rust 并打系统安装包Windows 执行 build.bat流程完全相同其中firezone-cli.exe会在安装器打包时被重命名。# 构建 release 版本 pnpm build # Linuxrelease 可执行文件与 deb 包位于 workspace 的 target 目录下 stat ../target/release/firezone stat ../target/release/bundle/deb/*.deb # Windowsrelease 可执行文件与 MSI 安装包同样位于 target 目录 # 该 exe 无需安装即可直接运行 stat ../target/release/Firezone.exe stat ../target/release/bundle/msi/Firezone_0.0.0_x64_en-US.msi注意以上stat路径是相对rust/gui-client/目录的构建产物位置即rust/target/...首次构建后才会生成。package.json中还提供了build-debugWindows 上执行 build-debug.bat即tauri build --debug --bundles none只出 debug 版可执行文件、不打安装包以及dev见下文调试章节等脚本。安装包内容tauri.conf.json 视角tauri.conf.json 定义了各平台的打包细节理解它有助于排查产物缺失问题bundle.targets为[deb, msi, rpm]Linux deb 包会附带firezone-client-tunnel.servicesystemd 单元、sysusers.confsysusers.d 配置、firezone-client-tunnel与firezoneCLI二进制、三种 shell 的补全脚本及 metainfo 文件rpm 包结构类似Windows MSI通过 WiX 模板win_files/main.wxs与三个 fragmentservice.wxs、sparse-package.wxs、cli.wxs组装componentRefs依次引用RemoveOldFirezoneService卸载旧服务、FirezoneClientTunnelService安装 Tunnel 服务、SparsePackageMsix稀疏 MSIX 包、RegisterSparseExe注册稀疏可执行与FirezoneCli应用窗口为 900×500、不可调整大小、无系统装饰decorations: false、默认隐藏visible: false、透明背景启动后由代码控制显示时机CSP 安全策略被显式收紧default-src self仅允许连接ipc:、http://ipc.localhost与https://sentry.firezone.devscript-src self、object-src none、frame-ancestors none禁止 worker 与 manifest最大限度降低 WebView 被注入攻击的面。Windows 上运行与调试双进程联调一次完整的本地开发会话需要同时运行两个进程各自占用一个独立的 PowerShell 7 终端且每个终端都要先激活 misemise activate pwsh | Out-String | Invoke-Expression。1. 启动 Tunnel service在普通终端中运行mise run tunnel这实际执行firezone-client-tunnel run-interactive --skip-peer-verification。对应任务定义在 mise.toml 中先cargo build -p firezone-gui-client --bin firezone-client-tunnel随后在 Linux 上通过sudo -E -u root -g firezone-client提权运行Windows 上改用 Sudo for Windows。任务只会提升 service 二进制本身因此可以放心从普通 shell 启动——Windows 上会看到一次 UAC 提示。--skip-peer-verification的含义是在 debug 构建下Tunnel service 不再把 IPC 命名管道绑定到LocalSystem从而允许下方未安装的非特权 GUI 连接。若去掉该参数则会启用管道属主校验只能由安装了 GUI 的LocalSystem属主管道连接用于验证已安装场景。2. 启动 GUI 客户端在另一个**普通非提权**终端中运行mise run dev # 等价于: cargo tauri dev -- -- --skip-peer-verification # 也可以这样调用 exe 上的调试子命令例如: cargo tauri dev -- -- debug hostname # debug 版 exe 位于 workspace target 目录 stat ../target/debug/Firezone.exeGUI 侧同样跳过管道属主检查以接受来自非LocalSystem管道的连接。tauri dev会通过beforeDevCommand自行启动 Vite dev serverpnpm vite dev并把 WebView 指向devUrlhttp://localhost:1420见 tauri.conf.json因此开发模式下自带热重载前端路由也能正常工作无需单独的 frontend 构建。应用的配置与日志存放在C:\Users\$USER\AppData\Local\dev.firezone.client。注意pnpm dev不适用于本调试流程。它走的是 dev.bat其中硬编码了tauri dev且不转发任何参数——既无法传递--skip-peer-verification也不会启动提权的 Tunnel service。该调试流程无法覆盖的内容以 debug 构建 --skip-peer-verification方式运行是有意绕开命名管道属主检查的因此它不会覆盖生产环境的管道属主安全模型GUI ⇄LocalSystemTunnel service也不涵盖 MSI 打包、内置的 Windows 服务、稀疏包注册sparse-package registration以及已安装应用身份package identity等安装态行为。要端到端测试安装效果需要一个真实签名的 release MSI而它无法在本地生成安装包使用 AzureSignTool 配合 HSM 后盾的证书签名这些密钥仅存在于 CI 环境。请通过 GitHub CI 流水线产出签名 MSI见下文。当然pnpm build仍然可以在本地产出未签名MSI 用于冒烟检查构建本身是否正常。快速 UI 迭代模式无需 root、无需第二进程如果你只想快速调试界面mise.toml 额外提供了一个自包含的dev-mock任务mise run dev-mock # 等价于: cargo tauri dev -- -- --skip-portal-auth --mock-tunnel它以进程内 mock Tunnel service--mock-tunnel替代真实 service并用--skip-portal-auth解耦门户认证从而做到无 root、无独立进程的纯 UI 迭代。对应实现见 mock_tunnel.rs 与 auth.rsskip_portal_auth开关controller.rs在--mock-tunnel开启时会把 Tunnel socket 替换为进程内 mock。另有mise run screenshots任务用 Playwright 驱动的 vitest 批量渲染各界面截图到rust/gui-client/screenshots。Windows MSI 的 GitHub CI 签名Windows 发布产物包括 PR 构建在 GitHub CI 中使用AzureSignTool配合 Azure Key Vault 中HSM 后盾证书完成签名。GitHub 通过workload identity federation从 Entra 获取令牌——不存在需要创建或轮换的 client secret。Entra 侧的CodeSigning应用、其 GitHub OIDC 凭据以及 Key Vault 均由firezone/infra生产 Terraform workspace 管理。工作流消费的仓库变量repository variables共四个AZURE_CODESIGNING_CLIENT_IDAZURE_CODESIGNING_TENANT_IDAZURE_CODESIGNING_KEY_VAULT_URIAZURE_CODESIGNING_CERTIFICATE_NAME更换或续期不可导出的代码签名证书仍属于手工 Azure Key Vault 操作。特别提醒不要直接在门户中替换联合凭据而应更新并 apply 生产 Terraform 配置。平台支持范围Linux支持 Ubuntu 22.04 及以上架构支持aarch64与x86_64。WindowsTauri 声明支持 Windows 10 1803 及以上更老的版本可能可用但需手动安装 WebView2架构仅支持x86_64。macOS该 crate 也能在 macOS 上编译方便做 UI 工作见 dev.sh 的注释但 macOS不是官方支持平台且 Tunnel service 不在其上运行。安全模型与威胁模型GUI 客户端的安全模型记录在 docs/security.md核心结论如下客户端应当防护“设备在全程锁屏状态下被盗/被篡改、且及时上报并吊销令牌”这类场景无法防护恶意/越权的已登录用户、与用户同权限运行的恶意软件以及 Windows 解锁状态下拥有物理访问权的攻击者“防护”的准确定义是Windows 锁屏期间读取或改写令牌、篡改高级设置指向恶意服务器都应当是不现实的。在实现层面Windows 客户端的加密存储使用keyringcrate底层是 Windows 凭据管理 API凭据由派生自 Windows 密码的密钥保护同机其他用户即使系统解锁也无法读取但解锁状态下任何以同用户身份运行的进程都能读取。要抵御用户权限级别的恶意软件需要借助应用签名与更细粒度的凭据隔离——这是当前实现尚未覆盖的领域。登录令牌在 keyring 中存储于dev.firezone.client/token条目下Windows 凭据管理器 / Linux D-Bus Secret Service。更细粒度的行为约定包括 Linux 目录权限0o770/0o640/0o600的划分、Windows 下%PROGRAMDATA%的 DACL 保护、以及 Windows 通过稀疏 MSIX 包身份Firezone.Client.GUI授权命名管道访问的机制可参考 docs/intended_behavior.md。测试与行为验证测试方法论集中在 docs/intended_behavior.md包含Smoke test checklistUbuntu / Windows从全新 VM 安装 scripts/firezone-client-gui-install.shWindows 为 MSI开始依次验证组成员检查、欢迎页、浏览器登录、深链回跳、keyring 弹窗、“Firezone connected”通知、ifconfig.net显示网关 IP、退出/重启后令牌复用、不退出直接 Sign out 后恢复本机 IP以及导出日志 zip 的结构以firezone_logs_开头、根目录仅一个顶层目录防 tarbomb等升级 / 卸载检查清单Linux 用sudo apt-get remove firezone-client-guiWindows 走“添加或删除程序”GUI 状态机单实例运行第二次启动经 GUI IPC 管道把控制转交给已运行实例后退出若 GUI 正在其他登录会话运行则提示并退出状态分 Signed out / Signing in / Signed in 三种调试触发标志运行 exe 时传入--crash故意段错误、--error故意返回错误、--panic故意 panic可验证 Controller 的错误处理smoke-test子命令则让 GUI 无头运行以适配 CI日志输出到 stdout/stderr对应实现位于 firezone-gui-client.rs重置状态文档逐条列出 Windows 与 Linux 上需要删除的目录、注册表项与 keyring 条目如%LOCALAPPDATA%\dev.firezone.client\、%PROGRAMDATA%\dev.firezone.client\、Linux 下$HOME/.config/dev.firezone.client/、/var/lib/dev.firezone.client/等用于模拟首次安装/首次运行。小结Firezone GUI 客户端是一个典型的“Tauri 前端 特权 Rust 服务”双进程桌面应用构建链路以pnpm为统一入口工具链由 mise 依据 rust/.tool-versions 锁定开发调试强调“只提权 service、不提权 GUI”通过--skip-peer-verification在本地实现非安装态联调发布安全则依赖 CI 中 HSM 后盾证书的 Azure 签名体系。无论是日常 UI 迭代mise run dev-mock、完整构建打包pnpm build还是端到端安装验证签名 MSI smoke test上述流程与源码均可在本仓库中直接复现与验证。赞分享网络网络安全零信任后端【免费下载链接】firezoneBlazing-fast remote access项目地址https://gitcode.com/gh_mirrors/fi/firezone点击查看免费下载相关推荐voice-changer 开发者环境搭建指南服务端与前端客户端的源码构建、运行与调试voice changer 开发者环境搭建指南服务端与前端客户端的源码构建、运行与调试 本文是 voice changerリアルタイムボイスチェンジャー R人工智能语音模型推理服务深度学习从源码构建 Fleet本地开发环境搭建、前端资源打包与 Delve 调试实战指南从源码构建 Fleet本地开发环境搭建、前端资源打包与 Delve 调试实战指南 本篇技术指南面向想要为 Fleet 贡献代码或深入理解其构建体系的开发者完后端前端企业应用运维网络安全Unity HTFramework资源管理最佳实践Resource模块高效加载技巧Unity HTFramework资源管理最佳实践Resource模块高效加载技巧 Unity HTFramework是一个基于Unity的客户端快速开发框架游戏开发上一篇如何高效备份你的CSDN博客内容这个开源工具让你告别数据丢失焦虑下一篇Cherry Studio V2 破坏性变更日志Breaking Changes Log从碎片记录到发布说明的工程化实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表