psでコマンドパラメータを隠す

psでコマンドパラメータを隠す

私はLinuxサーバー上でアプリケーションを実行しています。アプリケーションを実行すると、次のようにコマンドラインにパスワードが表示されます。

 ./myapplication --smtp-password mypassword

これまでのところ、私たちのアプリケーションは非常に単純な監視アプリケーションであると仮定し、「ping」とヘルスチェックを実行し、失敗したときに電子メールを送信するのは非常に簡単であるため、暗号化/暗号化解除機能は組み込まれていません。

すべての管理者(他の3人の管理者がいます)は、psを使用してプロセスのリストを一覧表示し、コマンド引数を表示し、パスワードを見つけることができます。

隠す方法はありますか?

答え1

myapplicationより良いアプローチは、他の手段(標準入力など)を介してパスワードを取得するようにそれを上書きすることです。環境は別のオプションですが、.environを介して同じeuid(またはeuid 0)を持つプロセスに表示され続けます/proc/<pid>/environ

そうでない場合、Linux 4.2より前のバージョンでは、パスワードがコマンドラインの最初の4096バイト内にないようにすることで、他のプロセスがそれを読み込んでパスワードを取得できないようにすることで露出を制限できます/proc/<pid>/cmdlinepsバージョン4.2以降ではこれ以上切り捨てられません/proc/<pid>/cmdline

例えば、zsh

.${(l:4094::/:):-myapplication} --smtp-password=secret

myapplicationを実行すると、最初のパラメーターのサイズは4095バイト(4096バイトはPATH_MAX制限を超えています)です。したがって、.//////[...]///myapplicationパスワードは4095ブレークポイントを超えています。

監査ログとシェル履歴ファイルは、コマンドラインに渡される秘密の文字列に関連するもう1つの関心領域です。

答え2

/procLinuxシステムでは、適切なマウントを使用してプロセス情報を隠すことができます。hidepidたとえばmount -o remount /proc -o hidepid=2、rootアクセス権を持つ人にはプロセス情報が隠されません。より良い解決策は、コマンドラインに機密データを含まないことです。

関連情報