まあ、私はsudoersファイルと[〜#〜] suid [〜#〜]プログラムの悪用の可能性について多くの読み物とドキュメントを作成しましたが、私の問題に対して可能な限り賢明な解決策を選択するのに十分な深い知識を持っている。
現在Qt-based Ubuntu用にpgrade/rollback management向けのツールを開発しています私たちの主なアプリケーション。
ご想像のとおり、このツールはapt install
/purge
およびdpkg
コマンド。これらは、root権限でのみ実行可能であり、ツールが実行するためのものではありません。 limited-privilegesユーザーのコンテキスト内のみ。
この制限を回避するために、チームは最も簡単な解決策を選択しました。ユーザーのsudoersファイルに前述のコマンドの適切なエントリを追加します。
[〜#〜] but [〜#〜]、私が知る限り、これは攻撃者として危険システムに脆弱性をもたらしますマシンへのアクセスが制限されただけで、基礎となるLinuxシステムの重要なコンポーネント(たとえば、systemd
)が削除され、システムがクラッシュする可能性があります。
私はチームの唯一のサイバーセキュリティエンジニアなので、この欠陥を軽減するための最も安全で推奨される方法を見つけようとしていますが、これまでのところ、アップグレードツールを[ 〜#〜] suid [〜#〜]プログラム。
問題は次のとおりです:[〜#〜] suid [〜#〜]ターゲットシステムで公開される可能性がある特権昇格の脆弱性に関して、プログラムは悪意のある評判を持っています(- ここ 順番に実装するすべての考慮事項のチェックリストめちゃくちゃにしない書き込み時のすべて[〜#〜] suid [〜#〜]プログラム)。
問題は、この痛みを伴うプロセスを本当に経験しているのかということです。
[~~~~ suid [〜#〜]実装の手間をかけずに、またアップグレードツールを実行せずにapt
/dpkg
コマンドを安全に使用できる他の方法はありますかスーパーユーザーモード?
注:stackexchangeカバーに関する多くの質問[〜#〜] suid [〜#〜]関連する懸念事項ですが、実際に私たちが扱っている特定のユースケースについては議論していません。
要約すると、2つの可能性について言及します。
私が考えることができる他の少なくとも2つのオプションがあります:
呼び出される方法を検証し、少数の事前定義されたパッケージでの操作のみを許可する小さなラッパーアプリケーションを使用できます。これにより、最初にsetuidルートアプリケーションを使用するという責任が取り除かれることはありませんが、非常に便利です。攻撃面を制限します。
reallyも設定されません。ルートはsetuidする必要があります。 Sudoを介して実行することもできます。 (ただし、Sudoまたはsetuidルートは攻撃対象領域を大幅に変更しません。)
これが最も簡単なアプローチかもしれません。 dpkg
は--root=<somepath>
を受け入れます。これは、--instdir
および--admindir
を指定するためのエイリアスです。これらの2つのディレクトリがユーザーによって書き込み可能である場合、パッケージを操作するためにルートアクセスは必要ありませんこれらの階層内。
デフォルトでは、ツールは標準の場所のみを検索するため、パッケージは標準のパッケージリストやシステムのアップグレードなどに表示されません。しかし、おそらくあなたの管理アプリケーションがそれを処理するでしょう。
この唯一の欠点は、ユーザーが自分でソフトウェアをインストールする必要があることです。ただし、原則として、ユーザーアカウントの分離を使用して、攻撃対象領域を減らすことができます。
これらのオプションのうち、特に理由がない限り私自身、おそらくカスタムのdpkgルートを使用します特に、お粗末な詳細のほとんどを処理するアプリケーションがあるためです。