如何将每个Linux命令记录到日志服务器


13

我希望键入的每个命令都转到日志服务器。syslog-ng已配置为将所有日志发送到日志服务器。

我对执行此操作的所有方法都感兴趣。我希望对流氓用户和安全性进行一些讨论,但是第一个主要目标是简单地使会话记录下来。所有会话均通过ssh进行,但也应记录控制台连接命令。我希望对于任何shell都会发生这种情况,但是主要的是bash。(再次,我知道一个流氓用户可以创建自己的shell ...)

Answers:


29

这不是您解决问题的方式。一旦向用户授予外壳程序访问权限,即委托该用户执行他/她具有适当权限的任何操作。忘记命令日志,在任何Unix系统中执行命令的方法太多了。

例如,用户可以启动一个邮件客户端(pine例如,记录的唯一命令是),在那里他选择“ Compose”来启动VI,然后从VI中启动他想要通过的任何命令:!cmd。该命令不会记录在任何地方,从系统的角度来看,它就像VI调用的任何帮助程序一样,例如grep或sort。Shell记录的唯一命令是pine

看来您真正想要的是审计。启用审核子系统并使用审核包中的auditctl命令和auditd守护程序来控制记录的内容。有关更多信息,请参见auditctl(8)手册页。

注意,记录每个进程实例也可能不是最佳的。例如,./configure用于软件包的简单操作(使用自动工具创建)在创建数千个过程实例化方面尤为明显。这将使审核日志泛滥成灾,以至于以后很难对其进行分析。


13

安装acct软件包(软件包名称因发行版而异,也称为流程记帐)并使用lastcomm <username>

[mithrandir]-[/home/sernin]-[1951] % lastcomm sernin
tr                     sernin   pts/2      0.00 secs Fri Nov 12 12:02
zsh               F    sernin   pts/2      0.00 secs Fri Nov 12 12:02
tr                     sernin   pts/2      0.02 secs Fri Nov 12 12:02
zsh               F    sernin   pts/2      0.00 secs Fri Nov 12 12:02
fortune                sernin   pts/2      0.00 secs Fri Nov 12 12:02
xmodmap                sernin   pts/2      0.00 secs Fri Nov 12 12:02
xrdb                   sernin   pts/2      0.00 secs Fri Nov 12 12:02
sh                     sernin   pts/2      0.00 secs Fri Nov 12 12:02
cpp                    sernin   pts/2      0.00 secs Fri Nov 12 12:02

您也可以按tty或命令名称搜索。与往常一样,man lastcomm有关更多信息。


11

如果您愿意做一点C编程,则可以编写一个包装execve的库,并记录到syslog,然后dlopen包含真正的execve syscall的库来完成此操作。然后在/ etc / environment中,将LD_PRELOAD设置为您创建的库的路径。

您将要在此处进入循环时要小心,因此您可能只想记录某些二进制文件的执行程序,或排除其他二进制文件(如syslog)的日志。


实际上,这很有帮助。在execve包装程序上的第一次搜索会显示snoopy(sourceforge.net/projects/snoopylogger)。尽管有点冗长,但它似乎与我的要求接近。经过测试后,我发现需要将其投入生产环境中需要管理层的批准。(警告您所有邪恶的人)
Leo

@Leo由于版本2.0.0的Snoopy在执行./configure时支持自定义日志格式规范,因此,冗长不应该再成为问题。披露:史努比维护者在这里。
Bostjan Skufca 2014年

7

在我看来,您正在寻找rootsh之类的手册手册页)。引用手册页:

Rootsh是shell的包装程序,它将所有回显的击键和终端输出记录到文件和/或syslog中。

尽管有名称,它可以用于任何用户。


2

最好让用户使用sudo(或类似命令)运行您关心的命令,并在一定程度上信任用户。随着您越来越接近“完全控制”事物,跟踪它们的工作就变得越来越困难。例如,我最近一直在研究像这样的工具。通常,它们只是创建日志,如果您有足够的用户和计算机使这些事情变得值得,则很难管理。:)

考虑您将生成的所有信息。您关心多少?可能很少-因此您生成的日志几乎一文不值。像其他人所建议的那样,审核您实际关心的事情可能会使您处于更好的最终状态。


1

从4.1开始,可以在syslog支持下编译Bash。

这不是万无一失的(过程计费可能会更好),但主要是用户交互。音量应更易于管理,如果怀疑异常,可以切换到更详细的内容。

就是说,这是一种侵入性的方式,作为用户,我希望在您开始这样做之前先提出一个非常具体的隐私警告。


0

还有sudosh(http://sudosh.sourceforge.net)将进行会话日志记录。您可以选择将其作为用户定义的外壳运行,也可以通过sudo运行。它也跟踪每个会话的时间,因此您可以重播该会话并观看它(包括编辑会话等)。

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.