我正在开发一个需要使用 dd 的应用程序(我使用应用程序包中的 shell 脚本来执行此操作,该脚本从应用程序本身收集参数,进行一些检查,然后启动 dd)。
为了进行此操作,我需要使用 root 调用 dd,并且我已经在 StackOverflow 上查看了几个解决方案。在我看来,最简单的实现就是这个http://www.sveinbjorn.org/STPrivilegedTask http://www.sveinbjorn.org/STPrivilegedTask
问题是我的 NSTask 进行了一些复杂的读/写操作(STPrivilegedTask 中不存在)并且不需要全部特权。
因此,我用 c 语言编写了一个小辅助工具,它使用应用程序中的正确参数调用我的脚本。我想的解决方案是使用 STPrivilegedTask 来 SUID 一旦我的小帮助工具,这样我就可以用 root 启动它(以及我的脚本和 dd),成功启动后不久,我将帮助工具设置为非 SUID (如果有任何错误,我会在应用程序退出、应用程序启动等时执行相同的操作。为了更安全)。
我实现了它并且工作得很好,也许它并不完美,但我认为全部都在捆绑包内,并且在 SUID 中使用辅助工具来启动听起来足够安全。
有什么想法吗?
Thanks!
您可以使用沙箱在 NSTask 中运行新进程
sandbox-exec -f <profile> <command>
sandbox-exec -f my_profile.sb "/bin/dd -if=/dev/disks01 of=/dev/target"
http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/sandbox-exec.1.html http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/sandbox-exec.1.html
这里有一些个人资料示例
/usr/share/sandbox/
你必须给予 dd 足够的访问权限才能工作,我还没有尝试或检查 dd 需要什么,我会从这样的开始:
(version 1)
(deny default)
(debug deny)
(import "system.sb")
(allow file-read-data file-write-data file-ioctl (regex #"^/dev/.*$"))
(allow process-exec (literal "/usr/sbin/helper"))
更新:
值得一提的是,您可以使用
sandbox-exec -p 命令
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)