实时查看其他用户执行的Linux Shell命令?


27

Linux中的root用户是否可以实时(或接近实时)查看由另一个通过终端或SSH登录的用户正在运行的shell命令?显然,它们存储在.bash_history中,但是仅在用户注销时才保存,也可以将其禁用。

编辑:理想情况下,可以轻松打开和关闭的内容。


ttyrpld看起来不错。在这个问题上推荐。serverfault.com/questions/40011/…–
hayalci

Answers:


16

作为根,您可以用一个简单的包装脚本替换它们的外壳,该脚本记录了他们的命令,然后将它们传递给真实的外壳。这仅在他们登录之前有效。


20
我们这样做是为了监视前一位雇主的被黑帐户。创建了“ / bin / bash”(注意空格),该内容是脚本命令的包装。像魅力一样工作:)
指挥官基恩(Keen)

非常聪明!+1
EMP,2009年

9

如果您想打断用户会话或需要合作,请使用sniffyscreen -x

但是请注意,对您的用户进行监视可能会受到法规的管制,甚至完全是非法的,具体取决于您当地的法规。


7

更换外壳非常容易,要修补外壳本身更好,但是您必须修补所有外壳。我们最喜欢的饼干使用此功能,作为奖励,他不会因禁用bash_history而烦恼自己。

ssh host /bin/sh -i  

Snoopy是exec函数的包装器,并记录已执行的任何 外部二进制文件(不是shell内置文件)

@大卫施密特的建议嗤之以鼻使用一种更好的方法,它轻拍伪终端。

ttysnoop使用相同的方法,但未维护。(我可能在使其记录ssh连接时遇到问题,无法记住)

您可以尝试修补ssh来记录会话,但是该修补程序很

pseudopodrootsh可用于记录合法的sudo。而shwatcr是另一回事监视器登录。


到底ssh host /bin/sh -i应该做什么?
Mike Pennington

史努比+1,虽然不完美,但可以满足我们的要求。
skinp 2012年

4

如果您正在合作,则可以在两个用户之间使用GNU屏幕 -让一个用户建立屏幕会话,然后让另一个用户使用screen -x

如果您想在其他用户不了解的情况下“监视”其他用户,则最好,最有效的解决方案可能是键盘记录器软件/硬件。


4

Sysdig是系统级探索的强大工具-这就是您想要的;)

例:

sysdig -i spy_users

分类:安全性

spy_users显示交互式用户活动

列出用户以交互方式(例如从bash)启动的每个命令以及用户访问的每个目录


2

您可以尝试bash-BOFH补丁。搜索周围的补丁。


1

我编写了一种方法,可以在不使用修补程序或特殊可执行工具的情况下,将所有“ bash”命令/内建命令记录到文本文件或“ syslog”服务器中。

部署非常容易,因为它是一个简单的shellscript,需要在“ bash”初始化时调用一次。

在此处查看方法:http : //blog.pointsoftware.ch/index.php/howto-bash-audit-command-logger


欢迎来到服务器故障!我们确实希望答案具有内容,而不是内容的指针。这样可以确保即使链接断开,答案也仍然可用。虽然从理论上讲这可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。
user9517支持GoFundMonica 2012年


1
function spy() { 
   ptsnum=`ps awfux | grep pt[s]\/"$1" | awk '/bas[h]/{print $2}'` ; 
   /usr/bin/strace -s 1000 -t -f -p $ptsnum 2>&1 3>&1 \
        | grep -Poi 'write\(...\"[[:print:]]{1,2}\"[.][.][.][,]..\)' ; 
}

[436] klikevil@epiphany ~ $ w<br>
 09:36:43 up 12:06,  6 users,  load average: 0.46, 0.29, 0.20<br>
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT<br>
klikevil pts/0    75.125.126.8     23:05    2:19m 10:33   0.18s cmd                                      <br>
klikevil pts/1    75.125.126.8     00:18    6:50m  0.06s  0.04s sshd: klikevil [priv]<br>
klikevil tty7     :0               09:02   17:07m  2:02   0.32s x-session-manager<br>
klikevil pts/2    :0.0             09:03    3:30   0.08s  0.08s bash<br>
klikevil pts/3    :0.0             09:03    0.00s  0.76s  0.00s w<br>
klikevil pts/4    :0.0             09:06    3:13   0.46s  0.00s /bin/sh /usr/bin/thunder<br>
[437] klikevil@epiphany ~ $ spy 2<br>
write(2, "e"..., 1)<br>
write(2, "c"..., 1)<br>
write(2, "h"..., 1)<br>
write(2, "o"..., 1)<br>
write(2, " "..., 1)<br>
write(2, "s"..., 1)<br>
write(2, "u"..., 1)<br>
write(2, "p"..., 1)<br>
write(2, " "..., 1)<br>
write(2, "d"..., 1)<br>
write(2, "o"..., 1)<br>
write(2, "g"..., 1)<br>
write(2, "\n"..., 1)<br>
^C<br>

如果您不介意通过一系列换行符进行排序,则似乎效果很好。


1

史努比用于轻量级命令记录。

如果要实时查看系统上执行的命令,可能就是这样。警告:史努比不是正确的审核解决方案,很容易被规避。

但是,如果您希望查看在终端中键入的每个字符,则必须使用其他工具。

披露:我目前是史努比的维护者。


-3

试试这个导出HISTTIMEFORMAT =“%T”,然后运行几个命令,然后运行“ history” ...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.