
后端前端人工智能RAG知识图谱知识管理搜索引擎【免费下载链接】utopiaWorlds first open-source enterprise world model.项目地址https://gitcode.com/gh_mirrors/ont/utopia点击查看免费下载Utopia 是一款开源的 enterprise world model 项目当前处于 v0.1 阶段。SECURITY.md 以已知但尚未解决的设计边界为主线诚实列出产品当前的安全能力清单从凭据静态加密、JWT 密钥自动生成、会话 Cookie 的 Secure 判定到数据库最小权限角色、Ask-the-Data 只读闸门与账号停用机制。本文将逐条展开这些机制的真实实现位置、对应环境变量与部署注意事项并补充仓库源码中的调用链与测试证据帮助你在上公网前把默认值改掉、把该备份的密钥备份好。一、先看威胁模型这不是一份漏洞报告SECURITY.md 开篇就划定了边界文档列出的不是已发现的漏洞而是设计尚未到达的地方places the design has not reached yet。理解这一定位对评估部署风险至关重要——它意味着以下章节描述的能力是当前版本的真实上限而非营销意义上的安全特性集。两个最核心的部署前须知默认数据库口令是utopia。默认端口绑定在回环地址127.0.0.1:1517见 config.rs 中postgres://utopia:utopialocalhost:1517/utopia的默认值因此宿主机之外无法直连。如果你改了UTOPIA_DB_BIND把端口暴露出去必须先把.env里的UTOPIA_DB_PASSWORD改掉否则等于把带默认口令的数据库直接挂到网络上。数据源的安全上限取决于它的授权grant范围。注册一个数据源属于部署级操作但连接串会到达该数据源被授权到的每一个 workspace。因此应只在需要看到该数据库的 workspace 上授权并且在连接串里直接使用只读数据库角色——下文的 SQL 闸门是纵深防御defence in depth不能替代数据源侧的最小权限。二、凭据静态加密Seal密钥不进库库泄漏 ≠ 凭据泄漏Utopia 对四类凭据做了落库前的 AES-256-GCM 加密LLM API key、Ask-the-Data 连接串、来源配置里的 token、API 来源的推送密钥。其威胁模型是库泄漏 ≠ 凭据泄漏一份pg_dump或一个只读库账号拿到的只是密文能同时读到数据目录和数据库的人即已经登上服务器的人不在防护范围内——那属于服务器访问控制的问题。2.1 格式与幂等设计实现位于 secrets.rs。密封格式为enc:v1: base64( nonce(12字节) ‖ 密文tag )要点幂等已带enc:v1:前缀的值再次seal会原样返回读写路径都不必先判断是否已加密见 seal 函数。旧行兼容没有前缀的值按明文读这是升级前落库的历史数据服务启动时由补封逻辑统一补密见下。每次加密随机 nonce测试a_secret_round_trips_and_never_repeatssecrets.rs断言同一个明文两次seal结果不同——AES-GCM 每次用全新 nonce防止密文重放比对。防篡改密文被改动哪怕一个字符或 base64 非法都会在open时报错而不是静默返回乱码——静默回一段乱码会让下游拿它去调外部接口错得更远见 open 函数 及测试a_tampered_value_does_not_open。2.2 密钥从哪来环境变量优先数据目录兜底密钥来源优先级main.rs环境变量UTOPIA_SECRET_KEY——32 字节接受 64 位十六进制或 base64 两种写法解析逻辑见 parse_key。数据目录下的secret.key——首次启动时用 CSPRNG 生成generate_key写入文件并设为 unix 0600 权限已有文件则读回解析secret_key_file。关键纪律密钥永远不进数据库。备份时要把数据目录和密钥一起带走——没有这把钥匙库里已密封的凭据将无法读取。反过来secret.key损坏或内容不对时服务会直接报错停下而不是静默生成新钥匙——否则库里已封的凭据全部打不开main.rs 的注释明确说明这一取舍。2.3 升级补封旧明文行在下次启动时自动补密utopia-store的 sealing.rs 提供backfill每次启动幂等执行判据是值没有enc:v1:前缀已封的不动。它扫描四处凭据存放点存放点字段补封逻辑llm_settingschat_api_key、embed_api_key、ocr_api_key、transcribe_api_keyseal_llm_settingsdata_sourcesconn_stringseal_data_sourcessourcesconfigJSON 中的凭据键、ingest_tokenseal_sources写入侧同样在源头上封密例如data_sources注册时直接seal(conn_string.trim())datasources.rssources更新时用seal_json_keys就地封住 JSON 配置里的凭据键sources.rs。注意密钥轮换不在当前版本。换钥匙 用旧钥匙读出、新钥匙写回是一次显式的迁移操作。三、认证与密钥JWT 首次启动自动生成密码 argon2 哈希3.1 JWT 签名密钥UTOPIA_JWT_SECRET留空时服务首次启动会用 CSPRNG 生成 32 字节密钥并落库。落库用COALESCE保证多实例并发启动时收敛到同一个值谁先写谁赢后来者拿回库里已有的那条ensure_jwt_secret——如果分先读、没有再写两步两个实例会同时读到 NULL 各写各的先写的那个从此在用一把已经不在库里的密钥它签发的 token 到另一个实例上全部失效。没有任何部署共享默认密钥。显式设置UTOPIA_JWT_SECRET则优先于库里那条密钥轮换与多实例显式对齐走这条路config.rs。JWT 采用sub用户 UUIDexp7 天有效期载荷签名密钥即state.jwt_secretauth.rs。3.2 会话 Cookie 的 Secure 判定会话 cookie 名为utopia_token属性含HttpOnly与SameSiteLaxSecure标志由 behind_tls 根据请求头X-Forwarded-Proto判定走 HTTPS 才打上Secure本地 HTTP 开发因此照常工作。多层代理时该头是逗号分隔的链取最左边即最初那一跳。伪造这个头没有攻击价值——只会让攻击者自己的 cookie 变得更严格。如果你的代理不发X-Forwarded-Proto头用UTOPIA_COOKIE_SECUREtrue强制打开config.rs。3.3 密码哈希密码使用argon2哈希Argon2::default() 每次随机的盐实现在 auth.rs模块注释明确标注认证argon2 密码哈希 JWTHttpOnly Cookie同时接受 Bearer。四、数据库回环绑定与可选的最小权限运行角色4.1 端口默认绑定回环默认127.0.0.1:1517应用容器通过 compose 网络访问数据库。这是默认不开公网的第一道闸门。4.2 可选的最小权限角色设置两个环境变量即可启用UTOPIA_APP_DB_PASSWORD——应用运行时角色口令UTOPIA_MIGRATION_URL——迁移专用连接串owner 身份。启用后应用以utopia_app角色连接只能读写业务表、对台账只增不改迁移则以 owner 身份运行。这一层挡的是应用自身的 bug、SQL 注入继承的权限以及泄漏出去的连接串日志、备份、误提交的.env。实现细节值得展开角色创建由 docker/init-app-role.sh 在数据库容器首次初始化时完成CREATE ROLE utopia_app LOGINGRANT CONNECT仅在数据目录为空的首启时执行既有部署不受影响未设置UTOPIA_APP_DB_PASSWORD时跳过并以 owner 身份运行。具体权限由迁移 0010_least_privilege_role.sql 授予utopia_app对 public schema 下所有表有 SELECT/INSERT/UPDATE/DELETE对序列有 USAGE/SELECT对函数有 EXECUTE唯独对audit_events台账 REVOKE 掉 UPDATE/DELETE/TRUNCATE——写得进、读得到改不动、删不掉。这样 0026 给台账加的不可变触发器对拿到应用连接串的人不再形同虚设想 DISABLE TRIGGER、改记录、ENABLE TRIGGER第一条 SQL 就报must be owner of table。迁移同时用ALTER DEFAULT PRIVILEGES让今后新建的表/序列/函数自动授权否则每加一张表应用就撞权限错误。注意其边界挡不住能登进服务器的人——容器内 psql 是 trust 认证免密即 superuser那一层属于服务器访问控制。配置侧的回落逻辑config.rsmigration_url未单独配置时回落database_url既有部署无需改动即可照常升级。另外有个值得注意的坑compose 里${UTOPIA_MIGRATION_URL:-}在变量未设时会传空串而非不传config.rs在环境变量层做了blank_is_unset过滤把空串按未设置处理否则 sqlx 会报relative URL without a base照 README 快速开始起的部署第一步就退出——对应测试a_blank_migration_url_falls_back_to_the_database_urlconfig.rs。五、数据源授权与 Ask-the-Data 三层只读闸门5.1 数据源只到达被授权的 workspace一个已注册的数据库只会被挂载mount到存在显式授权的知识库。在引入授权机制之前任何 base 管理员都能挂载任意已注册数据源这会跨租户cross tenants。因此在部署层面要遵守纪律只在需要该数据库可见的 workspace 上授权连接串本身用只读角色。5.2 Ask-the-Data 的三层只读闸门问数功能Ask-the-Data用三层防线保证语句过了解析器也写不进去解析器白名单——只放行白名单内的语句形态只读事务——查询在只读事务中执行强制行数上限——限制返回行数。即使某条语句绕过了解析器后两层仍保证其无法写入数据库。这正呼应 SECURITY.md 的定位SQL 闸门是纵深防御不是替代数据源侧最小权限的借口。六、账号管理停用而非删除用户账号采用软删除users.deactivated_at置位后该用户无法登录但台账ledger中该人的决策记录仍然可归属attributable。从源码看管理接口明确注释停用一个账号软删除见users.deactivated_atadmin_routes.rsOIDC 登录查询会过滤u.deactivated_at IS NULLoidc_routes.rsAPI 语义上 DELETE 表示这个人不再有访问权而非物理删除api/mod.rs。这一设计兼顾安全与审计撤销访问权的同时不破坏历史责任归属。七、漏洞报告流程如发现安全问题发邮件到securitydeeplethe.com而不要开公开 issue。邮件中请包含受影响的版本或 commit涉及的端点或组件复现步骤。预期在几天内收到确认携带修复的发布版本会致谢报告者除非你另有要求。八、上公网前的检查清单结合上文把 SECURITY.md 的部署须知整理成一份可勾选的清单改默认口令.env中UTOPIA_DB_PASSWORD必须从utopia改为强口令如需改UTOPIA_DB_BIND暴露端口先改口令再暴露。配凭据封印密钥设置UTOPIA_SECRET_KEY或保留首次启动生成的secret.key并把数据目录与密钥一起纳入备份——丢了钥匙库里已封凭据读不出来。TLS 环境下确认 Cookie Secure若代理不转发X-Forwarded-Proto设置UTOPIA_COOKIE_SECUREtrue。启用最小权限角色设置UTOPIA_APP_DB_PASSWORD与UTOPIA_MIGRATION_URL让应用以utopia_app受限角色运行台账只增不改。数据源最小授权连接串用只读数据库角色只在需要可见的 workspace 上授权。明确版本边界当前为 v0.1密钥轮换尚未内置换钥匙是一次显式迁移。相关文档与源码路径安全声明原文SECURITY.md中文版凭据静态加密实现crates/utopia-core/src/secrets.rs补封逻辑crates/utopia-store/src/sealing.rs配置与环境变量crates/utopia-core/src/config.rs认证与 Cookiecrates/utopia-server/src/auth.rs启动装配密钥加载crates/utopia-server/src/main.rs最小权限角色docker/init-app-role.sh、migrations/0010_least_privilege_role.sql赞分享后端前端人工智能RAG知识图谱知识管理搜索引擎【免费下载链接】utopiaWorlds first open-source enterprise world model.项目地址https://gitcode.com/gh_mirrors/ont/utopia点击查看免费下载相关推荐Open MCT 安全部署指南威胁模型、纵深防护与漏洞响应机制Open MCT 安全部署指南威胁模型、纵深防护与漏洞响应机制 Open MCT 是一个基于 Web 的航天任务控制框架以浏览器单页应用SPA形态运行并数据可视化前端code-graph-rag 安全模型解析威胁边界、信任假设与纵深防御实践code graph rag 安全模型解析威胁边界、信任假设与纵深防御实践 本文以 code graph rag 的 Security Model 文档 ht人工智能RAG知识图谱MCP 服务开发者工具Hyperresearch 16个子代理名册全解每个Agent的角色与模型分配Hyperresearch 16个子代理名册全解每个Agent的角色与模型分配 Hyperresearch 是一个 Agent 驱动的研究知识库agent人工智能深度研究AI AgentMCP 服务上一篇SillyTavern完全攻略解锁专业级AI聊天体验的终极秘籍下一篇HACS极速版终极教程3分钟实现智能家居插件高速下载创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考