web-dev-qa-db-ja.com

シークレットbashセッションを開くにはどうすればよいですか?

bashでシークレットセッションを開くことはできますか?

たとえば、コマンドにパスワードを入力する必要があり、bashにパスワードを履歴に追加させたくない場合。

51

bashでコマンドのロギングを停止するには、HISTFILE変数の設定を解除します。

HISTFILE=

その後のすべてのコマンドは、.bash_historyに記録されなくなります。

一方、コマンドの引数として実際にパスワードを指定している場合は、すでに何か問題があります。 .bash_historyは世界中で読めるわけではないため、この状況での最大の脅威ではありません。

ps/procが大きな問題です。システム上のすべてのユーザーは、現在実行中のコマンドとそのすべての引数を表示できます。したがって、コマンドライン引数としてパスワードを渡すことは本質的に安全ではありませんです。安全にパスワードを提供するには、環境変数または構成ファイル(600をchmoddedしたもの)を使用します。

81
HISTCONTROL=ignorespace

このオプションがbashにまだ設定されていない場合は、必要なだけかもしれません。すべての履歴を無効にするよりも衰弱しません。この設定では、スペース文字で始まるコマンドラインは履歴リストに保存されません。

これらの関連リンクから:

bashにHISTCONTROL = ignorespaceオプションがあるのはなぜですか?

bashがスペースで始まるコマンドを保存しないのはなぜですか?

37
Timothy Martin

履歴を一時的に無効にすることができます:set +o history

set +o history
...
set -o history

履歴の無効化とHISTFILEの設定解除には違いがあります:

HISTFILE=
date
ls
HISTFILE=~/.bash_history
history

このようなものを出力します:

84  HISTFILE=
85  date
87  ls
88  HISTFILE=~/.bash_history
89  history

つまり、すべてのコマンドが履歴リストに保存されます。 exitと入力して保存します。
だが

set +o history
date
ls
set -o history
history

このようなものを出力します:

115  set +o history
116  history

概要
set +o history長いセッションの場合。
HISTCONTROLおよび<space>command他の時間。

3