條件如下:用objective-c編寫的MacOSX 10.7和Cocoa圖形應用程序。MACOSX:如何啓動需要來自可可應用程序的root權限的守護進程
我遇到以下問題。 我無法從Cocoa應用程序的/ user/bin文件夾啓動守護程序應用程序。 我知道我應該擁有root權限才能做到這一點。
我有安裝程序,而不是* .pkg,但是手動編寫安裝程序應用程序。安裝過程完成後,我需要啓動我的守護進程。 如何在objective-c應用程序中增加我的權限級別?
我有這段代碼。 但不推薦使用AuthorizationExecuteWithPrivileges調用。
我們不應該使用它。
AuthorizationItem authItem = { kSMRightModifySystemDaemons, 0, NULL, 0 };
AuthorizationRights authRights = { 1, &authItem };
AuthorizationFlags flags = kAuthorizationFlagDefaults |
kAuthorizationFlagInteractionAllowed |
kAuthorizationFlagPreAuthorize |
kAuthorizationFlagExtendRights;
AuthorizationRef authRef = NULL;
OSStatus status = AuthorizationCreate(&authRights,
kAuthorizationEmptyEnvironment, flags, &authRef);
status = AuthorizationExecuteWithPrivileges(authorizationRef, tool, kAuthorizationFlagDefaults, args, &pipe);
第二種方法是使用特權助手。 這種方式對我來說看起來非常複雜。 我只需要在安裝後啓動守護進程。
cource的我可以讓用戶重新啓動mac。但我想避免它。
其他可能性是守護程序可執行文件上的SUID位。 但我認爲這並不安全。
我的問題是: 有沒有其他更簡單的方法來做到這一點?
你在安裝時詢問管理員密碼? –
我可以要求輸入密碼。但已棄用AuthorizationCreate和AuthorizationExecuteWithPrivileges。我正在使用SDK 10.8,並且有關於它的彙編警告。 – Vlad
你讀過這個嗎? http://stackoverflow.com/questions/6841937/authorizationexecutewithprivileges-is-deprecated提供一個hacky-tacky解決方案:) – favoretti