簡體   English   中英

Cocoa - 獲取NSFileManager的Root訪問權限

[英]Cocoa - Gaining Root Access for NSFileManager

我需要在我的應用程序中使用NSFileManager移動系統文件,我似乎沒有root訪問權限。 獲得此特權的最簡單方法是什么?

我已經查看了Apple提供的BetterAuthorizationSample代碼,我似乎並沒有讓NSFileManager在獲得用戶批准后運行其任務。

更新:為了更新仍在使用此答案供參考的人, BLAuthentication使用了一個名為AuthorizationExecuteWithPriviledges的舊的,非常推薦的函數,該函數在工作時違反現代安全范例,並且已棄用(並且已經有一段時間了)。 從技術上講,您仍然可以使用它,但如果您正在為Mac OS X Lion開發,那么您非常歡迎使用ServicesManagement框架,它允許您以特權作為幫助工具運行代碼。

有關如何創建和啟動特權幫助工具的參考,請查看我的一個問題, 使用SMJobBless編寫特權幫助工具()


沒有真正簡單的方法來授權NSFileManager ,因此您應該考慮使用在BLAuthentication類的管理員身份驗證下運行的標准mvcp工具。 不幸的是,原作者的網站已關閉,但您可以輕松找到在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分鍾的默認時間限制內對程序進行身份驗證。


警告
當然,要小心系統文件! 盡可能避免移動或操縱它們,特別是如果你的程序將在別人的計算機上運行(如果出現任何問題,你將被指責)!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM