[英]Cocoa - Gaining Root Access for NSFileManager
我需要在我的應用程序中使用NSFileManager移動系統文件,我似乎沒有root訪問權限。 獲得此特權的最簡單方法是什么?
我已經查看了Apple提供的BetterAuthorizationSample代碼,我似乎並沒有讓NSFileManager在獲得用戶批准后運行其任務。
更新:為了更新仍在使用此答案供參考的人, BLAuthentication
使用了一個名為AuthorizationExecuteWithPriviledges
的舊的,非常推薦的函數,該函數在工作時違反現代安全范例,並且已棄用(並且已經有一段時間了)。 從技術上講,您仍然可以使用它,但如果您正在為Mac OS X Lion開發,那么您非常歡迎使用ServicesManagement框架,它允許您以特權作為幫助工具運行代碼。
有關如何創建和啟動特權幫助工具的參考,請查看我的一個問題, 使用SMJobBless編寫特權幫助工具() 。
沒有真正簡單的方法來授權NSFileManager
,因此您應該考慮使用在BLAuthentication
類的管理員身份驗證下運行的標准mv
和cp
工具。 不幸的是,原作者的網站已關閉,但您可以輕松找到在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分鍾的默認時間限制內對程序進行身份驗證。
警告
當然,要小心系統文件! 盡可能避免移動或操縱它們,特別是如果你的程序將在別人的計算機上運行(如果出現任何問題,你將被指責)!
如果您的應用程序需要使用root權限,請使用Apple的Authorization Services API。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.