【问题标题】:OS X: always run app with root privilegesOS X:始终以 root 权限运行应用程序
【发布时间】:2014-11-18 09:28:04
【问题描述】:

我目前正在开发一个需要 root 权限才能进行多项操作(例如删除系统日志文件等)的应用程序。一种解决方案是实现一个特权帮助工具,该工具将由 launchd 自动启动。这样,用户每次执行此类操作时(或每次需要安装帮助程序时)都必须输入管理员密码。

现在我想知道是否可以创建一个安装程序包,它将以 root 权限安装应用程序,这样用户只需输入一次管理员凭据(在安装过程中),并且每次启动应用程序时都会启动它具有 root 权限(不提示输入管理员凭据)。

有什么办法可以做到吗?

【问题讨论】:

标签: objective-c macos cocoa


【解决方案1】:

在 Unix 系统上执行此操作的常用方法是使用 setuid。基本上,您将程序的所有者更改为 root,并设置“执行时设置用户或组 ID”位 (s):

$ chown root:root myprogram
$ chmod u+s myprogram

任何时候用户执行你的程序,它都会以root身份运行。

但请注意,提示输入管理员凭据有很好的理由。 使用这种机制(或者一般来说,做你想做的事情)很容易导致非常危险的安全漏洞,比如权限提升。您在其上使用setuid 的任何可执行文件都应由熟悉该过程的人进行彻底审核,否则攻击者 root 安装您的程序的所有计算机。

【讨论】:

  • 您说的是代码注入,它会导致(由我的应用程序)以 root 权限执行第 3 方(黑客)代码?
  • @TheGoonie 见privilege escalation。除了以root 运行时的通常注意事项(例如通过缓冲区溢出进行代码注入)之外,您还可能成为许多其他针对执行环境的攻击的目标,例如 shell 注入
  • 我明白了。我想,我会进一步深入研究特权辅助工具。谢谢,贡卡洛普。
  • 嗯...我尝试设置该位,并且关于来自终端的权限信息,所有者现在是“root”。但是当我执行应用程序时,活动监视器仍将我显示为执行用户(结果:应用程序没有 root 权限)。
  • 我误解了您所说的“应用程序”是什么意思。正如我所提到的,setuid适用于程序。我对 OS X 了解不多,但我猜你的 PkgInstalledApp.app is really a directory。您需要setuid 实际运行的二进制文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-24
  • 2012-02-13
  • 2013-04-04
  • 1970-01-01
  • 2013-01-19
  • 2011-05-22
  • 2014-09-16
相关资源
最近更新 更多