Linuxでは、権限のないユーザーが環境変数を表示できますか?

Linuxでは、権限のないユーザーが環境変数を表示できますか?

Linuxでは、root以外のユーザーがプロセスの環境変数を観察できることを確認しようとしています。

即時のユースケースは、秘密を環境変数に入れることです。これはウェブ上の多くの場所では安全ではないと考えられますが、Linuxの正確な露出ポイントに焦点を当てることはできません。

参考にしてください。いいえプレーンテキストの秘密をファイルに入れることについて話します。また、私いいえルートアカウントへの露出について話してください(ルートを使用して敵から秘密を隠そうとすることは不可能だと思います)。

この問題私の問題を解決するように見えるコメントは、環境変数を完全に安全ではないか、単に難読化されたものに分類します。しかし、その変数にどのようにアクセスしますか?

テストでは、権限のないユーザーはプロセステーブル(「ps auxwwe」)を介して他のユーザーの環境変数を観察できませんでした。環境変数(エクスポートなど)を設定するコマンドはシェルに組み込まれており、プロセステーブルには入らず、拡張時に/proc/$pid/cmdlineにはありません。 /proc/$pid/environは、プロセス所有者のUIDでのみ読み取ることができます。

おそらく、異なるオペレーティングシステムまたはバージョン間で混乱が発生する可能性があります。 Web上のさまざまな(最近の)ソースは環境変数の不安定性を非難しましたが、他のLinuxバージョンの私のランダムチェックは、これが少なくとも2007年(おそらくそれ以上であるかもしれませんが、箱はありません)にさかのぼる可能性がないようです。手で)テスト)。

Linuxでは、権限のないユーザーが他のプロセスの環境変数をどのように観察できますか?

答え1

Gilesが非常に包括的な記事で説明したように回答security.stackexchange.comに関する同様の質問に関連して、プロセス環境はプロセス(もちろんルート)を所有しているユーザーだけがアクセスできます。

答え2

環境変数は非常に安全です。あなたがリンクした質問によると、設定ファイルに環境変数を使用すると、システムが破損した場合に難読化される唯一のセキュリティ上の利点があります。これは、誰かがrootアクセス権を取得すると、両方にアクセスできることを意味します。
環境変数を使用して秘密データを保存することが「あいまいな」と見なされるかどうかも議論の余地があります。これは非常に一般的な慣行なので、そうではないと思います。

次の2つの場所でのみ、環境変数に格納されているデータにアクセスできます。

1. プロセスの実行環境

プロセスの実行中にプロセスの環境変数にアクセスできます/proc/$PID/environ。ただし、プロセスを所有しているユーザー、つまりルートのみがファイルにアクセスできます。

2. 環境変数のソース

initスクリプトを使用し、変数がinitスクリプトに保存されている場合は、もちろんスクリプトを読んで変数を取得できます。

または、環境変数が他の場所から来た場合は、その場所はどこにでもなります。

3.「ps」出力

はい、私は2と言ったことを知っています。どちらのまともなシステムでは2になります。しかし、管理者が自分が何をしているのかわからない場合は、3番目の方法があります。

プロセスが同様の方法で開始された場合、そのsh -c 'cd /foo/bar; POP=tart /my/executable'プロセスshは次のように表示されますps

$ sh -c 'cd /; POP=tart sleep 10' &
[1] 3085

$ ps ax | grep POP
phemmer   3085  14   5  0.0  0.0 SN         00:00 sh -c cd /; POP=tart sleep 10

関連情報