主机安全健康检查Skill healthcheck

这个技能专注于主机安全硬化和风险评估,特别针对运行 Otto 的部署环境。它通过安全审计、防火墙配置、更新状态检查、风险容忍度评估和定期监控,帮助用户确保主机安全,并优化其风险姿态,提高整体安全水平。关键词:主机安全、风险评估、Otto 部署、安全审计、防火墙硬化、SSH 配置、更新管理、定期监控。

安全审计 0 次安装 0 次浏览 更新于 3/24/2026

name: 健康检查 description: 用于 Otto 部署的主机安全硬化和风险容忍度配置。当用户请求安全审计、防火墙/SSH/更新硬化、风险姿态、暴露审查、Otto 定时任务调度用于定期检查,或在运行 Otto 的机器(笔记本电脑、工作站、Pi、VPS)上进行版本状态检查时使用。

Otto 主机硬化

概述

评估并硬化运行 Otto 的主机,然后将其与用户定义的风险容忍度对齐,而不断开访问。使用 Otto 安全工具作为首要信号,但将操作系统硬化视为一组独立的、明确的步骤。

核心规则

  • 推荐使用最先进的模型(例如 Opus 4.5、GPT 5.2+)运行此技能。代理应自检当前模型,如果低于该级别,建议切换;不要阻止执行。
  • 在任何状态更改操作前需要明确批准。
  • 未经确认用户连接方式,不要修改远程访问设置。
  • 优先使用可逆的、分阶段的更改,并附带回滚计划。
  • 绝不声称 Otto 更改主机防火墙、SSH 或操作系统更新;它不这样做。
  • 如果角色/身份未知,仅提供推荐。
  • 格式化:每组用户选择必须编号,以便用户可以用单个数字回复。
  • 推荐系统级备份;尝试验证状态。

工作流程(按顺序遵循)

0) 模型自检(非阻塞)

在开始之前,检查当前模型。如果它低于最先进水平(例如 Opus 4.5、GPT 5.2+),建议切换。不要阻止执行。

1) 建立上下文(只读)

在询问前尝试从环境中推断 1-5。如果需要确认,优先使用简单、非技术性问题。

确定(按顺序):

  1. 操作系统和版本(Linux/macOS/Windows),容器 vs 主机。
  2. 权限级别(root/admin vs 用户)。
  3. 访问路径(本地控制台、SSH、RDP、tailnet)。
  4. 网络暴露(公共 IP、反向代理、隧道)。
  5. Otto 网关状态和绑定地址。
  6. 备份系统和状态(例如 Time Machine、系统映像、快照)。
  7. 部署上下文(本地 Mac 应用、无头网关主机、远程网关、容器/CI)。
  8. 磁盘加密状态(FileVault/LUKS/BitLocker)。
  9. 操作系统自动安全更新状态。 注意:这些不是阻塞项,但强烈推荐,尤其是如果 Otto 可以访问敏感数据。
  10. 使用模式,用于具有完全访问权限的个人助理(本地工作站 vs 无头/远程 vs 其他)。

首先询问一次运行只读检查的权限。如果授予,默认运行它们,并仅对无法推断或验证的项提问。不要询问运行时或命令输出中已可见的信息。保持权限询问为单个句子,并将后续所需信息列为无序列表(不编号),除非您正在呈现可选择的选项。

如果必须询问,使用非技术性提示:

  • “您在使用 Mac、Windows PC 还是 Linux?”
  • “您是直接登录机器,还是从另一台计算机连接?”
  • “这台机器可以从公共互联网访问,还是仅在您的家庭/网络中?”
  • “您启用了备份吗(例如 Time Machine),并且它们是最新的吗?”
  • “磁盘加密是否开启(FileVault/BitLocker/LUKS)?”
  • “自动安全更新是否启用?”
  • “您如何使用这台机器?” 示例:
    • 与助理共享的个人机器
    • 为助理专用的本地机器
    • 远程访问的专用远程机器/服务器(始终在线)
    • 其他?

只有在系统上下文已知后才询问风险概况。

如果用户授予只读权限,默认运行适用于操作系统的检查。如果没有,提供它们(编号)。示例:

  1. 操作系统:uname -a, sw_vers, cat /etc/os-release
  2. 监听端口:
    • Linux:ss -ltnup(或 ss -ltnp,如果 -u 不支持)。
    • macOS:lsof -nP -iTCP -sTCP:LISTEN
  3. 防火墙状态:
    • Linux:ufw status, firewall-cmd --state, nft list ruleset(选择已安装的)。
    • macOS:/usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstatepfctl -s info
  4. 备份(macOS):tmutil status(如果使用 Time Machine)。

2) 运行 Otto 安全审计(只读)

作为默认只读检查的一部分,运行 otto security audit --deep。仅当用户请求时才提供替代方案:

  1. otto security audit(更快,非探测)
  2. otto security audit --json(结构化输出)

提供应用 Otto 安全默认值(编号):

  1. otto security audit --fix

明确说明 --fix 仅收紧 Otto 默认值和文件权限。它不更改主机防火墙、SSH 或操作系统更新策略。

如果浏览器控制启用,推荐在所有重要账户上启用 2FA,优先硬件密钥,SMS 不足够。

3) 检查 Otto 版本/更新状态(只读)

作为默认只读检查的一部分,运行 otto update status

报告当前通道和是否有更新可用。

4) 确定风险容忍度(在系统上下文后)

请用户选择或确认风险姿态和任何必需的开放服务/端口(以下编号选项)。 不要固定到固定配置文件;如果用户偏好,捕获要求而不是选择配置文件。 提供建议配置文件作为可选默认值(编号)。注意大多数用户选择家庭/工作站平衡:

  1. 家庭/工作站平衡(最常见):防火墙开启,具有合理的默认值,远程访问限制到 LAN 或 tailnet。
  2. VPS 硬化:默认拒绝入站防火墙,最小化开放端口,仅密钥 SSH,无 root 登录,自动安全更新。
  3. 开发人员便利性:允许更多本地服务,明确暴露警告,仍进行审计。
  4. 自定义:用户定义的约束(服务、暴露、更新频率、访问方法)。

5) 制定补救计划

提供一个包括以下内容的计划:

  • 目标配置文件
  • 当前姿态摘要
  • 与目标的差距
  • 逐步补救与确切命令
  • 访问保留策略和回滚
  • 风险和潜在锁定场景
  • 最少权限说明(例如,避免管理员使用,在安全处收紧所有权/权限)
  • 凭证卫生说明(Otto 凭证位置,优先磁盘加密)

始终在更改前显示计划。

6) 提供执行选项

提供以下选择之一(编号以便用户可以用单个数字回复):

  1. 为我做(引导式,逐步批准)
  2. 仅显示计划
  3. 仅修复关键问题
  4. 导出命令供以后使用

7) 执行并确认

对于每个步骤:

  • 显示确切命令
  • 解释影响和回滚
  • 确认访问将保持可用
  • 在意外输出时停止并请求指导

8) 验证和报告

重新检查:

  • 防火墙状态
  • 监听端口
  • 远程访问仍然有效
  • Otto 安全审计(重新运行)

提供最终姿态报告并注意任何延迟项。

必需确认(始终)

需要明确批准:

  • 防火墙规则更改
  • 打开/关闭端口
  • SSH/RDP 配置更改
  • 安装/移除软件包
  • 启用/禁用服务
  • 用户/组修改
  • 调度任务或启动持久性
  • 更新策略更改
  • 访问敏感文件或凭证

如果不确定,询问。

定期检查

在 Otto 安装或首次硬化后,运行至少一次基线审计和版本检查:

  • otto security audit
  • otto security audit --deep
  • otto update status

推荐持续监控。使用 Otto cron 工具/CLI 调度定期审计(网关调度器)。未经明确批准,不要创建调度任务。将输出存储在用户批准的位置,并避免日志中的秘密。 当调度无头 cron 运行时,在输出中包含一个说明,指示用户调用 healthcheck,以便可以修复问题。

调度必需提示(始终)

在任何审计或硬化后,明确提供调度并要求直接响应。使用短提示如(编号):

  1. “您希望我通过 otto cron add 调度定期审计(例如每日/每周)吗?”

如果用户说是,询问:

  • 频率(每日/每周)、首选时间窗口和输出位置
  • 是否也调度 otto update status

使用稳定的 cron 作业名称,以便更新是确定性的。优先使用确切名称:

  • healthcheck:security-audit
  • healthcheck:update-status

在创建前,otto cron list 并匹配确切的 name。如果找到,otto cron edit <id> ...。 如果未找到,otto cron add --name <name> ...

还提供定期版本检查,以便用户可以决定何时更新(编号):

  1. otto update status(推荐用于源签出和通道)
  2. npm view otto version(发布的 npm 版本)

Otto 命令准确性

仅使用支持的命令和标志:

  • otto security audit [--deep] [--fix] [--json]
  • otto status / otto status --deep
  • otto health --json
  • otto update status
  • otto cron add|list|runs|run

不要发明 CLI 标志或暗示 Otto 强制执行主机防火墙/SSH 策略。

日志记录和审计追踪

记录:

  • 网关身份和角色
  • 计划 ID 和时间戳
  • 批准的步骤和确切命令
  • 退出代码和修改的文件(尽力而为)

编辑秘密。绝不记录令牌或完整凭证内容。

内存写入(条件性)

仅当用户明确选择加入且会话是私有/本地工作空间时才写入内存文件 (根据 docs/reference/templates/AGENTS.md)。否则提供编辑的、可粘贴的摘要,用户可以决定保存到其他地方。 遵循 Otto 压缩使用的持久内存提示格式:

  • 将持久笔记写入 memory/YYYY-MM-DD.md

在每次审计/硬化运行后,如果选择加入,将短的、日期的摘要追加到 memory/YYYY-MM-DD.md (检查了什么、关键发现、采取的行动、任何调度的 cron 作业、关键决策,以及所有执行的命令)。仅追加:绝不覆盖现有条目。 编辑敏感主机详细信息(用户名、主机名、IP、序列号、服务名称、令牌)。 如果有持久偏好或决策(风险姿态、允许的端口、更新策略),也更新 MEMORY.md(长期内存是可选的,仅在私有会话中使用)。

如果会话无法写入工作空间,请求权限或提供确切的条目,用户可以粘贴到内存文件中。