开启服务器侧命令审计,会在你的服务器上部署一个透明的审计脚本。 全部是可读的 Shell 脚本,没有二进制、没有常驻进程,可以先看源码再装, 也能一键卸载还原。
你要往服务器上(可能是生产环境)装东西,我们理解警惕。以下是硬承诺:
所有安装物都是可读的 Shell 脚本,你可以 cat 查看每一行,确认无恶意行为后再执行。
不装二进制、不跑常驻服务、不装内核模块。只在执行命令时跑一段脚本;另外系统定时器(有 systemd 用 systemd,没有就用 cron)每分钟跑一次心跳,告诉团队这台机器还在线。
用独立的配置文件(sshd_config.d),不覆盖你原有的 sshd 主配置。
提供卸载脚本,执行后删除全部安装项、恢复 sshd 原状。
团队管理员先在控制台「命令审计」里点「生成安装令牌」,然后在要审计的服务器上用 root 执行:
控制台生成令牌后会直接给出填好的整条命令,复制过去就行。令牌只能用一次,30 分钟内有效;每台服务器各生成一个。
想先看脚本内容:curl -fsSL https://mistlab.dev/install-agent | less
注意:https://mistlab.dev/install 是另一个脚本,装的是电脑上用的 mist 命令行,不是这个审计脚本。
每一项放在哪、干什么、有没有影响、能不能卸:
| # | 安装项 | 位置 | 作用 | 影响 | 可卸 |
|---|---|---|---|---|---|
| 1 | 审计包裹脚本 | /etc/mist-agent/mist-audit-wrapper | 命令审计包裹脚本(先过审计再执行) | 对交互登录几乎没影响 | ✅ |
| 2 | sshd 审计配置 | /etc/ssh/sshd_config.d/99-mist-audit.conf | 让非交互命令走审计包裹 | 对交互登录几乎没影响 | ✅ |
| 3 | 审计脚本配置 | /etc/mist-agent/config | 保存这台机器的密钥和团队服务器地址(只有 root 能读) | 无 | ✅ |
| 4 | 管理命令 | /usr/local/bin/mist-agent | mist-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 会显示 | 无 | ✅ |
ssh 主机 "命令")——这种命令会先问一下团队规则再执行。正常登录进去敲命令、用 sftp 传文件都不受影响;登录后手动敲的命令目前不会被记录。脚本严格按以下顺序执行,每一步都会打印当前动作:
用一次性安装令牌向团队服务端注册这台主机,拿到这台机器自己的密钥。令牌用过即失效。
把密钥和团队服务器地址写进 /etc/mist-agent/config,只有 root 能读。
写入 /etc/mist-agent/mist-audit-wrapper,一段可读的 bash:问规则、执行、上报。
新建独立配置文件 99-mist-audit.conf,不改你原来的 sshd 主配置。
先检查配置能不能用,再只重载、不重启 sshd,不断开现有连接。检查不过就自动撤销前面的改动。
安装 mist-agent 命令与 mist-agent-uninstall 卸载命令,用于查看状态与干净卸载。
装一个每分钟跑一次的定时器(systemd 定时器,没有 systemd 就用 cron),并马上发第一次心跳。两样都没有时会提醒你:命令审计照常工作,只是控制台会显示这台机器离线。
验证是否正常:
查看本机注册状态、团队服务器能不能连上、上次心跳是否成功。
不再需要时,一键卸载:
删除所有安装的文件,把 SSH 服务配置恢复原样。
ssh 主机 "命令" 直接执行的命令,会在服务器上再查一遍规则,并记下来;拦下时会告诉执行的人是哪条规则。ssh 主机 "命令" 直接执行时没有地方确认,所以等于拦下。ssh 主机 "命令" 直接执行的命令(机器的密钥只有 root 能读)。其他账号照常执行、不记录;登录后手动敲的命令也还不记录。