服务器命令记录

服务器审计脚本:会装哪些文件、怎么卸载

开启服务器侧命令审计,会在你的服务器上部署一个透明的审计脚本。 全部是可读的 Shell 脚本,没有二进制、没有常驻进程,可以先看源码再装, 也能一键卸载还原。

我们向你承诺

你要往服务器上(可能是生产环境)装东西,我们理解警惕。以下是硬承诺:

📜

全透明脚本

所有安装物都是可读的 Shell 脚本,你可以 cat 查看每一行,确认无恶意行为后再执行。

🧩

无二进制 / 无守护进程

不装二进制、不跑常驻服务、不装内核模块。只在执行命令时跑一段脚本;另外系统定时器(有 systemd 用 systemd,没有就用 cron)每分钟跑一次心跳,告诉团队这台机器还在线。

🗂️

只新增,不改写

用独立的配置文件(sshd_config.d),不覆盖你原有的 sshd 主配置。

👋

一键卸载

提供卸载脚本,执行后删除全部安装项、恢复 sshd 原状。

怎么安装

团队管理员先在控制台「命令审计」里点「生成安装令牌」,然后在要审计的服务器上用 root 执行:

curl -fsSL https://mistlab.dev/install-agent | sudo bash -s -- <团队 ID> <安装令牌>

控制台生成令牌后会直接给出填好的整条命令,复制过去就行。令牌只能用一次,30 分钟内有效;每台服务器各生成一个。

想先看脚本内容:curl -fsSL https://mistlab.dev/install-agent | less

注意:https://mistlab.dev/install 是另一个脚本,装的是电脑上用的 mist 命令行,不是这个审计脚本。

脚本会在服务器上放哪些文件

每一项放在哪、干什么、有没有影响、能不能卸:

#安装项位置作用影响可卸
1审计包裹脚本/etc/mist-agent/mist-audit-wrapper命令审计包裹脚本(先过审计再执行)对交互登录几乎没影响✅
2sshd 审计配置/etc/ssh/sshd_config.d/99-mist-audit.conf让非交互命令走审计包裹对交互登录几乎没影响✅
3审计脚本配置/etc/mist-agent/config保存这台机器的密钥和团队服务器地址(只有 root 能读)无✅
4管理命令/usr/local/bin/mist-agentmist-agent status / uninstall 入口无✅
5卸载命令/usr/local/bin/mist-agent-uninstall一键清理全部安装项——
6心跳定时器/etc/systemd/system/mist-agent-heartbeat.timer(和 .service)
没有 systemd 时:/etc/cron.d/mist-agent-heartbeat
每分钟报一次平安,控制台「服务器状态」靠它显示在线/离线每分钟一次很短的网络请求✅
7心跳记录/etc/mist-agent/last-heartbeat记下上次心跳的时间和结果,mist-agent status 会显示无✅
注意:第 1、2 项只影响直接带命令的 SSH(如 ssh 主机 "命令")——这种命令会先问一下团队规则再执行。正常登录进去敲命令、用 sftp 传文件都不受影响;登录后手动敲的命令目前不会被记录。

安装脚本按什么顺序执行

脚本严格按以下顺序执行,每一步都会打印当前动作:

  1. 用安装令牌把这台服务器加入团队

    用一次性安装令牌向团队服务端注册这台主机,拿到这台机器自己的密钥。令牌用过即失效。

  2. 写入配置

    把密钥和团队服务器地址写进 /etc/mist-agent/config,只有 root 能读。

  3. 安装审计包裹脚本

    写入 /etc/mist-agent/mist-audit-wrapper,一段可读的 bash:问规则、执行、上报。

  4. 添加 SSH 审计配置

    新建独立配置文件 99-mist-audit.conf,不改你原来的 sshd 主配置。

  5. 检查并重载 SSH 配置

    先检查配置能不能用,再只重载、不重启 sshd,不断开现有连接。检查不过就自动撤销前面的改动。

  6. 安装管理命令

    安装 mist-agent 命令与 mist-agent-uninstall 卸载命令,用于查看状态与干净卸载。

  7. 安装心跳

    装一个每分钟跑一次的定时器(systemd 定时器,没有 systemd 就用 cron),并马上发第一次心跳。两样都没有时会提醒你:命令审计照常工作,只是控制台会显示这台机器离线。

装好后怎么检查、怎么卸载

验证是否正常:

mist-agent status

查看本机注册状态、团队服务器能不能连上、上次心跳是否成功。

不再需要时,一键卸载:

mist-agent-uninstall

删除所有安装的文件,把 SSH 服务配置恢复原样。

它能做什么、做不到什么

一句话:命令审计是用来防手滑和提醒新人,挡不住存心绕过;要防人得配 agent 和账号权限。它不是保安,别把它当成唯一的防线。
能做到的:
  • 在 MistTerm 里从命令历史、命令片段、AI 建议或批量执行发出去的命令,命中团队规则会先被拦下或要你确认,能的话还会推荐团队认可的写法。
  • 装了 agent 的服务器上,root 用 ssh 主机 "命令" 直接执行的命令,会在服务器上再查一遍规则,并记下来;拦下时会告诉执行的人是哪条规则。
  • 可以给一个服务器分组下发规则,组里每台机器都按它查,以后加进这个分组的机器也自动生效。
做不到的:
  • 在 MistTerm 终端里直接敲的命令,MistTerm 目前不检查。
  • 登录进服务器以后敲的命令、非 root 账号执行的命令,服务器上不检查,也不记录。
  • 存心想绕过的人,换个写法(拆开写、换个工具、写进脚本再执行)就能躲过规则。
  • 有 root 权限的人可以直接把 agent 卸掉。
  • 团队服务器连不上时,命令照常执行,不检查也不记录,只会提示一句。
  • 「要确认」的规则,用 ssh 主机 "命令" 直接执行时没有地方确认,所以等于拦下。
真要防人:用账号权限管住谁能登哪台机器、谁有 root;在要管的服务器上装 agent;定期看命令记录。

记录范围和数据去向

生效范围:本审计仅对已安装 agent 的服务器生效。没装 Agent 的机器,本来就审计不到——这很正常。
记录哪些命令:目前只记录 root 账号通过 ssh 主机 "命令" 直接执行的命令(机器的密钥只有 root 能读)。其他账号照常执行、不记录;登录后手动敲的命令也还不记录。
会不会拦命令:命中团队规则(内置的危险命令、团队自己加的规则、下发到分组的规则)会被拦下,不执行,并告诉执行的人是哪条规则;「要确认」的规则在这里也是拦下。其他命令照常执行,执行完把结果记下来。团队服务器连不上时,命令照常执行,会提示这次没检查、也不记录。
数据去向:只把命令内容、执行人和执行时间,以及心跳里的版本号、主机名和本机 IP,发到你所在团队的服务器,不发给第三方。