1

プログラム内からLinuxユーザーアカウントを管理する必要があるため、実際には何らかのルートアクセスが必要ですが、そのプログラムにルートを与えることは最善の解決策ではありません。
どうすれば節約できる方法でそれを管理できますか。少なくとも、私はマルチプロセスアーキテクチャを認識していません。「一般的なもの」全体にQtを使用します。OS固有のものだけが私自身のものです。

4

1 に答える 1

1

特権分離を実装するための「従来の」ソリューションは、次のように機能します。

  • setuid-0でプログラムをインストールします
  • プログラムの起動の早い段階(これはできるだけ早く、できれば「プログラムが最初に行うこと」):
    • socketpair()を使用してソケットのペアを作成します
    • fork()あなたのプロセス
    • setuid()を使用してメインプロセスにすべてのルートUIDを削除させ、通常どおり続行します
  • 子プロセスは、メインプロセスから送信されたコマンドを処理するためのループを実行します

その結果、メインプロセスには特別な特権はありませんが、これらのソケットを介してメインプロセスに接続されているルート特権の子プロセスがあります。これらのソケットは「名前なし」であり、他のプログラムがそれらにアクセスできないことを意味します。

もちろん、あなたはまだ攻撃に対していくらか脆弱です。fork()に到達するまでコードが「安全」であっても、攻撃者は後でメインプログラムに侵入し、特権プロセスにコマンドを送信する可能性があります。子プロセスが入力の検証に優れていて妥協できない場合でも、有効なコマンドは攻撃者によって発行されたときに問題を引き起こす可能性があります-あなたの場合のように、攻撃者はおそらく新しいアカウントを作成する可能性があります0。

于 2012-10-05T13:07:27.120 に答える