在我工作的地方,有多个用户通过 ssh 登录到任何服务器并执行各种任务。通常,他们只能在服务器上运行命令,而不能从服务器复制文件。是的,他们拥有 root 访问权限。
我需要找出的是用户从每个服务器传输出的数据量。换句话说,从用户登录到断开连接的那一刻,我需要找出他们的服务器和 ssh 服务器之间传输的总数据量,即发送和接收的数据量。这可能有助于跟踪可能已将大量敏感数据从服务器传输出的用户。服务器上有一些大文件。
答案1
由于用户拥有 root 访问权限,因此您在机器上执行的任何操作都不可信。您应该使用流量嗅探器,该嗅探器配置为查看受观察服务器的所有流量(通过在智能以太网交换机中设置监视端口)。流量嗅探器无法解密任何 SSH 会话的内容,但它可以看到交换的数据量,而这正是您感兴趣的。
我能想到两种方法将流量嗅探器上观察到的 TCP 流与用户关联起来。
如果您可以通过远程系统(SSH 客户端)的 IP 地址识别流量属于哪个用户,例如,如果客户端都有静态 IP 地址,请使用该地址。
否则,在被观察的服务器上配置远程系统日志,并从远程系统日志服务器上的身份验证日志中获取信息。每次打开会话时,OpenSSH 都会记录如下消息:
Feb 15 12:04:59 OZoNE sshd[20227]: Accepted publickey for **** from *.*.*.* port 48025 ssh2
由于 TCP 端口号和用户名都可以在系统日志消息中找到,因此您可以识别 TCP 流(由数据包嗅探器捕获)属于哪个用户。
对于第二种解决方案,用户仍然有机会破坏系统。由于他们拥有 root 访问权限,因此如果他们真的想的话,他们可以修改发送到远程 syslog 服务器的日志消息。不过,使用远程 syslog 服务器会让用户干扰日志记录变得更加困难,而且事后不可能再这样做。