6

アプリケーションでNSFileManagerを使用してシステムファイルを移動する必要がありますが、rootアクセス権がないようです。この特権を取得するための最も簡単な方法は何でしょうか。

Appleが提供するBetterAuthorizationSampleコードを調べましたが、ユーザーから承認された後、NSFileManagerにタスクを実行させる方法がわかりません。

4

2 に答える 2

3

アプリケーションでroot権限を使用する必要がある場合は、AppleのAuthorizationServicesAPIを使用してください。

http://developer.apple.com/library/mac/#documentation/Security/Conceptual/authorization_concepts/01introduction/introduction.html#//apple_ref/doc/uid/TP30000995-CH204-TP1

于 2011-01-05T02:53:11.963 に答える
3

更新:参照用にこの回答をまだ使用している人々を更新するBLAuthenticationには、これと呼ばれる古くて非常に推奨されていない関数を使用しAuthorizationExecuteWithPriviledgesます。技術的には引き続き使用できますが、Mac OS X Lion用に開発している場合は、ヘルパーツールとして特権を使用してコードを実行できるServicesManagementフレームワークを使用できます。

特権ヘルパーツールを作成して起動する方法については、私の質問の1つであるSMJobBless()を使用した特権ヘルパーツールの作成を参照してください。


承認するための本当に簡単な方法はないので、クラスで管理者認証の下で実行NSFileManagerされる標準mvcpツールの使用を検討する必要があります。BLAuthentication残念ながら、元の作者のWebサイトはダウンしていますが、クラスのコピーをGoogleで簡単に見つけることができます(必要に応じてコピーをアップロードすることもできます)。


を使用BLAuthenticationすると、実行しようとしていることは次のようになります。

#define MOVE @"/bin/mv"
if (![[BLAuthentication sharedInstance] isAuthenticated:MOVE]) {
    [[BLAuthentication sharedInstance] authenticate:MOVE];
}

NSArray *arguments = [NSArray arrayWithObjects:@"location1", @"location2", nil];
[[BLAuthentication sharedInstance] executeCommand:MOVE withArgs:arguments];

上記のコードは、ユーザーに管理者のパスワードの入力を求め、デフォルトの制限時間である5分間でプログラムを認証します。


警告
もちろん、システムファイルには常に注意してください。特にプログラムが他の人のコンピュータで実行される場合は、可能な限りそれらを移動したり操作したりしないでください(何か問題が発生した場合は、非難されます)。

于 2011-01-04T23:37:58.610 に答える