添加时间戳和用户bash历史记录

时间:2016-08-25 09:14:23

标签: bash history

我想将执行命令的时间戳和用户添加到我的history命令中。这甚至可能吗?

通过将此行添加到〜/ .bashrc,您可以将时间戳添加到history命令:

    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地址,以便能够识别,谁已执行命令“正常运行时间”作为用户“根”。我想,我找到了一个解决方案,但它确实没有用。将以下行添加到〜/ .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

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

这并不总是可行的,具体取决于您的服务器配置和用户行为,但如果您"教育"你的用户是否正确有两种方法(我知道)你可以获得这些信息。

  1. 让您的用户只在实际需要时使用sudo。不要"切换" root并开始运行命令。只要您确实需要root访问权限,就可以使用sudo前缀运行单独的命令。这样,每个用户仍然保存历史记录(在大多数系统上,sudo日志将写入/var/log/auth.log文件)。

  2. 使用sudo su sudo su -切换到root,-将重置其环境变量。但是如果省略-,则根环境变量应该有一个SUDO_USER变量,用于保持切换到该帐户的用户。例如:

    oldskool@server:~$ sudo su
    root@server:/home/oldskool# echo $SUDO_USER
    oldskool
    
  3. 您可以在历史记录时间格式中使用SUDO_USER