【问题标题】:How to log every single command executed from shell script如何记录从 shell 脚本执行的每个命令
【发布时间】:2020-08-31 12:36:59
【问题描述】:

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

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

这里有个问题,它只记录那些从 bash shell/终端交互执行的命令。

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

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

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

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

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

#!/bin/sh
nmap google.com

并作为“$ sh script.sh”运行

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

提前致谢。哪怕是一点点帮助,我们也感激不尽。

编辑:我想澄清一下,用户并不知道他们正在被监控。所以我需要一个系统级别的解决方案(可能是用root运行的代理)。我不能依赖用户记录可疑活动。当然,如果他们做了一些可疑或错误的事情,每个人都会避免这种把责任归咎于别人的伎俩

【问题讨论】:

  • 你不能在 bash 下这样运行它。我建议删除 bash 标签。
  • #!/bin/bash -xe .... -e 的目的是什么?这对我来说没有意义。我希望您会从中收到一条错误消息。
  • -e 表示如果执行过程中发生任何错误则退出。
  • 啊,我错过了这句话set builtin 命令描述中记录的所有单字符shell 选项都可以用作调用shell 时的选项手册页。感谢您指出这一点。

标签: linux bash shell logging command


【解决方案1】:

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

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

我假设您正在寻找Audit Logging。

所以你可以从像这样的文章中受益

【讨论】:

【解决方案2】:

你可以这样运行脚本:

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

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

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

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

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

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

【讨论】:

  • 我想澄清一下,用户并不知道他们正在被监控。所以我需要一个系统级别的解决方案。我不能依赖用户记录可疑活动。当然,如果他们做了一些可疑或错误的事情,每个人都会避免这种把责任归咎于别人的伎俩。
  • 要监视/监视其他用户,您必须获得 root 权限。否则,我想这将是一个严重的安全漏洞。您如何看待定期监测“ps”结果?
  • 我有root权限。 ps 只会返回正在进行的进程列表。
  • 添加到 /etc/profile 怎么样? (我编辑了我的第一个答案以使降价工作)
猜你喜欢
  • 2011-10-04
  • 1970-01-01
  • 1970-01-01
  • 2017-05-02
  • 1970-01-01
  • 2018-02-27
  • 2018-03-29
  • 1970-01-01
  • 2017-01-15
相关资源
最近更新 更多