Linuxサーバーの他のユーザーからコマンド履歴を隠す

Linuxサーバーの他のユーザーからコマンド履歴を隠す

Linux(Ubuntu)サーバーでssh経由でログインしたときに、サーバー上の他のユーザーが実行したすべてのbashコマンドがコマンド履歴に保存されることを確認しました。サーバーの他のユーザーがコマンドラインに入力するコマンドを非表示にする方法はありますか?

答え1

コマンド履歴を隠す方法はいくつかありますが、履歴を完全にオフにすることは非常に便利なので、良い考えではありません。一時的にオフにする3つの良い方法は次のとおりです。

  1. 最速のソリューション:タイプunset HISTFILE

    これにより、現在のログインセッションで実行されているすべてのコマンドがログアウトしたときに.bash_historyファイルに保存されなくなります。次回ログインするとHISTFILEがリセットされるため、履歴は通常どおり保存されます。また、これは削除されます。みんなunset HISTFILE を入力する前に実行されるコマンドを含む、セッション内のコマンドが望ましくない場合があります。もう1つの欠点は、ログアウトするまで正しく実行したかどうかわからないことです。なぜなら、bashはまだ上矢印を使って前のコマンドを見ることができるからです。

  2. 最高のソリューション:コマンドの前にスペースを入力してください。

    一度試して、上矢印をクリックして履歴に追加されたことを確認してください。一部のWebサイトでは、これらのコマンドを保存しないように設定しています。うまくいかない場合は、その行をexport HISTCONTROL=ignoreboth.bashrcファイルに追加してください。後でログインすると、スペースで始まるコマンドはすぐに忘れられます。

  3. 覚えやすい:タイプsh

    これにより、元の Bourne シェルを使用してサブシェルが開始されます。そこに書かれたコマンドは(あなたが前までexit)履歴に保存されません。履歴ファイルを見ている人は誰でもshを実行したことがわかりますが(疑わしい)、何を実行したのかわかりません。

これを行う他の方法がたくさんあります。覚えてはいけないコマンドをbashに伝えることもできます(HISTIGNORE)。さまざまな可能性については、bash(1)のマニュアルページを参照してHISTを検索してください。

答え2

シェルセッションのコマンドライン履歴がbashこのファイルに保存されます~/.bash_history。ファイルがないと、他のユーザーはファイルの作成時に読み取り権限を持つことができません。

bash環境変数を設定して、このファイルに保存されるコマンドの数を変更できますHISTFILESIZE。 0に設定すると、履歴ファイルは0サイズに切り捨てられます。デフォルトは 500 です。変数を設定解除HISTFILEunset HISTFILE)すると、コマンドは履歴ファイルに保存されません。

ただし、説明した(説明では)サーバーの現在の設定は完全に間違っています。

root複数のユーザーがログインしてアカウントで対話型シェルを使用できるようにする理由はありません。sudo代わりに、複数の個人ユーザーアカウントを使用することを検討してください。

root対話型セッションと使用中のコマンド履歴はsudo非常に重要です。特にrootシステムにアクセスできるユーザーが複数人の場合。

あなたのチームは知りたいと思うでしょう正確にroot誤った設定やその他の事故が発生した後は、このユーザーが行った操作を調査して修正するのが最善です。コマンドライン履歴を使用すると、問題の原因を簡単に見つけることができます。このため、sudoユーティリティはタイムスタンプ、コマンドライン全体、および実行ユーザーのユーザー名とともに、syslogツールへの各呼び出しも記録しますsudo

編集する:最近、職場でLinuxシステムクラスタの光ファイバネットワークに問題が発生し始めました。sudoアクセス権のある愚か者は、ユーザーが誤ってパッケージのアップグレードを実行したときに、一部のドライバまたは他のドライバが誤ったバージョンに置き換えられていることがわかりました。私たちはsudoシステムログとその中のタイムスタンプを見てそれを見つけることができました。知ってみると、この「愚かなユーザー」は変わらないまさに私でした!

答え3

ログインしたら、次のコマンドを実行します。

HISTFILE=

これにより、後続のコマンドは履歴ファイルに書き込まれません。

関連情報