如何记录从 shell 脚本执行的每个命令
How to log every single command executed from shell script
我正在尝试找到一种方法来记录系统上任何用户执行的每条命令。
我之前遇到的事情。
- 可以使用 ~/.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。
所以您可以从
等文章中获益
我正在尝试找到一种方法来记录系统上任何用户执行的每条命令。 我之前遇到的事情。
- 可以使用 ~/.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。
所以您可以从
等文章中获益