重複の可能性:
プログラムでルート権限を取得する方法は?
Linux を介して C でユーザーにプログラムでルート アクセスを要求する方法はありますか?
私は raw ソケットを使用しているため、root アクセスが必要です。
重複の可能性:
プログラムでルート権限を取得する方法は?
Linux を介して C でユーザーにプログラムでルート アクセスを要求する方法はありますか?
私は raw ソケットを使用しているため、root アクセスが必要です。
慣用的な方法は、プログラムを suid-root にし、最初の 2 行でmain
raw ソケットを開いて root を削除することです。
これは、次の理由から、セキュリティの観点からはまだ理想的ではありません。
プログラムの後半で妥協すると、攻撃者は生のソケットにアクセスできるようになり、多くの悪意のある目的に使用される可能性があり、特権を昇格するのに十分な情報を取得する可能性があります。
すべての suid-root バイナリは、ダイナミック リンカーまたはmain
. これらはますますまれになっていますが、昨年でさえ、glibc のリンカを使用するLD_AUDIT
もので再び発見されました。多くのセキュリティ意識の高いシステム (Openwall Linux など) は、この理由で suid-root バイナリを完全に禁止しています。
より安全ですが、より複雑なアプローチは、プログラムを昇格された (ただし最小限の) 特権を持つデーモンとして実行し、CLI インターフェイスを、UNIX ソケットを介してデーモンと通信する単純なラッパーにすることです。脆弱性を機械的にチェックします。