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

我希望每一个键入命令到一个日志服务器。 已经configuration了syslog-ng将所有日志发送到日志服务器。

我感兴趣的任何和所有的方法来做到这一点。 我会期待一些关于stream氓用户和安全性的讨论,但是第一个主要目标是简单地获取会话logging。 所有会话都通过ssh,但是也应该logging控制台连接命令。 我希望这发生的任何壳,但主要的是bash。 (再次,我知道一个stream氓用户可以创build自己的shell …)

这不是你如何解决这个问题。 一旦你给shell访问一个用户,你委托该用户做任何他/她有适当的权限。 忘记命令日志logging,在任何Unix系统中执行命令的方式有很多。

例如,用户可以启动一个邮件客户端(例如,logging的唯一命令是pine ),在那里他select启动VI的“Compose”,并且从VI启动他希望通过的命令:!cmd 。 这个命令不会被logging到任何地方,从系统的angular度来看,它就像VI所调用的任何助手程序一样,比如grep或者sort。 shelllogging的唯一命令是pine

看来你真正想要的是所谓的审计 。 启用审计子系统并使用auditctl命令和审计包中的auditd守护程序来控制logging的内容。 更多信息请参阅auditctl(8)手册页。

请注意,logging每个进程实例化可能也不是最佳的。 例如,简单的./configure软件包(使用autotools创build)对于创build数千个stream程实例是显着的。 这会使审计日志充斥着太多的噪音,以致后来很难分析。

安装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或命令名称进行search。 像往常一样, man lastcomm更多的信息。

如果你愿意做一些C编程,你可以通过编写一个包含execve的库,logging到syslog,然后dlopen的包含真正的execve系统调用的库来完成。 然后在/ etc / environment中,将LD_PRELOAD设置为您所创build库的path。

在这里你需要小心地进入一个循环,所以你可能只想logging某些二进制文件的exec,或者排除其他文件(比如syslog)。

听起来像你正在寻找像rootsh ( 手册页 )的东西。 引用手册页:

Rootsh是shell的一个包装器,它将所有回显的击键和terminal输出logging到文件和/或syslog中。

尽pipe名字,这可以用于任何用户。

用户使用sudo(或类似的)来运行你所关心的命令,并且在某个级别上信任用户可能会更好。 当你越来越接近“全面控制”事情时,就越难追踪到他们在做什么。 例如,我最近一直在研究这样的工具。 大多数情况下,他们只是创build难以pipe理的日志,如果你有足够的用户和机器来做出这样的事情是值得的。 🙂

考虑你将要生成的所有信息。 你关心多less? 可能很less – 所以你生成的日志大多是毫无价值的。 审计你真正关心的事情,像其他人所暗示的,可能会让你达到一个更好的结局状态。

自4.1以来,Bash可以使用syslog支持进行编译。

这不是万无一失的(进程核算可能会更好),但主要是用户交互; 音量应该更易于pipe理,如果怀疑有exception,您可以切换到更详细的内容。

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

还有会做日志logging的sudosh( http://sudosh.sourceforge.net )。 您可以select将其作为用户定义的shell或通过sudo运行。 它跟踪每个会话的时间,所以你可以重放会议并观看(包括编辑会议和什么)。