Casvisor
审计

命令记录和命令规则

Casvisor会记下用户在SSH资产上执行的命令,不论是在网页终端里还是经由SSH网关,并能在你指定的命令执行之前把它拦下。RDP、VNC和Telnet会话没有命令记录。

两个页面都只对管理员开放:命令记录(/commands)和命令规则(/command-rules)。

怎么读出命令

交互式shell里,Casvisor在后端维护一块和用户终端一样大的虚拟屏幕,跟着会话走。用户按回车时,它从提示符末尾读到光标,读的是那一刻屏幕上显示的内容。所以记下来的就是实际执行的命令:

  • Tab补全、用方向键调出的历史命令、在行中间做的修改,都包含在内。
  • 折行的长命令和中文等字符都能读准。
  • 打开vim、top、less这类全屏程序时什么都不记。
  • shell不回显的输入(例如给sudo输入的密码)不在屏幕上,也不会被记下。

ssh命令行上带的命令,例如ssh web-01 'systemctl restart nginx',按客户端发来的原文记录,也包括scp -O和rsync在资产上执行的命令。

命令记录页面

每行是一条命令:时间、命令、用户、资产、客户端IP、会话,命中规则时还有规则和它的动作。可以按命令、用户、资产、客户端IP和会话搜索。会话列表里的命令记录列是每个SSH会话的命令数,点进去就是这个会话的命令。

命令规则

一条命令规则写明一个匹配规则,以及命令命中时怎么处理。

字段含义
组织、名称规则属于一个组织,作用于这个组织的资产。
匹配规则Go语法(RE2)的正则表达式。命令里任何位置匹配上就算命中,要匹配整条命令请用^和$。
动作Block(拦截)或Alert(告警)。
用户、用户组对谁生效。两个都不填,或者填*,表示所有人。
资产、资产标签对哪些资产生效。两个都不填,或者填*,表示组织里的所有资产。
启用关掉后这条规则不起作用。

规则对管理员同样生效。多条规则同时命中时,拦截优先于告警。

几个例子:

匹配规则命中
^\s*rm\s+-rf\s+/\s*$rm -rf /,不命中rm -rf /tmp/x
\b(shutdown|reboot|halt|poweroff)\b任何提到这几个词的命令
^\s*(mkfs|fdisk|parted)\b以这几个命令开头的命令

拦截

在交互式shell里,Casvisor不把回车传下去,而是发一个Ctrl+C,让这一行不执行就清掉,并在用户终端里显示一行红字:[Casvisor] The command is blocked by the rule: ...。对ssh命令行上带的命令,网关直接拒绝,提示casvisor: the command is blocked by the rule: ...,退出码为1。

这条命令以动作Block记下。

告警

命令照常执行,以动作Alert和命中的规则记下,可以在命令记录页面里找到。Casvisor不会为它另外发通知。

规则拦不住什么

规则看到的是输入的那一行命令,有办法绕过:把命令写进脚本再执行脚本,用变量或别名拼出命令,在全屏程序里执行,或者用规则没想到的命令。请把拦截当作防误操作的手段,权限本身仍然要尽量收窄。

在GitHub上编辑

本页内容