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