【问题标题】:Logging terminal commands记录终端命令
【发布时间】:2010-09-25 17:23:23
【问题描述】:

有没有办法记录(/var/log)用户在 Unix shell 中执行的命令?

【问题讨论】:

  • @dmckee:*nix 是什么?一种引用 Unix 的方式?还有什么?

标签: linux unix logging shell


【解决方案1】:

假设您这样做是出于安全目的,请查看流程记帐。您没有说您使用的是哪个 UNIX 变体,但对于 Linux,请查看 http://www.gnu.org/software/acct/ 请注意,您将生成大量数据,因为进程记帐会写入有关在系统范围内运行的每个命令的数据(它是内核功能) .您的发行版可能已经有实用程序;在 Debian 中检查 'acct' 包。

如果您只是想记录您所做的事情,以便稍后返回并查看它,脚本(如在另一个答案中)或屏幕(使用 -L)将提供更好的解决方案。但是,它们不适用于安全审计,因为绕过它们很简单:只需运行一个 shell 脚本。此外,行编辑会使文件变得一团糟。诅咒应用(比如文本编辑器)更糟糕。

此外,如果您强迫您的用户通过例如脚本,您最终可能会捕获信息(例如,电子邮件),您拦截这些信息可能是非法的。

【讨论】:

  • 另一个选项 - sudosh 或其他等效项。不确定它们与脚本相比有多大好处,但可能值得一提。
【解决方案2】:

进程记帐是要走的路,尽管它会占用大量磁盘空间。除非你有一个非常笨拙的盒子,否则我不会让它继续运行,但它对于解决问题非常有用,因为它基本上跟踪每个进程,声称更简单的“ps 快照”工具无法匹配。

你基本上用accton /var/account/pacct打开它,然后内核写入退出的每个进程的详细信息,包括:

  • 进程名称(不幸的是,不是 args)。
  • 开始时间。
  • 经过的时间。
  • 用户和系统 CPU 时间。
  • 退出代码。
  • 内存、I/O、故障和交换统计信息。
  • 进程 ID。
  • 父进程 ID。

还有一些其他的东西。

你用一个赤裸裸的accton 关闭它,所以你们所有嘲笑 Windows 使用 Start 按钮关闭的人,哈哈! :-)

可以记录的记录有两种变体,v1 和 v3 - 请确保您使用的是最新的流程会计软件和 v3 记录,因为它们包含更多有用的信息。 /usr/include/linux/acct.h 文件显示了你可以从那里得到什么。

记录都是固定大小的(无论版本),易于处理。

我们刚刚为我们的性能监控软件完成了一个 Linux 代理 - 我想趁它还记忆犹新的时候把它记下来。

需要注意的是 comp_t 字段 - 这些实际上是一种奇怪的指数/尾数类型,用于在 16 位中保存大范围的值 - 将其转换为 long 的算法非常简单:

comp_t ct = ?;
long val = (ct & 0x1fff) << (((ct >> 13) & 0x7) * 3);

另一件事是,有些值是时钟滴答,而不是秒,所以你必须除以sysconf (_SC_CLK_TCK)返回的值。

【讨论】:

    【解决方案3】:

    我脑子里冒出一个愚蠢的想法:

    script 会将会话复制到文件中。您可以将其发送到正在由日志记录进程读取的命名管道——唯一的事情是,您将获得输出以及命令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-06
      • 1970-01-01
      • 1970-01-01
      • 2020-09-16
      • 1970-01-01
      • 2010-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多