Skip to content
user-no-foundPublic

About

基于 2FAuth 的飞牛 fnOS 原生验证码应用

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Fn2Auth

Fn2Auth 是原生飞牛验证码应用,通过飞牛统一网关免二次登录。每位飞牛用户有独立的 SQLite 数据库、APP_KEY、会话、缓存和可写目录;各实例使用同一个非 root 应用账号运行。

业务源码来自 user-no-found/Fnbak-2FAuth 的默认分支。Go 负责网关、实例及生命周期,PHP/Laravel 负责 OTP 校验和事务,Vue 负责界面。Node.js 只用于构建。

构建

先对选定的 BuildFlow、FnPackKit 运行各自的 setup.sh,使应用入口能读取共享工具路径。本应用的 ./setup.sh --help 列出已有工具的位置参数:Node、npm、Go、FrankenPHP、Composer、Playwright 的 package.json 和 Chromium。配置保存在忽略的 .build/environment.json,不会安装系统软件。

工具要求及校验来自 sources.lock.json、runtime.lock.json。project.json 是应用名称、版本、源码策略、架构和品牌资源的唯一来源。

./build.sh
./build.sh --channel stable --build-version 0.0.1

构建开始时解析指定 fork 的 HEAD 一次,所有步骤和架构使用同一提交。失败不回退官方仓库或旧源码。FN2AUTH_RESOLVED_SOURCE 可以显式指定本项目生成的 resolved.json 来重现一次构建;日常构建不设置该变量。

FPK 和 .sha256 文件平铺在 output/。源码工作树、对应源码包、日志、浏览器截图和检查报告在 .build/;缓存在 .cache/。中文来源、占位符、Vue 消息语法、适配锚点或安全检查失败时不发布产物。

生命周期入口和卸载向导由 FnPackKit 的声明生成。生命周期清理使用 root 权限; 业务入口通过 runuser 降权到应用账号,Go/PHP 服务仍以非 root 身份运行。包外层共享 清理脚本在卸载前验证选项、身份和目录,卸载后独立执行,不依赖已清除的程序文件。

“保留数据”保存配置、金库数据库、密钥和迁移快照,清理声明的缓存、会话、日志及临时 运行目录;“永久删除”清除当前应用的 data、conf、home、meta 和 temp 根目录。 未声明的数据在保留模式下保持原样。符号链接根目录、挂载点、身份或归属不匹配会阻止清理。

构建验证使用真实 FPK 和合成数据,由普通用户运行 ./build.sh。仅在第 6 阶段的隔离生命周期验证前检查管理员授权。 需要密码时,BuildFlow 输出独立提示行并暂停进度刷新,系统 sudo 在当前终端提示输入; 授权完成或取消后恢复显示。非交互验证需要预先取得同一会话的有效授权。root 权限仅用于隔离目录中的生命周期检查。 共享脚本依赖系统 /usr/bin/python3 和 /usr/sbin/runuser。验证包括安装前目标缺失、 卸载后程序已移除、保留/删除和重复回调,并运行原生 PHP、安全及浏览器检查。测试不会 操作已安装应用或真实金库。

安装与访问

根据 NAS 架构选择 AMD64 或 ARM64 FPK,在应用中心手动安装。应用入口位于 /app/fn2auth,使用飞牛桌面窗口与系统统一网关。图标是应用自己保存的蓝色验证码卡片与时钟资源。

应用仅允许当前可信飞牛用户访问本人的金库。NAS 管理员角色不授予读取其他人金库的能力。网关身份不会由浏览器参数选择,PHP 不接收平台 API token。

JS SDK 配置读取需要 fnOS 1.2.0401、飞牛 App 1.34.0;独立浏览器或宿主配置读取失败时保留可用界面。

扫码

界面保留实时摄像头、系统拍照、独立相册和手动输入。图片在设备本地识别,不默认上传整张照片。识别完成后由 PHP 校验,再由用户确认保存。

摄像头需要浏览器安全上下文及宿主授权。取消、离页、切后台、迟到权限和识别超时都会释放相关资源。拍照入口的 capture 是系统提示,具体设备的选择器行为由浏览器和宿主决定。PNG、JPEG、GIF、WebP 有文件头尺寸和资源限制;无法可靠确认尺寸的格式明确拒绝。

备份

备份为口令加密的 .age 文件,包含 OTP 账号。它不包含分组、图标和偏好设置,也不是整个应用的灾备镜像。口令长度为 10 至 1024 个 Unicode 字符,备份文件上限为 8 MiB。

恢复依次执行解密、无 secret 的预览、单独确认。预览令牌绑定业务 UID 和当前页面会话,五分钟有效,一次性消费。失败后不会自动重放导入;恢复旧备份不会倒退 HOTP 计数。

升级前的自动恢复点保存匹配的数据库与 APP_KEY,不包含整个 storage。中断或失败的迁移会阻止自动重试,需保留状态并人工检查。

配置和数据

安装后的可编辑配置为 TRIM_PKGETC/fn2auth.json。修改后需要重启应用。配置模板位于 packaging/fnos/app/etc/fn2auth.json.in,由 Go 加载并校验。

主要参数包括可信网关账号、允许的 Host/Origin、外部入口端口、最大活跃用户数、PHP 并发和内存、请求体大小、启动/停机/空闲超时及默认语言。php_memory_mb 是 PHP 请求限制,不代表整个应用的总内存硬上限。

程序与只读 PHP/Vue 资源位于 TRIM_APPDEST;用户数据位于 TRIM_PKGVAR/fn2auth/users/,临时运行文件位于 TRIM_PKGTMP/fn2auth。不要共享 APP_KEY、数据库或用户可写目录。

卸载默认保留数据;只有明确选择“永久删除所有 Fn2Auth 用户数据”才删除本应用持久数据。

平台边界

同一应用账号可访问各业务用户的文件;这不是不同 OS UID 的进程隔离。当前 NSS 和历史名称/UID/home/GID 绑定不能证明未观测的相同 UID 与名称重用。

本地浏览器和合成身份检查不能替代真实飞牛网关、多 NAS 账号、Android/iOS 相机、FN Connect 或 ARM64 硬件验收。

源码和许可

保留业务 fork 与组件的实际 AGPLv3 许可。包内 licenses/ 保存应用及原生运行时许可,/app/fn2auth/source.tar.gz 提供对应业务源码、组件、应用适配器和共享 Go 运行库。源码包排除用户数据、密钥、缓存和任务记录。

About

基于 2FAuth 的飞牛 fnOS 原生验证码应用

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages