跟踪用户对共享 SSH 密钥访问的操作

跟踪用户对共享 SSH 密钥访问的操作

想象一下,两个用户之间有一个共享的 ssh 密钥/(用户名和密码),我们称他们为 Bob 和 Alice。

Bob 已连接到服务器并执行了一些命令链,导致该主机上的一些关键数据被删除。

Alice 还连接到同一主机,使用相同的共享凭证来运行一些更新。

尽管我们有 sshd 身份验证日志 (/var/log/auth.log) 并且知道事件期间两个用户都已连接,但有没有办法区分哪个用户(连接,因为它们包含用户的 IP)负责该事件行动链?

答案1

这就是为什么许多公司制定了禁止人类帐户使用 ssh 密钥的政策……他们倾向于共享它们和/或不在其上放置密码,以便密钥本身基本上成为文件中的密码。

聪明的公司将使用安全产品来控制哪些用户可以使用 ssh 密钥、可以在哪里使用这些密钥以及允许在哪里开始和结束连接。

您正在允许已知的不安全、不可审计的行为,并试图在事后抓住它。最好的答案是彻底停止这种行为。

帮助您控制 ssh 密钥使用的同一安全产品也可用于在 ssh 会话上进行击键日志记录。这样,您仍然可以捕获独特的日志事件,显示连接的源和目的地,并查看用户键入的每个丑陋的按键......以及结果输出。当然,这是一个商业解决方案,但肯定会满足您的需求。

一种可行的方法是在每次登录帐户时使用唯一的 shell 历史文件。基本上,您可以在用户 .bashrc (或等效文件)中将 HISTFILE 定义为类似以下内容:

TIMEST=`date +%Y.%m.%d-%H%M%S`
SOURCETERM=` who am i | awk '{print $5}'`
HISTFILE=.sh_history-$TIMEST"_"$SOURCETERM

这会为每个会话生成一个唯一的 shell 历史文件,名称如下:

$HOME/.sh_history-2021.09.16-022345_(1.2.3.4)

这可能会满足您的需求,但如果用户明智,他们可以轻松更改或删除该文件,或者为自己分配不同的历史文件。

你正试图解决一个几乎不可能的问题。从系统的角度来看,同一用户只是登录两次。命令、进程、内存等都由一个 UID 拥有,并且可以由具有相同有效 UID 的任何其他人操作。

同样,正确的解决方案是从一开始就防止不安全行为。

相关内容