【问题标题】:Adding timestamp and user to bash history将时间戳和用户添加到 bash 历史记录
【发布时间】: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

我该如何解决这个问题?

【问题讨论】:

    标签: bash history


    【解决方案1】:

    这并不总是可行的,具体取决于您的服务器配置和用户行为,但如果您正确“教育”您的用户,则可以。您可以通过 2 种方式(据我所知)获取此信息。

    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
      

    您可以在历史时间格式中使用 SUDO_USER

    【讨论】:

    • 感谢您的提示,但不幸的是,您的第二个提示的结果相同。您也可以使用“sudo -i”来代替“sudo su”,但情况相同。第一个解决方案对我来说是没有选择的,但可能是一个可行的解决方案。
    猜你喜欢
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多