如何记录从 shell 脚本执行的每个命令

How to log every single command executed from shell script

我正在尝试找到一种方法来记录系统上任何用户执行的每条命令。 我之前遇到的事情。

  1. 可以使用 ~/.bashrc_history 文件查看从终端执行的 shell 命令。

这里有一个问题,它只记录那些从 bash shell/terminal.

交互执行的命令

这解决了我的一个问题。但除此之外,我还想记录那些作为 shell 脚本的一部分执行的命令。

注意:我无法控制 shell 脚本。因此,添加像

<code>#!/bin/bash -xe
这样的详细模式是不可能的。

但是,这可以假定我作为系统管理员具有 root 访问权限。

例如:我有另一个用户可以访问系统。他 运行 使用他帐户中的以下 shell 脚本。

#!/bin/sh
nmap google.com

和 运行 为“$ sh script.sh”

现在,我想要的是“nmap google.com”命令应该在执行此文件后记录在某处。

提前致谢。即使是很小的帮助也会受到赞赏。

编辑:我想澄清一下,用户不知道他们正在被监视。所以我需要一个系统级别的解决方案(可能是 agent 运行 root)。我不能依赖用户记录可疑 activity。当然大家做错事或做错事都会避免这种把责任推到别人头上的伎俩

您可以 运行 以这种方式编写脚本:

  • 执行bash(它将覆盖shebang)
  • ts 为每一行添加前缀
  • 在终端和文件中记录日志

bash -x script.sh |& ts | tee -a /tmp/$(date +%F).log

您可以要求其他用户创建一个别名。

编辑: 您也可以将其添加到 /etc/profile(用户登录时获取)

exec > >(tee -a /tmp/$(date +%F).log)

如果需要,也可以为错误输出执行此操作。保持拆分。

我知道您要求 Bash 和 Shell 编写脚本并相应地标记了您的问题,但考虑到您的要求

  • 记录系统上任何用户执行的每条命令
  • 用户不知道他们正在被监视
  • 系统级的解决方案

我假设您正在寻找 Audit Logging

所以您可以从

等文章中获益