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

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

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

即使用户从某些编辑器(例如 vim)执行 shell 命令,我也希望在日志文件中看到它们。

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

我应该寻找哪种 Linux 工具来解决这个问题?

答案1

将此行添加到负责登录的 pam 配置中(在基于 redhat 的发行版上为系统身份验证)

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>

唯一的缺点是它可能有点难以阅读,但它比大多数提出的解决方案要好得多,因为理论上它可以用来记录整个会话,包括所有缺点。

编辑:哦,您可以使用 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>

答案2

解决你问题的最佳方法是 Linux 的内置审计系统。使用man 8 auditd或查看此页面获取更多信息:http://linux.die.net/man/8/auditd

另外,您可以检查本教程- 虽然它稍微超出了你的问题范围,但它展示了审计系统是如何运作的。

答案3

一个鲜为人知但最棒的技巧就是使用 的内置审计功能sudo。Sudo 附带一个sudoreplay命令,可以轻松重播会话。它甚至可以中继vim会话(如您所建议的那样)。

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

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

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

    提示:为防止用户使用其他 shell 登录,请从 中删除这些其他 shell /etc/shells

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

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

答案4

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

  • yum 安装 psacct(红帽)
  • sudo apt-get 安装 acct

您可以显示有关用户命令/连接等的统计数据。

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

按命令名称搜索会计日志:$ lastcomm rm $ lastcomm passwd

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

相关内容