【发布时间】:2017-01-01 15:28:48
【问题描述】:
我想将执行命令的时间戳和用户添加到我的历史命令中。这甚至可能吗?
通过将此行添加到 ~/.bashrc,您可以将时间戳添加到历史命令:
HISTTIMEFORMAT="[ %Y/%m/%d %T ] "
运行 history 会产生类似的结果:
1841 [ 2016/08/25 10:57:54 ] ls
1842 [ 2016/08/25 10:57:56 ] who
1843 [ 2016/08/25 10:57:59 ] last
1844 [ 2016/08/25 10:58:10 ] uptime
1845 [ 2016/08/25 10:58:13 ] history
现在,我想要一个额外的信息:哪个真实用户执行了这些命令?
是的,每个用户的历史记录都会保存并写入 $HISTFILE (~/.bash_history),但通常每个用户都有自己的登录名,例如“firstname-name”或其他任何内容。
例如,名为“max-mustermann”的示例用户通过 SSH 登录并切换到用户“root”。用户“max-mustermann”现在充当“root”。
我想记录“真实”用户(在本例中为“max-mustermann”)以及一些附加信息,例如使用的 IP 地址,以便能够识别谁以用户身份执行了命令“uptime”根”。我想,我找到了解决方案,但它并没有真正奏效。将以下行添加到您的 ~/.bashrc 以对其进行测试:
TTY_CON=$(tty | cut -d '/' -f 3-);
HIST_WHO_INFO=$(who | grep "${TTY_CON}" | cut -d ' ' -f 1,12);
HISTTIMEFORMAT="[ %Y/%m/%d %T by ${HIST_WHO_INFO} ] "
这会返回如下内容:
1848 [ 2016/08/25 11:06:47 by max-mustermann (10.50.1.42:S.0) ] ls
1849 [ 2016/08/25 11:06:48 by max-mustermann (10.50.1.42:S.0) ] who
1850 [ 2016/08/25 11:06:49 by max-mustermann (10.50.1.42:S.0) ] last
1851 [ 2016/08/25 11:06:51 by max-mustermann (10.50.1.42:S.0) ] uptime
1852 [ 2016/08/25 11:06:52 by max-mustermann (10.50.1.42:S.0) ] history
这很完美,但不幸的是,它不会保留/保存真实用户的历史记录。如果其他人登录,则在此示例中以用户“max-mustermann”身份执行的所有命令都将更新为已登录的新用户:
1848 [ 2016/08/25 11:06:47 by somebody-else (10.50.1.18) ] ls
1849 [ 2016/08/25 11:06:48 by somebody-else (10.50.1.18) ] who
1850 [ 2016/08/25 11:06:49 by somebody-else (10.50.1.18) ] last
1851 [ 2016/08/25 11:06:51 by somebody-else (10.50.1.18) ] uptime
1852 [ 2016/08/25 11:06:52 by somebody-else (10.50.1.18) ] history
1853 [ 2016/08/25 11:08:13 by somebody-else (10.50.1.18) ] history
我该如何解决这个问题?
【问题讨论】: