Bash 4.N 版显然能够将命令历史记录写入系统日志,但我找不到有关如何配置它的信息。
我已经阅读了几页提供使用PROMPT_COMMAND
, 和陷阱的 hack,并且我知道有一个可用的补丁,但这应该是不必要的,因为它现在是内置的。
我知道我可以auditd
用来捕获命令,但我想使用 bash/syslog 组合。
Bash 4.N 版显然能够将命令历史记录写入系统日志,但我找不到有关如何配置它的信息。
我已经阅读了几页提供使用PROMPT_COMMAND
, 和陷阱的 hack,并且我知道有一个可用的补丁,但这应该是不必要的,因为它现在是内置的。
我知道我可以auditd
用来捕获命令,但我想使用 bash/syslog 组合。
这种方法似乎是您正在寻找的。本文讨论了它,标题为:改进 Bash 取证功能。
摘抄:
因此,尽管该功能在 Bash 4.1+ 中可用,但在大多数流行的发行版中,它可能默认情况下并未与 Bash 一起编译。
我还没有找到查看给定 Bash 编译时使用哪些选项的方法,因此要回答这个问题,您可能需要查看
.spec
构建 Bash RPM 时使用的上游文件,例如,在 Redhat 发行版上,同样的方法也可以用于基于 Debian 的发行版。作为确认,我查看了
.spec
CentOS 7.2.1511 中包含的 Bash 的 Bash 文件,但它没有启用此功能:滚动您自己的 RPM
以下是我使用上述详细说明的要点构建自己的 Bash 的步骤。
下载安装源码首先,我下载了可用于 CentOS 7.x 的 Bash源 RPM (SRPM) 。下载后,我将其安装到我的
修补rpmbuild
目录中:这会将文件解压缩到
rpmbuild/SPEC
&rpmbuild/SOURCES
中。现在我们将tar.gz
使用以下步骤复制解压后的 Bash 文件的内容:编辑
rpmbuild/SOURCES/bash-4.2/config-top.h
并使其看起来像这样:编辑
rpmbuild/SOURCES/bash-4.2/bashhist.c
并使bash_syslog_history
函数看起来像这样:现在生成一个
.patch
文件,其中包含我们对这两个文件的更改:将这些行添加到
建造$HOME/rpmbuid/SPEC/bash.spec
. 将这些行放入 SPEC 文件中的适当位置:现在构建它:
此构建的尾部将如下所示:
安装完成后,我们可以安装生成的 RPM:
配置 rsyslog现在修改 rsyslog 的
/etc/rsyslog.conf
配置:然后重启Rsyslog:
测试并确认现在以 root 身份运行一个新的 Bash 实例,并运行几个命令:
并尾随日志文件,
/var/log/bash-log/127.0.0.1.log
:注意到
CMD=...
此日志中的行吗?这些是我们刚刚运行的命令,一个ls
&tail
。预建?
为了帮助人们解决这个问题,我冒昧地构建了 Bash RPM,并在 Copr 中进行了修改。