如何将网络或用户源连接数据添加到历史记录条目?

2bc*_*2bc 8 shell users command-history audit

我想修改我管理的系统上所有用户的历史设置。我希望它包含来自连接终端的信息,例如来自who

sysadmin:/ # who
sysadmin  pts/0        Mar 26 07:11 (sysadmin.doofus.local)
Run Code Online (Sandbox Code Playgroud)

我目前通过以下方式修改我的历史记录。我知道这些设置中的许多设置已在此处多次介绍。然而,我很久以前从“ Linux System Administration Recipes by: Juliet Kemp ”中提取了这段代码。

shopt -s histappend
PROMPT_COMMAND='history -n;history -a'
HISTSIZE=100000
HISTFILESIZE=100000
HISTTIMEFORMAT="%m/%d/%y %T  "
Run Code Online (Sandbox Code Playgroud)

shopt -s histappend 修复了多个终端打开时信息可能丢失的问题。

PROMPT_COMMAND='history -n;history -a' 扩展以提供跨多个终端的实时附加到历史记录。

HISTSIZE=100000 HISTFILESIZE=100000 延长history保留金额

HISTTIMEFORMAT="%m/%d/%y %T " 用时间戳记在每一行历史记录之前

你通常会得到什么 history

835  ls
836  cd ..
Run Code Online (Sandbox Code Playgroud)

我修改后的当前history结果

5853  03/26/12 07:16:49  ls
5854  03/26/12 07:16:50  ll
Run Code Online (Sandbox Code Playgroud)

history我想看到的回报

5853  03/26/12 07:16:49  sysadmin.doofus.local    ls
5854  03/26/12 07:16:50  sysadmin.doofus.local    ll

001  03/26/12 05:11:29  demo_user.doofus.local    cd
002  03/26/12 05:11:30  demo_user.doofus.local    ll
Run Code Online (Sandbox Code Playgroud)

我不是因为看到这个DNS名字而“结婚” 。我只希望它从who或其他位置提取它而无需执行任何类型的查找或查询。我会对 IP 地址感到满意。

002  03/26/12 05:11:30  192.168.0.2    ll
Run Code Online (Sandbox Code Playgroud)

为什么?我管理多个系统,其中同一组的多个用户共享一个用户 ID 来完成他们的日常任务。这将使我能够将他们在组织内的真实位置和实际用户与他们在历史中所做的事情相关联。

我知道这不是最佳选择,我想改变它,但是,当您在一艘游轮大小的船上时,您不要试图进行急转弯。(注意:当你这样做时,乘客会试图把你扔下船)

无论如何,在我能够将它们迁移到更好的解决方案之前,我希望拥有这种跟踪能力。

另外,如果您对我目前用于history修改的内容有任何建议,我很乐意听到。

谢谢,

编辑:1

我不想运行其他程序或必须在“合理范围内”配置任何其他程序。

我想增加0开销,如果我必须添加它需要很小。

我确实相信我的用户,我只是想(如果发生某些事情)查看使用相同用户登录系统的 10 个用户中的哪一个:密码做到了。或者,它可能不是用户,它可能已被遗忘cron在以用户身份执行连接以执行某些操作的系统上。或应用程序 Ex:BMC Control-M连接ssh并运行任务。与其说是找到“坏用户”,不如说是能够以最少的努力找到它。

编辑2:

系统正在运行 SLES 和 RHEL

Chr*_*her 1

根据 llua 的建议,我们可以更多地研究历史。将一行附加到系统范围的 BASH RC 文件,可能是 /etc/bash.bashrc。

export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
Run Code Online (Sandbox Code Playgroud)

在系统记录器中设置“local6”的日志记录。也许是这样的:

local6.*    /var/log/commands.log
Run Code Online (Sandbox Code Playgroud)

重新启动系统记录器。也许设置日志文件轮换。登出; 登录; 并且,历史记录现在以如下格式写入 /var/log/commands.log:

日期时间主机名记录器:用户名[audit_pid]:命令[return_val]

这可以进一步调整以适应口味。