🐧 Linux 総合学習プラットフォーム

コマンドラインにパスワードを直書きして history に残ってしまった

症状(よく出るエラー)

mysql -u root -pSecret123 のようにパスワード入りで実行した後、history を見ると平文のパスワードがそのまま並んでいる。共用サーバーでは他ユーザーに ps コマンド経由で見られていた可能性もある。

原因

シェルは実行した行を丸ごと履歴ファイル(bash なら ~/.bash_history)に保存するため、引数に含めた秘密情報も平文で永続化される。さらに実行中は ps auxww で全ユーザーからコマンドラインが見えるので、履歴を消しても実行した時点で露出は起きている。「一度打った秘密は漏れた前提で扱う」のが正しい認識。

直し方

まず露出したパスワード自体を変更する。履歴からは history -d 行番号 で該当行を消し、~/.bash_history にも残っていないか確認して編集する。今後は mysql -u root -p のようにパスワードをプロンプトで対話入力する、環境変数や ~/.my.cnf 等の権限600の設定ファイルに逃がす、bash なら HISTCONTROL=ignorespace を設定して行頭スペース付きで打つ、といった方法で履歴に載せない。

▶ 学習アプリでしっかり学ぶ