で自分自身を呼び出そうとするように、コマンドラインアプリケーションがルートアクセスを要求できるかどうか疑問に思っていますsudo
.
sudo
必要に応じて特権を必要とするアプリケーションを作成できるソリューションを探しています。
必要な場合にのみ、常にルート アクセスを要求する必要はありません。
で自分自身を呼び出そうとするように、コマンドラインアプリケーションがルートアクセスを要求できるかどうか疑問に思っていますsudo
.
sudo
必要に応じて特権を必要とするアプリケーションを作成できるソリューションを探しています。
必要な場合にのみ、常にルート アクセスを要求する必要はありません。
オプション:
setuid(0)
0 で、他の誰かの有効な UID を持っている場合に限ります。exec
、それ自体を UID 0 で実行することもできますが、それを許可するように構成されている場合のみです(通常、許可チェックがあるため、ユーザーが認証を送信する必要があります)。sudo
su
sudo
AuthorizationExecWithPrivileges()
が、これにはユーザーが認証に送信する必要があります。launchd
で通信できるジョブと共にインストールされている可能性があります。launchd
そのジョブと通信すると、launchd
それが呼び出され、おそらく root ユーザーで実行するように構成されています。これが実現するには、ジョブがすでにデプロイされている必要があります。インストーラー (この場合、ユーザーは認証済み) またはサービス管理フレームワークのSMJobBless()
API (ユーザーはそれを承認するために認証が必要です) を使用します。launchd
ジョブを利用して、そのジョブを UID 0 で実行することができますlaunchd
。したがって、多くのオプションを介して基本的に可能ですが、信頼できるオプションのすべてでは、ユーザーが認証され、ルートコンテキストで実行できるようにツールが既に展開されている必要があります。私は実際にこのことについて一冊の本を書きました... 特にProfessional Cocoa Application Securityの第 6 章を参照してください。
setuid
(使用はお勧めしません) を除くすべてのオプションは、実際にfork()
は、呼び出しプロセスまたは による別のプロセスの作成に関与していることに注意してくださいlaunchd
。つまり、実際には、ユーザーが操作する実行ファイルと、特権タスクを実行する実行ファイルの 2 つの個別の実行ファイルを持つことができます。これは、1 つのアプリケーションにすべての機能を配置するよりも優れた設計であるため、そのアプローチをお勧めします。
はい。例えば:
#!/bin/sh
su root
# Do things as root here, if authorized