2009-09-10 53 views
0

我正在使用的應用程序需要能夠跨Linux,OSX和Windows [Vista]編輯某些受保護的文件。通常,當應用程序需要使用提升的權限執行某些操作時,會出現一個密碼請求對話框,要求用戶驗證他們是否允許應用程序以管理員身份執行這些操作。使用C++(UAC/gksudo等)以管理員/ root身份打開/寫入文件

我相信一般來說,Windows Vista使用Manifest文件,OSX擁有授權庫(https://developer.apple.com/mac/library/documentation/Security/Reference/authorization_ref/Reference/reference.html),而Linux有各種sudo前端。

是否有一種普遍接受的跨平臺方式來處理此問題?我不希望我的應用程序必須以root用戶身份運行,但我確實希望它能夠爲讀/寫操作打開受保護的文件,然後恢復到正常的用戶模式。

回答

0

對於Windows Vista,您基本上需要一個專門的過程來執行管理操作。如您所說,啓用管理員的進程需要一個清單來指定所請求的執行級別(詳情請參閱此MSDN article)。

如果仔細觀察任何啓動非升級並支持「升級」的Windows應用程序,您將會看到它實際上在需要管理權限時會打開一個新的進程(例如,當UAC爲啓用後,點擊「顯示來自所有用戶的進程」,並注意它如何以管理員權限重新打開)。

因此對於Windows而言,您可能需要的體系結構需要兩個進程:執行大部分工作的標準進程以及用於執行管理操作的管理進程。這兩個過程需要通過一些安全手段進行通信(可能是secure named pipe),以便管理員可以代表標準過程完成工作。

這種方法在其他平臺上可能是通用的,也許可以在某種類/接口中抽象出來,以便平臺特定的細節不需要泄露。

+0

感謝您提供此信息。 – Michael 2009-09-10 06:46:34

相關問題