/proc/*/cmdlineが誰でも読める理由はありますか?

/proc/*/cmdlineが誰でも読める理由はありますか?

たぶん今日はコーヒーを飲むことができなかったかもしれませんが、世界を読めるようにする理由は全く覚えていないか、まったく思い出せません。/proc/PID/cmdline結局はそうではありません。/proc/PID/environ

ユーザー(もちろん、グループやルートも可能)のみを読み取ることができるようにすると、コマンドライン引数で入力したパスワードが誤って漏洩するのを防ぐことができます。

もちろん影響を与えます。その他ユーザーが走るpsなどhtop- しかし、それは良いことですよね?これが世界を読むことができないようにする鍵です。

答え1

私は主で、おそらく唯一の理由が歴史的だと思います。/proc/.../cmdlineもともと世界中で読むことができたので、以前のバージョンとの互換性のためにそのまま残ります。cmdline1992年12月2日にリリースされた0.98.6に追加され、モード444に変更ログが表示されます。

     - /proc filesystem extensions.  Based on ideas (and some code) by
       Darren Senn, but mostly written by yours truly.  More about that
       later.

「後で」がいつなのかわかりません。私の知る限り、Darren Senのアイデアは時間の霧の中に消えました。

environ以前のバージョンとの互換性の主張の興味深い反例です。テキストを読むことができるようになりましたが、1.1.85では所有者だけが読むことができました。まだ関連する変更ログが見つからないので、なぜ理由がわかりません。

/proc/${pid}(付属)の全体的なアクセシビリティと可視性を/proc/${pid}/cmdline制御できます。使用されるprocマウントhidepidオプション、これはカーネルバージョン3.3に追加されました。マウントgidオプションを使用すると、特定のグループにフルアクセス権を付与できます。例えばこれにより、モニタリングプロセスはrootとして実行せずにすべてを見ることができます。

答え2

プロセスのコマンドラインは常にUnixの公開情報と見なされており、以下を介して常にアクセスできます。ps(1)注文する。対照的に、プロセスの文脈は決してそのような開示情報ではない。

psもともとUnix実装には、デバッガで開き、カーネルのライブメモリから直接すべての情報を抽出するsetuid実行可能ファイルがありました。 Linuxは長い間/dev/memplan9のようなファイルシステムをサポートしてきましたが、/procpsファイルシステムは単純なシステムとして実装されました。固定されていないこのプログラム/proc/<pid>/stat/proc/<pid>/cmdline。これは、情報を取得するための一般的なカーネル/ユーザーインターフェースであり、出力解析ps(悪い)に対するシェルフレンドリーな選択肢であるため、不可能ですps

もちろん、実行中の他のユーザーpsなどに影響を与えますhtopが、それは良いことでしょうか?これが世界を読むことができないようにする鍵です。

いいえ、これは良いことではありません。これは、標準(上記のリンクを参照)に違反することに加えて、root権限がなければシステムをデバッグできなくなり、セキュリティ上の利点はせいぜい幻想にすぎません。 (Unixが発明されたとき、あいまいさと表現の自由制限によるセキュリティは今日ほど人気が​​ありませんでした。)

これらのLinuxシステムがどのように見えるかを想像する必要はありません。すでにAndroidを持っていて、hidepid実際のユーザーにとっては、ルート化されていないシステムは不快なブラックボックスです(単にロックされているのではなく、可能なすべての方法でロックされています)。外部の攻撃者やデータ収集者のための一般的なDebianまたはSlackwareデスクトップまたはサーバーよりも強力ではありません。

答え3

ユーザーがrootコマンドラインを表示できないようにする場合にのみ、次の手順を実行します。

hidepid=1 オプションを使用して /proc ファイルシステムをマウントします。

sudo mount -o remount,rw,nosuid,nodev,noexec,relatime,hidepid=1 /proc

バラよりhttps://man7.org/linux/man-pages/man5/proc.5.html、hidepidを検索してください。

hidepid パラメーター値は、次の 3 つの値を受け入れます。

  • 0:デフォルトです。すべてのユーザーは、プロセスディレクトリに保存されている誰でも読めるファイルを読み取ることができます。
  • 1:ルートプロセスディレクトリはまだ/ procにリストされていますが、ユーザーはアクセスできません。ユーザーは自分のプロセスディレクトリにのみアクセスできます。これは、root 以外のユーザーから cmdline、sched、または status などの重要なファイルを保護します。この設定は実際のファイル権限には影響しません。
  • 2:root以外のユーザーにはプロセスファイルは表示されません。プロセスの存在はさまざまな方法で認識できますが、有効なユーザーID(UID)とグループID(GID)は非表示になっています。

関連情報