【问题标题】:Get the user's home directory from XPC从 XPC 获取用户的主目录
【发布时间】:2021-06-09 04:25:13
【问题描述】:

我的(非沙盒)应用有一个嵌入式 XPC 帮助程序,它以 root 身份运行。

我想从我的助手中引用(真实)用户的主目录,但这些常见的嫌疑人只是返回/var/root

FileManager.default.homeDirectoryForCurrentUser
NSHomeDirectory()

出于安全原因,我不能简单地将Users/bob 传递给我的助手——如果一个漏洞利用它想要的任何 URL 调用我的助手方法,并且我的助手以 root 身份执行此操作,我担心坏事可能会发生实现。

【问题讨论】:

  • 助手运行在本地域中,它不知道真实用户,如果多个用户登录会发生什么?我的建议是在协议方法中将路径传递给助手。
  • 您可以更改进程正在运行的用户(从 root 到 bob 并返回)有 unix 方法(在 C 中)。你可以调用 Filemanager 方法或 NSHomeDirectory。如果您只想为单个线程(而不是整个程序)执行此操作,那么也有方法。
  • 也许我对 XPC 的exploitability 风险存在潜在的误解。我需要帮助器在 /Users/bob/.somewhere 中创建一个由 root 拥有的文件。我对func createFile(at url: URL, withContents contents: String) 之类的潜在风险感到紧张

标签: swift cocoa nsfilemanager xpc


【解决方案1】:

正如 vadian 评论的那样,您所问的内容存在基本的概念问题。您可能真正想要做的是确保与您的帮助工具通信的进程实际上是可信的。

为此,您需要使用SecCodeCreateWithXPCMessage,然后使用生成的SecCode 实例来验证调用者。有关如何执行此操作的示例,请查看 SecureXPC framework 中的 acceptMessage 函数。


编辑:原来有一种方法可以做到这一点,确实可以通过命令行工具工作,例如使用SMJobBless 安装的工具。此答案改编自Apple's Technical Q&A QA1133

如果您出于某种原因想要忽略上述内容,您可以采取一种方法,如果多个用户拥有活动的控制台,则可能会产生意想不到的结果。来自 Apple 的 SCDynamicStoreCopyConsoleUser 文档:“请注意,此函数仅提供有关主控制台的信息。它不提供有关快速用户退出的控制台会话或其他控制台的任何详细信息。”

import SystemConfiguration

extension FileManager {
    var homeDirectoryForConsoleUser: URL? {
        var homeDirectory: URL?
        if let consoleUser = SCDynamicStoreCopyConsoleUser(nil, nil, nil) as String?,
           consoleUser != "loginwindow" {
            homeDirectory = URL(fileURLWithPath: "/Users/\(consoleUser)")
        }
        
        return homeDirectory
    }
}

然后你可以在你的辅助工具中的任何地方使用它:

if let homeDirectory = FileManager.default.homeDirectoryForConsoleUser {
    // Do something useful here
}

【讨论】:

  • trilemma-dev / SecureXPC 我一生都在哪里 ? 我的应用程序可能有点晚了,但我一定会好好看看它的。你上面的“捷径”听起来很有趣,但你是对的——从根本上说,我只是不确定我能在多大程度上信任我的 XPC 助手通信渠道。
  • 用实际上应该为您工作的代码更新了我的答案。也就是说,我强烈建议您保护 XPC 连接。为了回答你的反问,我本月早些时候才写了SecureXPC - 享受吧!
猜你喜欢
  • 2011-12-16
  • 1970-01-01
  • 2023-03-03
  • 2011-01-11
  • 2019-06-20
  • 2022-10-24
  • 1970-01-01
  • 2012-08-06
  • 2017-12-24
相关资源
最近更新 更多