我想捕獲所有,任何用戶在Unix/Linux上鍵入的命令。有幾個選擇像使用腳本命令或acct實用程序。但是他們的問題是他們從終端到文件都變得愚蠢,或者只是提供命令的摘要。我正在尋找一個實用程序,它將爲我提供所有用戶使用命令參數鍵入的所有命令。可能嗎?有沒有其他方法可以讓系統調用掛鉤來獲取?如何捕獲任何用戶在Unix/Linux中鍵入的所有命令?
回答
在殼牌審覈方面,似乎有相當不錯的文章 http://administratosphere.wordpress.com/2011/05/20/logging-every-shell-command/。
這考慮之類的東西的用戶歷史文件的可靠性(和改進提供信息),而且還討論了內置彈明確的審計功能。這可能是任何環境中,你正在使用沒有啓用審計功能編制的炮彈,但如果你有你的生成可用的源和配置(如你至少可以對任何Linux發行版一樣),它不該」要保持其他配置的默認分配,就太難以啓用審計功能。
什麼這種方法仍然會留下開放是通過一些其他的命令執行的命令 - 從某些程序中調用或操作系統的功能。所以,f.ex.如果您有perl或機器上可用的任何其他編程語言解釋器,但您可能可以審計perl的執行情況,則無法知道用戶告訴perl解釋器執行了什麼操作。另一方面,即使使用shell審計,我也不確定是否會執行perl執行,如果它是執行f.ex。從某個編輯器(如vi)中作爲一個過濾器來處理編輯器內編寫的任何內容。
因此,儘管外殼審計將爲您提供審計一層,增益除非你的環境真的收緊對執行而非外殼的其他路徑其實並不多。
你應該考慮是否用戶實際需要審覈shell訪問的 - 如果沒有,爲他們提供更多的東西有限,審計功能。一個小的基於文本的菜單系統,或許?
抓鬥/home/victim/.bash_history
或/home/victim/.config/fish/fish_history
這將讓你看到與WS用戶輸入ARGS所有bash和魚shell命令。
問題的創造者明確不希望使用歷史。 –
解決這個最簡單的方法,就是如果是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的創建者,因此您可以對其作出反應。 當然,上面的案例檢查不是我們真正使用的檢查;) - 但是一個很好的示例。
希望它能幫助, 吉米
這看起來是一個非常危險的想法,因爲它取代了系統shell。 –
抓住bash的來源。圍繞exec調用添加一個記錄器。編譯它。登錄後將其作爲第一條命令運行。
其他一切都真的需要根源力量。
我知道這是舊的,但我認爲腳本命令可能是他在找什麼?
> script my_output_file
Script started, file is my_output_file
http://www-users.cs.umn.edu/~gini/1901-07s/files/script.html
還有就是讓審計,TTY記錄,黑客和免費工具,做你想做的,但是,這取決於你正在努力控制環境的規模,你可能會更好通過使用審計和重點處理您要解決的挑戰的產品。一些比較流行的,在一些金融服務客戶使用的是[Observe-IT,Centrify和PowerBroker
希望這有助於
您可以使用Snoopy Logger
它是什麼: 一個簡單的庫,插入它本身通過LD預加載在進程和execv/e()系統調用之間。它將所有執行的命令記錄到系統日誌中。
它不是: 安全/審計解決方案 - 它可以輕鬆繞過。 它不會記錄內置的shell命令(因爲它們是內部的,並且在被調用時,shell不會創建新的進程 - 例如echo vs/bin/echo)。
披露:這裏是目前的史努比維護者。
對於零星錄音,我通常運行
ssh localhost | tee -a records-session.log
這個效果很好。
- 1. 如何捕獲命令行中的所有命令和輸出?
- 2. 如何捕獲用戶在Android中輸入的所有內容?
- 3. 如何使用jQuery捕獲Safari中的命令+數字熱鍵
- 4. 如何在MFC中捕獲WM_SHOWWINDOW命令
- 5. POPEN不捕獲所有的命令
- 6. 如何捕獲用戶在linux下執行的命令
- 7. 捕獲所有命令輸出
- 8. 如何使命令行命令適用於任何用戶?
- 9. 在bash中,如何在命令行上處理所有用戶輸入
- 10. 如何記錄所有Unix用戶在文件中執行的所有命令?
- 11. 如何從等待輸入的命令中捕獲命令輸出?
- 12. 如何在Javascript textarea中捕獲事件以記錄所有鍵入的文本
- 13. 如何編寫命令行shell來捕獲'UP'鍵以獲取歷史輸入?
- 14. 如何捕獲用戶控件中的所有異常
- 15. 如何捕捉X中的任何鍵?
- 16. 如何捕獲CMake命令行參數?
- 17. 如何從shell命令捕獲輸出?
- 18. 如何停止AxWindowsMediaPlayer接受C#中的任何用戶命令
- 19. 我如何捕獲在PowerShell中執行命令所顯示的信息?
- 20. 如何捕獲在C++中運行的命令的exit_code和stderr?
- 21. 如何捕獲'confirm saveas'用戶輸入?
- 22. 如何獲取所有當前可用的命令和熱鍵列表?
- 23. 如何在命令行中查找用戶輸入的關鍵字?
- 24. 如何執行用戶輸入的命令作爲龜命令?
- 25. Python:如何獲取用戶命令?
- 26. 如何在Linux中捕獲Java -jar命令的OS輸出?
- 27. 如何在C++中捕獲DOS命令的結果
- 28. 如何在Java中捕獲shell命令的退出狀態?
- 29. 如何使用MapHttpRoute捕獲所有URL
- 30. 如何監視通過ODBC用戶的所有SQL命令DSN
shell歷史是一個可行的選擇嗎? – wei2912
我不想使用bash或任何其他shell提供的歷史記錄。 – vinayag
優秀的答案在:http://serverfault.com/questions/470755/log-all-commands-run-by-admins-on-production-servers – IvanD