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

时间:2013-08-15 10:19:52

标签: macos shell

你好,SO的人,

我正在编写一个shell脚本,它将更改需要权限提升才能处理的某些系统首选项,例如HostName(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. 提示一次凭证,这样就可以将这些凭证发送到脚本中需要提升的各个命令。
  3. 使用Platypus标志运行脚本使用管理员权限运行仍然最终运行脚本且$ EUID不为0(零)。

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

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

    提前致谢。

    祝你好运, 泰德

1 个答案:

答案 0 :(得分:1)

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

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

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

您可以在SMJobBless应用程序文档here中阅读更多相关信息。

尽管SMJobBless是用Objective-C编写的,而C语言中的帮助器,你可以使用Platypus来代替使用脚本,但这不是我自己尝试过的,所以你必须进行实验。

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

希望有所帮助。