如何logging用户执行的每个命令?

我想监视我的服务器中的所有用户的活动。

即使用户从像vim这样的编辑器执行shell命令,我也想在日志文件中看到它们。

我已经检查了工具acct,但是没有列出完整的命令。 (请纠正我,如果我已经错过了一些选项已经)。

我应该看哪个Linux工具来解决这个问题?

将此行添加到负责login的pamconfiguration(在基于redhat的发行版上的system-auth)

session required pam_tty_audit.so enable=* 

要找出做了什么,你可以使用。

 ausearch -ts <some_timestamp> -m tty -i 

这会产生这样的输出:

  type=TTY msg=audit(11/30/2011 15:38:39.178:12763684) : tty pid=32377 uid=root auid=matthew major=136 minor=2 comm=bash data=<up>,<ret> 

唯一的缺点是可能有点难以阅读,但比起大多数提出的解决scheme要好得多,因为从理论上讲,它可以用来logging整个会话,全部都是瑕疵。

编辑:哦,你可以使用aureport生成一个列表,可以更有帮助。

 # aureport --tty ... 12. 11/30/2011 15:50:54 12764042 501 ? 4294967295 bash "d",<^D> 13. 11/30/2011 15:52:30 12764112 501 ? 4294967295 bash "aureport --ty",<ret> 14. 11/30/2011 15:52:31 12764114 501 ? 4294967295 bash <up>,<left>,<left>,"t",<ret> 

您的问题的最佳解决scheme将是Linux的内置审计系统。 使用man 8 auditd审核或检查此页面的更多信息: http : //linux.die.net/man/8/auditd 。

另外,您可以查看本教程 – 虽然它略微超出了您的问题范围,但它显示了审计系统的工作原理。

你可以使用史努比 。

这是一个简单的命令日志库,而不是一个适当的审计解决scheme(容易规避)。 披露:我是目前的史努比维护者。

这是一个神奇的解决scheme: http : //www.cyberciti.biz/tips/howto-log-user-activity-using-process-accounting.html

  • yum install psacct(redhat)
  • sudo apt-get install acct

你可以显示关于用户命令/连接等的统计信息。

列出给定用户调用的所有命令…

按命令名称search记帐日志:$ lastcomm rm $ lastcomm passwd

等等,欲了解更多信息,请访问上面的链接..

一个鲜为人知的技巧,但最容易的就是使用sudo的内置审计function。 Sudo附带sudoreplay命令,使重放会话变得轻松。 它甚至会中继vim会话(如你所build议的)。

以下是几个简单步骤的使用方法:

  1. 在你的系统上安装sudosh ; 这是sudo命令的一个shell包装,它使得用户sudo自己(不是root ),并且可以用作系统loginshell
  2. 启用sudo日志logging。 编辑/etc/sudoers.d/sudoshDefaults log_output Defaults!/usr/bin/sudoreplay !log_output Defaults!/sbin/reboot !log_output

  3. 将此命令添加到/etc/shells以允许使用它login: /usr/bin/sudosh

    提示 :为防止用户使用其他shell进行login,请从/etc/shells删除其他/etc/shells

  4. 更新用户foobar以使用sudosh shell。 chsh -s /usr/bin/sudosh foobar

有关更多详细信息,请参阅: https : //github.com/cloudposse/sudosh/