Linux(Ubuntu) サーバーに ssh 経由でログインすると、サーバー上の他のユーザーが実行したすべての bash コマンドがコマンド履歴に保存されていることに気付きました。コマンド ラインに入力したコマンドをサーバー上の他のユーザーから隠す方法はありますか?
答え1
コマンド履歴を非表示にする方法はたくさんありますが、履歴は非常に便利なので、履歴を完全にオフにするのは得策ではありません。ここでは、一時的に履歴をオフにする 3 つの良い方法を紹介します。
最速の解決策: タイプ
unset HISTFILE
これにより、現在のログインセッションで実行されたすべてのコマンドが、ログアウト時に.bash_historyファイルに保存されなくなります。HISTFILEは次回ログイン時にリセットされるため、履歴は通常どおり保存されます。また、これにより次のものが削除されることに注意してください。全てセッションからのコマンド(unset HISTFILE と入力する前に実行されたものも含む)は、期待どおりに実行されない可能性があります。もう 1 つの欠点は、bash では上矢印を使用して以前のコマンドを確認できるため、ログアウトするまで正しく実行できたかどうかわからないことです。
最善の解決策: コマンドの前にスペースを入力してください
試してみて、上矢印を押して、履歴に追加されているかどうかを確認してください。一部のサイトでは、このようなコマンドが保存されないように既に設定されています。動作しない場合は、
export HISTCONTROL=ignoreboth
.bashrc ファイルにその行を追加してください。今後ログインすると、スペースで始まるコマンドはすぐに忘れられます。最も覚えやすい: タイプ
sh
これにより、元の Bourne シェルでサブシェルが起動します。そこに書き込まれたコマンドは ( するまで
exit
) 履歴に保存されません。履歴ファイルを見た人は誰でも、sh を実行したことはわかりますが (これは疑わしいことです)、その後に何を実行したかはわかりません。
これを行う方法は他にもたくさんあります。bash にどのコマンドを記憶しないかを伝えることもできます (HISTIGNORE)。bash(1) のマニュアル ページを参照して HIST を検索すると、さまざまな可能性がわかります。
答え2
シェル セッションのコマンド ライン履歴はファイルbash
に保存されます~/.bash_history
。このファイルが存在しない場合は、他のユーザーに対して読み取り権限なしで作成されます。
bash
環境変数を設定することで、このファイルに保存されるコマンドの数を変更できます。これを 0 に設定すると、履歴ファイルのサイズが 0 に切り捨てられます。デフォルトは 500 です。 ( ) 変数HISTFILESIZE
を設定しないと、履歴ファイルにコマンドが保存されなくなります。HISTFILE
unset HISTFILE
ただし、(コメントで)説明しているサーバーの現在の設定は単純に間違っています。
複数のユーザーがログインしてアカウントで対話型シェルを使用できるようにする理由はありません。代わりに、複数のプライベート ユーザー アカウントroot
を使用することを検討してください。sudo
のコマンド履歴はroot
、対話型セッションでも を使用する場合でもsudo
、非常に貴重です。特にroot
システムにアクセスできるユーザーが複数いる場合。
あなたのチームは知りたいと思うでしょうその通りユーザーroot
がそれ以降何をしていたかを知るには、このユーザーによる設定ミスやその他のトラブルを調査して修正する必要があります。コマンド ラインの履歴があれば、問題が発生した理由を簡単に見つけることができます。sudo
このため、このユーティリティは、すべての呼び出しを syslog 機能に記録します。ログには、タイムスタンプ、完全なコマンド ライン、および実行ユーザーのユーザー名が記録されますsudo
。
編集: 最近、職場の Linux マシンのクラスターでファイバー ネットワークに問題が発生し始めました。sudo
アクセス権を持つ愚かなユーザーが不注意にパッケージをアップグレードしたために、一部のドライバーなどが間違ったバージョンに置き換えられたことが判明しました。システム ログとそこに含まれるタイムスタンプを調べることで、このことが分かりましたsudo
。「愚かなユーザー」は、私以外の誰でもないことが判明しました。
答え3
ログイン後、次のコマンドを発行します。
HISTFILE=
これにより、後続のコマンドが履歴ファイルに記録されなくなります。