如何捕获任何用户在Unix / Linux中input的所有命令?

我想要捕获任何用户在Unix / Linux中input的所有命令。 有几个select像使用脚本命令或acct实用程序。 但是,他们的问题是他们从terminal到文件愚蠢的一切,或只是提供命令的摘要。 我正在寻找一个实用程序,它将为我提供所有用户使用命令参数键入的命令。 可能吗? 有没有其他的select,如挂钩到系统调用来获得这个?

Solutions Collecting From Web of "如何捕获任何用户在Unix / Linux中input的所有命令?"

http://administratosphere.wordpress.com/2011/05/20/logging-every-shell-command/上,似乎有相当多的关于外壳审计的文章。

这考虑到用户历史文件的可靠性(并提供有关改进的信息),还讨论了内置到shell中的显式审计功能。 可能无论你使用的是什么环境,都没有启用审计功能编译的shell,但是如果你的源代码和配置可用(就像至少对于任何Linux发行版一样),它就不应该是“要保持其他配置的默认配置,就太难以启用审计功能。

这种方法仍然是开放的是通过某些程序中调用的其他命令或操作系统功能执行的命令。 所以,f.ex. 如果你有perl,或者机器上有其他可用的编程语言解释器,而你可能可以审计perl的执行,你就不能告诉用户告诉perl解释器做了什么。 另一方面,即使使用shell审计,我也不确定是否执行f.ex会执行perl执行。 从某个编辑器(如vi)中作为一个过滤器来处理编辑器中所写的内容。

所以,虽然shell审计会为你提供一层审计,但是除非你的环境比其他shell的执行更加紧密,否则这个收益并不是很高。

您应该考虑是否需要审计的用户实际上需要shell访问权限,如果不是,则为他们提供更有限的审计功能。 一个小的基于文本的菜单系统,也许?

我知道这是旧的,但我认为脚本命令可能是他正在寻找?

> script my_output_file Script started, file is my_output_file 

http://www-users.cs.umn.edu/~gini/1901-07s/files/script.html

你可以使用史努比记录器

它是什么:一个简单的库,它通过LD预加载插入到进程和execv / e()系统调用之间。 它将所有执行的命令记录到syslog。

它不是什么:安全/审计解决方案 – 它可以轻松绕过。 它不会记录内置的shell命令(因为它们是内部的,在调用的时候,shell不会创建新的进程 – 例如echo vs / bin / echo)。

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

抓住bash源码。 在exec调用周围添加一个记录器。 编译它。 登录后,将其作为第一个命令运行。

其他一切真的需要根源。

对于零星的录音我通常运行

ssh localhost | tee -a recording-session.log

这工作得很好。

抓住/home/victim/.bash_history/home/victim/.config/fish/fish_history

这些可以让你看到用户输入的args和bash和fish shell命令。

解决这个问题的最简单的方法是,如果你是根,并且可以通过重定向控制台本身来改变系统文件:

如果使用eg /bin/sh作为默认控制台,请将其移动到/bin/hs并在/bin/sh下创建一个如下所示的文件:

 #!/bin/hs ORIGSHELL=/bin/hs LOGFILE=/var/log/whatyoulike OPTIONS="$@" USER=`whoami` WEBUSER=web WILD=NO WARN=NO if [ "$USER" = "$WEBUSER" ] then #Ok then - are we doing something wild? for ARG in $@ do case "$ARG" in *\/lynx) WILD=YES ;; *\/wget) WILD=YES WARN=YES ;; *\/curl) WILD=YES WARN=YES ;; *\/links) WILD=YES WARN=YES ;; *\/fetch) WILD=YES WARN=YES ;; esac done #Are we wild? if [ "$WILD" = "YES" ] then HOST=`hostname` IPADDR=`resolveip -s $HOST` NETSTAT=`/usr/bin/nighthawk -ape --numeric-hosts --numeric-ports --tcp | grep 'ESTABLISHED web'` # Log it. echo "`date` [$USER] $IPADDR "$@"" >> $LOGFILE echo "$NETSTAT" >> $LOGFILE fi #Are we REALLY wild? if [ "$WARN" = "YES" ] then # Mail it! mail -s 'HACKATTACK' youremail@domain.com < $LOGFILE & fi fi # Now, do it. exec $OPERATION "$@" #we never come here... exit 0 

这只是一个例子,它如何被用来追踪透明的一切。 你可以做你想要检查的输入。 上面的脚本用来查找当前shell的创建者,所以你可以对它做出反应。 当然,上面的案例检查并不是我们真正使用的),但是一个很好的例子。

希望它有帮助,吉米

有审计,tty录音,黑客和免费工具来做你想做的事情,然而,根据你想要控制的环境规模,你可能会更好地使用审计和产品,专注于应对挑战你想解决。 一些非常受欢迎的金融服务客户使用的是Observe-IT , Centrify和PowerBroker

希望这可以帮助