2

で自分自身を呼び出そうとするように、コマンドラインアプリケーションがルートアクセスを要求できるかどうか疑問に思っていますsudo.

sudo必要に応じて特権を必要とするアプリケーションを作成できるソリューションを探しています。

必要な場合にのみ、常にルート アクセスを要求する必要はありません。

4

2 に答える 2

5

オプション:

  • ただし、ルートによってすでに呼び出されており、実際の UIDがsetuid(0)0 で、他の誰かの有効な UID を持っている場合に限ります。
  • orコマンドを試行してexec、それ自体を UID 0 で実行することもできますが、それを許可するように構成されている場合のみです(通常、許可チェックがあるため、ユーザーが認証を送信する必要があります)。sudosusudo
  • 経由で自分自身の新しいコピーを起動しようとする可能性がありますAuthorizationExecWithPrivileges()が、これにはユーザーが認証に送信する必要があります。
  • システムコンテキストlaunchdで通信できるジョブと共にインストールされている可能性があります。launchdそのジョブと通信すると、launchdそれが呼び出され、おそらく root ユーザーで実行するように構成されています。これが実現するには、ジョブがすでにデプロイされている必要があります。インストーラー (この場合、ユーザーは認証済み) またはサービス管理フレームワークのSMJobBless()API (ユーザーはそれを承認するために認証が必要です) を使用します。
  • 他の誰かの不適切に作成されたlaunchdジョブを利用して、そのジョブを UID 0 で実行することができますlaunchd

したがって、多くのオプションを介して基本的に可能ですが、信頼できるオプションのすべてでは、ユーザーが認証され、ルートコンテキストで実行できるようにツールが既に展開されている必要があります。私は実際にこのことについて一冊の本を書きました... 特にProfessional Cocoa Application Securityの第 6 章を参照してください。

setuid(使用はお勧めしません) を除くすべてのオプションは、実際にfork()は、呼び出しプロセスまたは による別のプロセスの作成に関与していることに注意してくださいlaunchd。つまり、実際には、ユーザーが操作する実行ファイルと、特権タスクを実行する実行ファイルの 2 つの個別の実行ファイルを持つことができます。これは、1 つのアプリケーションにすべての機能を配置するよりも優れた設計であるため、そのアプローチをお勧めします。

于 2011-05-28T12:41:37.853 に答える
0

はい。例えば:

#!/bin/sh
su root
# Do things as root here, if authorized
于 2011-05-28T12:35:23.273 に答える