2013-08-23 87 views
1

我正在使用需要root權限的Qt C++在OSX上編寫應用程序。 我相信我可以通過顯示一個對話框,提示XAMPP用戶名和密碼,這樣的事情讓這些需要特權:C++顯示OSX權限對話框

Privilege dialog on OSX

這可怎麼辦呢?我必須手動構建表單,然後使用setuid,還是已經在SDK中內置了函數?

+0

我不知道OSX,但在Linux/Unix,我們通常使用'SU/sudo'或等效的圖形化桌面的命令(' gksu/gksudo/kdesu/kdesudo'等)啓動一個**單獨的**可執行文件。在OSX上必須有相同的命令。不過,我強烈建議*反對*使用'setuid'位,因爲它不需要密碼來獲得root權限,這很容易導致嚴重的安全問題。 – syam

回答

2

最初,Apple提供了一個功能'AuthorizationExecuteWithPrivileges',允許應用程序使用root權限啓動另一個應用程序。由於安全原因,這已被棄用。

這裏的對話有點令人誤解。 Apple提供了authorization services,它在各種不同情況下啓動對話框,但通常在調用AuthorizationCopyRights的應用程序中,在授權數據庫(位於/ etc/authorization的文件)中創建了規則並使用AuthorizationCreate創建了授權引用。

OSX上的安全性分爲安全守護進程,安全代理和應用程序。應用程序可以使用此係統限制功能,或請求授權用戶輸入憑據,以便啓動特權應用程序,這是您需要執行的操作。

請務必注意,該對話框並未由應用程序呈現,而是由安全代理完全負責安全GUI。守護進程實際上處理授權。

Apple的提升方法是讓所有應用程序都以標準用戶權限運行,並且應該要求特權任務,然後將其分解爲單獨的應用程序,該應用程序已註冊爲與launchd一起運行並賦予提升的權限。 Apple提供的示例是SMJobBless

儘管示例的調用代碼被寫入在Objective-C,重要的功能是在SMJobBlessAppController.m文件只是C函數,最值得注意的是AuthorizationCreate創建授權參考,並在目標C的代碼函數blessHelperWithLabel:錯誤:在文件的底部。

從SMJobBless上的this help document開始,詳細介紹了過程。最後,如果你使用的是Qt,你需要在所需的函數調用中包含Apple的安全框架。要做到這一點,只需添加以下到您的.pro文件: -

QMAKE_LFLAGS += -F /System/Library/Frameworks/Security.framework/ 
LIBS += -framework Security 
+0

這些似乎是正確的答案,我試圖將方法塊'blessHelperWithLabel:error:'移植到我的Qt項目中,並且每件事情都看起來不錯,但是當我沒有評論該行'result =(bool)SMJobBless(kSMDomainSystemLaunchd, label,authRef,&cfError);'我一直收到錯誤消息'error:symbol(s)not found for architecture x86_64'。我已經爲Security和Core Foundation添加了QMAKE_LFLAGS,但是這個錯誤仍然存​​在。你有什麼想法爲什麼這個錯誤發生先生? – yunhasnawa

+0

「錯誤:未找到架構x86_64的符號」是無法鏈接到符號時「問題」窗口中的錯誤。什麼是無法找到的符號,輸出到「編譯輸出」窗口? – TheDarkKnight

+0

你解決了@yunhasnawa?如果你有,請分享你的qt塊嗎? – gkhanacer