2013-03-29 26 views
6

我想捕獲所有,任何用戶在Unix/Linux上鍵入的命令。有幾個選擇像使用腳本命令或acct實用程序。但是他們的問題是他們從終端到文件都變得愚蠢,或者只是提供命令的摘要。我正在尋找一個實用程序,它將爲我提供所有用戶使用命令參數鍵入的所有命令。可能嗎?有沒有其他方法可以讓系統調用掛鉤來獲取?如何捕獲任何用戶在Unix/Linux中鍵入的所有命令?

+2

shell歷史是一個可行的選擇嗎? – wei2912

+0

我不想使用bash或任何其他shell提供的歷史記錄。 – vinayag

+1

優秀的答案在:http://serverfault.com/questions/470755/log-all-commands-run-by-admins-on-production-servers – IvanD

回答

4

在殼牌審覈方面,似乎有相當不錯的文章 http://administratosphere.wordpress.com/2011/05/20/logging-every-shell-command/

這考慮之類的東西的用戶歷史文件的可靠性(和改進提供信息),而且還討論了內置彈明確的審計功能。這可能是任何環境中,你正在使用沒有啓用審計功能編制的炮彈,但如果你有你的生成可用的源和配置(如你至少可以對任何Linux發行版一樣),它不該」要保持其他配置的默認分配,就太難以啓用審計功能。

什麼這種方法仍然會留下開放是通過一些其他的命令執行的命令 - 從某些程序中調用或操作系統的功能。所以,f.ex.如果您有perl或機器上可用的任何其他編程語言解釋器,但您可能可以審計perl的執行情況,則無法知道用戶告訴perl解釋器執行了什麼操作。另一方面,即使使用shell審計,我也不確定是否會執行perl執行,如果它是執行f.ex。從某個編輯器(如vi)中作爲一個過濾器來處理編輯器內編寫的任何內容。

因此,儘管外殼審計將爲您提供審計一層,增益除非你的環境真的收緊對執行而非外殼的其他路徑其實並不多。

你應該考慮是否用戶實際需要審覈shell訪問的 - 如果沒有,爲他們提供更多的東西有限,審計功能。一個小的基於文本的菜單系統,或許?

0

抓鬥/home/victim/.bash_history/home/victim/.config/fish/fish_history

這將讓你看到與WS用戶輸入ARGS所有bash和魚shell命令。

+0

問題的創造者明確不希望使用歷史。 –

0

解決這個最簡單的方法,就是如果是root和更改系統文件通過控制檯重定向本身這樣的位置:

如果使用例如/bin/sh作爲默認控制檯,將其移動到/bin/hs/bin/sh下創建這樣一個文件:

#!/bin/hs 

ORIGSHELL=/bin/hs 
LOGFILE=/var/log/whatyoulike 

OPTIONS="[email protected]" 

USER=`whoami` 
WEBUSER=web 
WILD=NO 
WARN=NO 



if [ "$USER" = "$WEBUSER" ] 
then 

    #Ok then - are we doing something wild? 
    for ARG in [email protected] 
    do 
    case "$ARG" in 
    *\/lynx) 
     WILD=YES 
     ;; 
    *\/wget) 
     WILD=YES 
     WARN=YES 
     ;; 
    *\/curl) 
     WILD=YES 
     WARN=YES 
     ;; 
    *\/links) 
     WILD=YES 
     WARN=YES 
     ;; 
    *\/fetch) 
     WILD=YES 
     WARN=YES 
     ;; 
    esac 
    done 

    #Are we wild? 
    if [ "$WILD" = "YES" ] 
    then 
    HOST=`hostname` 
    IPADDR=`resolveip -s $HOST` 
    NETSTAT=`/usr/bin/nighthawk -ape --numeric-hosts --numeric-ports --tcp | grep 'ESTABLISHED web'` 

    # Log it. 
    echo "`date` [$USER] $IPADDR "[email protected]"" >> $LOGFILE 
    echo "$NETSTAT" >> $LOGFILE 
    fi 
    #Are we REALLY wild? 
    if [ "$WARN" = "YES" ] 
    then 
    # Mail it! 
    mail -s 'HACKATTACK' [email protected] < $LOGFILE & 
    fi 
fi 

# Now, do it. 
exec $OPERATION "[email protected]" 

#we never come here... 
exit 0 

這只是一個例子,它是如何被用來追蹤一切透明。你可以做你想要檢查的輸入。 上面的腳本用於查找當前shell的創建者,因此您可以對其作出反應。 當然,上面的案例檢查不是我們真正使用的檢查;) - 但是一個很好的示例。

希望它能幫助, 吉米

+0

這看起來是一個非常危險的想法,因爲它取代了系統shell。 –

1

抓住bash的來源。圍繞exec調用添加一個記錄器。編譯它。登錄後將其作爲第一條命令運行。

其他一切都真的需要根源力量。

0

還有就是讓審計,TTY記錄,黑客和免費工具,做你想做的,但是,這取決於你正在努力控制環境的規模,你可能會更好通過使用審計和重點處理您要解決的挑戰的產品。一些比較流行的,在一些金融服務客戶使用的是[Observe-ITCentrifyPowerBroker

希望這有助於

2

您可以使用Snoopy Logger

它是什麼: 一個簡單的庫,插入它本身通過LD預加載在進程和execv/e()系統調用之間。它將所有執行的命令記錄到系統日誌中。

它不是: 安全/審計解決方案 - 它可以輕鬆繞過。 它不會記錄內置的shell命令(因爲它們是內部的,並且在被調用時,shell不會創建新的進程 - 例如echo vs/bin/echo)。

披露:這裏是目前的史努比維護者。

1

對於零星錄音,我通常運行

ssh localhost | tee -a records-session.log

這個效果很好。

相關問題