我正在处理的应用程序需要能够跨Linux,OSX和Windows [Vista]编辑某些受保护的文件。通常,当应用程序需要使用提升的权限执行某些操作时,会出现密码请求对话框,要求用户验证他们是否希望允许应用程序以管理员身份执行这些操作。
我相信一般来说,Windows Vista使用Manifest文件,OSX有授权库(https://developer.apple.com/mac/library/documentation/Security/Reference/authorization_ref/Reference/reference.html),Linux有各种各样的sudo前端。
是否有一种普遍接受的跨平台处理方式?我不希望我的应用程序必须以root用户身份运行,但我确实希望它能够打开受保护的文件进行读/写操作,然后恢复到正常的用户模式。
答案 0 :(得分:0)
对于Windows Vista,您基本上需要一个专门的流程来执行管理操作。如您所述,启用admin的进程将需要一个清单来指定请求的执行级别(有关详细信息,请参阅此MSDN article)。
如果仔细查看任何启动非提升并支持“提升”自身的Windows应用程序,您将看到一旦需要管理权限,它实际上会打开一个全新的进程(例如,在启用UAC时转到任务管理器) ,单击“显示所有用户的进程”,并注意它是如何以管理员权限重新打开的。
因此,对于Windows,您可能需要的架构需要两个流程:执行大部分工作的标准流程,以及调用以执行管理操作的管理流程。这两个过程需要通过一些安全手段(可能是secure named pipe)进行通信,以便管理工作可以代表标准流程完成。
这种方法可以在其他平台上推广,也许可以在某种类/接口中进行抽象,以便特定于平台的细节不需要泄漏。