2016-08-25 57 views
1

我想添加時間戳和用戶,誰執行命令到我的歷史命令。這甚至有可能嗎?添加時間戳和用戶到bash歷史

中添加這一行到〜/ .bashrc中,你能時間戳添加到歷史命令:

HISTTIMEFORMAT="[ %Y/%m/%d %T ] " 

這導致像這樣通過運行歷史

 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」現在充當「根」。

我想記錄「真實」用戶(在這種情況下是「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 

我怎樣才能解決這個問題?

回答

0

這並不總是可能的,這取決於您的服務器配置和用戶行爲,但可以是您正確「教育」用戶。有兩種方式(我知道)可以獲得這些信息。

  1. 只要讓用戶在實際需要時只使用sudo。不要「切換」到root並開始運行命令。只要實際需要root訪問權限,只需使用sudo前綴運行獨立命令即可。這樣,每個用戶的歷史記錄仍然保存(並且sudo日誌將寫入大多數系統的/var/log/auth.log文件中)。

  2. 使其切換使用sudo susudo su -,該-將重置他們的環境變量根。但是如果你省略了-,那麼根環境變量應該有一個SUDO_USER變量來保存切換到該賬戶的用戶。例如:

    [email protected]:~$ sudo su 
    [email protected]:/home/oldskool# echo $SUDO_USER 
    oldskool 
    

你可以使用你的歷史TIMEFORMAT SUDO_USER

+0

感謝您的提示,但不幸的是,您的第二個提示是一樣的結果。而不是「sudo su」,你也可以使用「sudo -i」,但是會發生同樣的情況。第一個解決方案對我來說沒有選擇,但可能是一個可行的解決方案。 – Sebbo