【发布时间】:2019-04-13 16:59:32
【问题描述】:
我有一个以 root 用户身份运行的程序(getuid() 返回 0)。
我需要以当前登录的用户身份执行命令行工具(我可以通过getting the HOME env var 确定)。 (详见下文)
我该怎么做,最好使用NSTask?
我知道如何以当前(root)用户身份使用 NSTask 来执行该工具,所以我只需要知道我需要对此进行哪些更改。
或者,有没有办法在不同的用户 ID 下运行我的程序代码的一部分?
细化
特别是,该程序是由AuthorizationExecuteWithPrivileges发起的。有趣的是,这为程序提供了与使用 sudo 启动程序时略有不同的环境:
使用 sudo,实际有效的用户(来自 getuid() 和 geteuid())都是“root”。
但是,对于AuthorizationExecuteWithPrivileges,有效用户仍然是调用该函数的用户。这有一些奇怪的效果,例如然后程序使用 NSUserDefaults,因为它们最终位于不同的域中,我的测试显示。
【问题讨论】:
-
考虑重构您的设计以临时以 root 身份运行当前用户(这是通常的方式),而不是以 root 作为当前用户。还要考虑以 root 身份永久运行应用程序可能会导致安全问题。
-
我知道。但这对我来说目前不是一个选择。此外,即使我写了“应用程序”,这个问题也适用于以 root 身份运行的任何后台进程 - 它可能需要执行工具,并且出于安全原因,它应该能够以较低的权限运行它们。
-
当前登录的用户是什么?当前可能有多个用户登录!?