我正在开发一个需要使用 dd 的应用程序(我使用应用程序包中的 shell 脚本执行此操作,该脚本从应用程序本身收集参数,进行一些检查,然后启动 dd)。
要进行此操作,我需要使用 root 调用 dd,并且我已经查看了 StackOverflow 上的几个解决方案。在我看来,最简单的实现是http://www.sveinbjorn.org/STPrivilegedTask
问题是我的 NSTask 进行了一些复杂的读/写操作(STPrivilegedTask 中不存在)并且不需要全部特权。
因此,我在 c 中编写了一个小型辅助工具,它使用我的应用程序中的正确参数调用我的脚本。我认为的解决方案是在运行我的小型辅助工具后使用 STPrivilegedTask 到 SUID,这样我就可以使用 root 启动它(以及我的脚本和 dd),并且在成功启动后不久我将辅助工具设置为非 SUID(如果有任何错误,我也会这样做,在应用程序退出、应用程序启动等时更安全)。
我实现了它并且工作得很好,也许它并不完美,但我认为这一切都在包中,并且在 SUID 中使用帮助工具只是为了启动听起来足够安全。
有什么想法吗?
谢谢!