如何查看当前用户在所有会话/屏幕/byobu 终端中执行的所有命令?

如何查看当前用户在所有会话/屏幕/byobu 终端中执行的所有命令?

如果有 debian box,一些用户可以访问 root 帐户,其中一些用户打开 ssh 连接并开始执行命令,一些用户打开 screen 或 byobu 或其他类似工具来执行命令。

命令“历史记录”似乎没有获取已执行命令的完整列表。

获取所有已执行命令的最佳方法是什么?

答案1

这是一种黑客行为,但至少它有效。它要求您root在该服务器上拥有:

查看 的输出,ps aux我看到用户的 fork sshd,例如在本例中为 user mst

$ ps aux | grep ssh
mst      19325  0.0  0.0  76268  1920 ?        S    21:20   0:00 sshd: mst@pts/6

所以我像这样检查这个进程的文件描述符:

$ sudo ls -lha /proc/19325/fd
total 0
dr-x------ 2 root root   0 Aug 30 21:26 .
dr-xr-xr-x 7 mst  users  0 Aug 30 21:25 ..
lrwx------ 1 root root  64 Aug 30 21:26 0 -> /dev/null
lrwx------ 1 root root  64 Aug 30 21:26 1 -> /dev/null
lrwx------ 1 root root  64 Aug 30 21:26 11 -> /dev/ptmx
lrwx------ 1 root root  64 Aug 30 21:26 12 -> /dev/ptmx
lrwx------ 1 root root  64 Aug 30 21:26 2 -> /dev/null
lrwx------ 1 root root  64 Aug 30 21:26 3 -> socket:[138972]
lrwx------ 1 root root  64 Aug 30 21:26 4 -> socket:[138198]
lrwx------ 1 root root  64 Aug 30 21:26 5 -> socket:[138200]
lrwx------ 1 root root  64 Aug 30 21:26 6 -> socket:[138207]
lr-x------ 1 root root  64 Aug 30 21:26 7 -> pipe:[138212]
l-wx------ 1 root root  64 Aug 30 21:26 8 -> pipe:[138212]
lrwx------ 1 root root  64 Aug 30 21:26 9 -> /dev/ptmx

其中三个链接指向、/dev/ptmx和。由于用户的 shell 正在打印他输入的所有命令,以及这些命令的输出,因此我通过使用和过滤fd 编号上的系统调用来观察他的命令(因为是 的第二个链接)。stdinstdoutstderrstdoutstraceread1111/dev/ptmx

sudo strace -e read -s 256 -p 19325 2>&1 | grep 'read(11'

我可以看到用户输入了一个ls命令:

read(11, "l", 16384)                    = 1
read(11, "s", 16384)                    = 1

好吧,输出不太漂亮……但是可以用

答案2

最好的方法是使用auditd。您可以将其设置为记录某个用户发出的所有命令,或所有用户发出的所有命令,或特定命令的任何调用等。

的手册页auditctl将为您提供一些您可能需要的规则示例。此外,如果您不信任其他 root 用户,我建议您登录到其他人无权访问的单独服务器。

我还建议最好不要给出 root 密码,并且不允许以 root 身份进行 ssh 登录。相反,只允许登录用户自己的帐户并让他们sudo su成为 root。这也将使auditd 能够跟踪哪个用户做了什么。

相关内容