當我在 Linux(Ubuntu) 伺服器上透過 ssh 登入時,我注意到伺服器上其他使用者執行的所有 bash 命令都保存在命令歷史記錄中。有沒有一種方法可以讓我對伺服器上的其他使用者隱藏我在命令列中鍵入的命令?
答案1
有很多方法可以隱藏命令歷史記錄,但完全關閉歷史記錄不是一個好主意,因為它非常有用。以下是暫時關閉它的三種好方法。
最快的解決方案: 類型
unset HISTFILE
這將防止在您登出時將目前登入工作階段中執行的所有命令儲存到 .bash_history 檔案中。請注意,HISTFILE 將在您下次登入時重置,因此歷史記錄將照常保存。另請注意,這會刪除全部來自會話的命令,包括在鍵入 unset HISTFILE 之前執行的命令,這可能不是您想要的。另一個缺點是,在登出之前您無法確定是否正確執行,因為 bash 仍然允許您使用向上箭頭查看先前的命令。
最佳解決方案: 在指令前輸入一個空格
嘗試一下,然後點擊向上箭頭查看它是否已新增到您的歷史記錄中。有些網站已經設定好這樣的指令不會被儲存。如果它不起作用,請將該行新增
export HISTCONTROL=ignoreboth
到您的 .bashrc 檔案中。當您以後登入時,以空格開頭的命令將立即被忘記。最容易記住: 類型
sh
這將使用原始 Bourne shell 啟動一個子 shell。其中寫入的任何命令(直到您
exit
)都不會保存在您的歷史記錄中。任何查看您的歷史檔案的人都可以看到您運行了 sh(這是可疑的),但看不到您之後運行的內容。
還有許多其他方法可以做到這一點。您甚至可以告訴 bash 永遠不要記住哪些指令 (HISTIGNORE)。請參閱 bash(1) 的手冊頁並搜尋 HIST 以查看許多可能性。
答案2
shell 會話的命令列歷史記錄bash
儲存在該~/.bash_history
檔案中。如果該檔案不存在,則建立該檔案時其他使用者沒有讀取權限。
bash
您可以透過設定環境變數來變更儲存到該檔案中的命令數量HISTFILESIZE
。將其設為零會將歷史文件截斷為零大小。預設值為 500 HISTFILE
。unset HISTFILE
但是,您所描述的伺服器(在評論中)的當前設定是完全錯誤的。
沒有理由允許多個使用者登入並在root
帳戶上使用互動式 shell。請考慮使用sudo
多個私人用戶帳戶來代替!
的命令歷史記錄root
,無論是互動式會話還是使用時sudo
,都是極為寶貴的,尤其如果您有多個有權root
存取系統的使用者。
您的團隊會想知道確切地root
最好調查並修復該用戶執行任何錯誤配置或其他事故後所做的事情。透過命令列歷史記錄,可以更輕鬆地找到出現問題的原因。由於這個原因,該sudo
實用程式還會將每次呼叫記錄到系統日誌工具中,並帶有時間戳記、完整的命令列以及執行的使用者的使用者名稱sudo
。
編輯:我們最近開始在工作中的 Linux 機器叢集上的光纖網路出現問題。事實證明,當一個有sudo
存取權限的愚蠢用戶不小心進行了軟體包升級時,某些驅動程式或其他驅動程式被替換為錯誤的版本。我們能夠透過查看系統日誌和sudo
其中的時間戳來找到這一點。原來這個「傻用戶」不是別人,正是我自己!
答案3
登入後發出以下命令:
HISTFILE=
這將阻止任何後續命令被記錄到歷史文件中。