【问题标题】:Mac app to switch between /etc/hosts files, how to allow access?Mac 应用程序在 /etc/hosts 文件之间切换,如何允许访问?
【发布时间】:2018-04-29 22:25:31
【问题描述】:

我正在制作一个小型 mac 菜单应用程序,用于在我拥有的主机文件之间快速切换,以便在我的网络环境之间切换。

try? FileManager.default.copyItem(at: URL(fileURLWithPath: "/etc/hosts__ENV_1"), 
to: URL(fileURLWithPath: "/etc/hosts"))

以上返回nil,我假设是由于缺乏权限。

如何提供替换/etc/hosts文件的权限?

【问题讨论】:

  • 查看错误而不是使用try? 将有用的错误消息转换为nil,您将确定错误是由于缺乏权限还是其他原因造成的。跨度>
  • "NSCocoaErrorDomain" - code: 257 所以这肯定是由于缺乏特权。有没有办法解决这个问题?
  • 你的应用是否被沙盒化了?
  • @DávidPásztor 我是新的 Mac 开发人员。我已导出 .app 文件并将其放在 Applications

标签: swift macos hosts


【解决方案1】:

要修改像/etc/hosts 这样只能由root 写入的文件,您需要使用特权帮助工具,使用SMJobBless() 安装它,并通过XPC 与其通信。

Apple 的EvenBetterAuthorizationSample 示例代码演示了执行此操作的推荐方法,并提供了一个可供您使用的小型示例库。它在 Objective-C 中,但是将 Objective-C 代码集成到 Swift 项目中并不难。 (其中一天,我将发布我自己的 Swift 原生版本,但它目前需要清理,然后我才能为源代码感到自豪。)

【讨论】:

  • 我会先给它,谢谢。它会要求用户输入密码吗?
  • @thedp 他们需要输入密码才能安装该工具。之后,这取决于您,但我建议每次使用时都要求输入密码,否则会带来安全风险,因为其他应用程序可以访问您的助手。无论您做什么,请务必尽可能限制帮助程序的功能,以使其完成您需要的最低限度的工作(即,将其硬编码以将 /etc/hosts__ENV_1 移动到 /etc/hosts,而不是将任意文件移动到任意如果有人设法获得对助手的未经授权的访问权限,则可以减少后果。
  • 我需要开发者证书才能使用特权帮助工具吗?
  • @thedp 我相信您需要使用开发者 ID 证书对应用程序和工具进行签名。
  • 我明白了。有没有其他方法可以让我的应用程序写信给/etc/hosts?再次感谢:)
猜你喜欢
  • 2023-04-02
  • 1970-01-01
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 2016-03-03
  • 2015-05-23
  • 1970-01-01
  • 2013-03-01
相关资源
最近更新 更多