macos - 协助使用安全授权或特权执行

标签 macos shell

你们好,SO的 friend 们,

我正在编写一个 shell 脚本,该脚本将更改某些系统首选项,例如需要权限提升才能处理的主机名 (scutil --set HostName)。 该脚本将在 Platypus 生成的应用程序内运行.

一旦我的脚本调用 scutil(例如),我当然会收到安全服务器提示我进行身份验证的信息。

查看安全性的手册页,有两个标志让我感兴趣:

security authorize
security execute-with-privileges

我还从手册页中得到了一个示例:

security -q authorize -uew my-right | security -q authorize -i my-right

授权权限并将其传递给另一个命令,作为向 shell 脚本添加授权的一种方式。

但是,我没有从中得到我想要的东西,我想我只是不明白如何正确使用它。 有人有任何额外的见解吗?当我寻找时,我所发现的东西并没有让我变得更明智。 我希望得到以下方面的帮助:

  1. 让脚本提示输入一次凭据,以运行提升的整个脚本。
  2. 提示输入凭据一次,以便将这些凭据发送到脚本内需要提升的各个命令。

使用 Platypus 标志运行脚本以管理员权限运行最终仍然会运行 $EUID 不为 0(零)的脚本。

我猜,这意味着脚本以某种方式提升,但不以 root 身份运行。如果有效,此提升似乎不足以调用 scutil --set HostName x,因为该命令仍然要求提供凭据。

如果需要进一步澄清,请大声喊叫!

提前致谢。

最诚挚的问候, 特德

最佳答案

我不熟悉使用安全命令行工具,或者 Platypus,但是查看安全性的手册页,它似乎与 Core Foundation 的 Apple 编程接口(interface)相匹配,所以我可以从这一点解释一下查看,假设命令行命令很可能使用相同的Core Foundation框架。

函数executeWithPrivileges现已被弃用,为了让程序执行需要提升的功能,程序必须将提升的操作分解到另一个在launchd中注册的“帮助程序”程序中。 launchd 负责处理帮助程序应用程序的实际执行和提升。

您的主应用程序也与助手应用程序进行了签名,因此只有它可以请求运行助手应用程序。

您可以在 SMJobBless 应用程序文档 here 中阅读有关此内容的更多信息。 .

尽管 SMJobBless 是用 Objective-C 编写的,而助手是用 C 编写的,您也许可以使用 Platypus 来代替脚本,但这不是我自己尝试过的,所以您必须进行试验。

正如您从文档中看到的,调用帮助程序应用程序是使用 URI(例如 com.apple.calculator)来识别帮助程序,因此它需要位于应用程序包中。

希望有帮助。

关于macos - 协助使用安全授权或特权执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18250682/

相关文章:

macos - 为什么在 MacOS Big Sur 上使用 Pakku 时会崩溃 'Cannot locate native library libarchive.13.dylib'

linux - 从docker容器内部发送文件到外部

linux - 在/etc/environment文件中设置环境变量,值为 "#"字符

node.js - `node-pre-gyp install --fallback-to-build` 在 OSX 上安装 MeanJS 时失败

php - IIS Server 7.0 仅在 Firefox (MacOs) 上返回 401 未经授权的访问

macos - 使用 Swift 在 OS X 应用程序中打开一个新窗口

Linux SVN 后提交不起作用?

bash - 使用 --include 选项运行 grep 时出现奇怪的问题

python - 使用 bash for 循环从位于子目录中的单独文件运行 Python doctest

macos - 如何为 MongoDB 创建配置文件