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

Leo*_*Leo 13 security shell logging

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

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

Jul*_*ano 29

这不是你处理问题的方式。一旦您授予用户 shell 访问权限,您就委托该用户执行他/她有权执行的任何操作。忘记命令日志吧,在任何 Unix 系统中执行命令的方法太多了。

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

似乎您真正想要的称为auditing。启用审计子系统并使用审计包中的auditctl命令和auditd守护程序来控制记录的内容。更多信息在auditctl(8)手册页中。

请注意,记录每个进程实例化也可能不是最佳的。例如,一个简单./configure的软件包(使用 autotools 创建)以创建数千个进程实例而著称。这将使审计日志充满大量噪音,以至于以后很难对其进行分析。


Sam*_*cke 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
Run Code Online (Sandbox Code Playgroud)

您还可以按 tty 或命令名称进行搜索。像往常一样,man lastcomm了解更多信息。


mar*_*ark 11

如果您愿意进行一点 C 编程,您可以编写一个包含 execve 的库,将日志记录到 syslog,然后 dlopen 是包含真正的 execve 系统调用的库。然后在 /etc/environment 中,将 LD_PRELOAD 设置为您创建的库的路径。

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


And*_* M. 7

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

Rootsh 是 shell 的包装器,它将所有回显的按键和终端输出记录到文件和/或系统日志中。

尽管名称如此,但这可用于任何用户。