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

vin*_*yag 6 unix linux shell

我想捕获任何用户在Unix/Linux中输入的所有命令.使用脚本命令或acct实用程序的选择很少.但是他们的问题是他们从终端到文件的所有内容都是愚蠢的,或者只是提供命令的摘要.我正在寻找一个实用程序,它将为我提供由任何用户键入的所有命令和命令的参数.可能吗?是否有任何替代方法,如挂钩系统调用来获得这个?

Tim*_*rap 7

我知道这是旧的,但我认为脚本命令可能是他想要的?

> script my_output_file
Script started, file is my_output_file
Run Code Online (Sandbox Code Playgroud)

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


小智 5

http://administratosphere.wordpress.com/2011/05/20/logging-every-shell-command/上似乎有一篇关于 shell 审计的好文章 。

这会考虑诸如用户历史文件的可靠性之类的事情(并提供有关改进的信息),但也讨论了内置于 shell 中的显式审计功能。可能是您使用的任何环境都没有在启用审计功能的情况下编译 shell,但是如果您有可用的构建源和配置(就像您至少对任何 Linux 发行版所做的那样),它应该'在将其余配置保持在默认发行版中的同时启用审计功能太难了。

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

因此,虽然 shell 审计将为您提供一层审计,但除非您的环境确实针对除 shell 之外的其他执行路径进行了严格控制,否则收益不会那么大。

您应该考虑要审核的用户是否确实需要 shell 访问权限 - 如果不需要,请为他们提供更有限的内容,以及审核功能。也许是一个基于文本的小型菜单系统?