我想将执行命令的时间戳和用户添加到我的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
我该如何解决这个问题?
答案 0 :(得分:0)
这并不总是可行的,具体取决于您的服务器配置和用户行为,但如果您"教育"你的用户是否正确有两种方法(我知道)你可以获得这些信息。
让您的用户只在实际需要时使用sudo
。不要"切换" root并开始运行命令。只要您确实需要root访问权限,就可以使用sudo前缀运行单独的命令。这样,每个用户仍然保存历史记录(在大多数系统上,sudo日志将写入/var/log/auth.log文件)。
使用sudo su
和不 sudo su -
切换到root,-
将重置其环境变量。但是如果省略-
,则根环境变量应该有一个SUDO_USER
变量,用于保持切换到该帐户的用户。例如:
oldskool@server:~$ sudo su
root@server:/home/oldskool# echo $SUDO_USER
oldskool
您可以在历史记录时间格式中使用SUDO_USER
。