NSTask、命令行工具和 root

2024-03-15

我正在开发一个需要使用 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(使用前将#替换为@)

NSTask、命令行工具和 root 的相关文章

随机推荐

  • 用 C 语言制作一个没有框架的 GUI

    我正在学习 C 编程语言的 C 我刚刚完成第 2 章或第 2 单元 我浏览到最后发现没有任何关于如何创建 GUI 的内容 并且从我查找的内容来看 看来我必须使用一个框架 但我讨厌这个想法 在没有框架的情况下如何创建 GUI 这些框架到底是如
  • 随机图像显示[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 输出多个图像时最简单的代码或方法是什
  • python sax错误“文档元素后有垃圾”

    我使用 python sax 来解析 xml 文件 xml文件实际上是多个xml文件的组合 看起来如下
  • 如何使用 Ghostscript 删除 PDF 中的重复对象?

    使用命令行 Ghostscript 是否可以删除 PDF 中重复的嵌入对象 图像 并将其替换为单个实例 我有一个 200 多页的 PDF 每页上都有背景图像和一些较小的徽标 该文件非常大 因为完全相同的背景图像和徽标二进制文件嵌入在每个单独
  • 如何在 gulp 4 上将 gulpfile 任务分割成不同的文件,而无需任何像 gulp-hub 这样的包?

    我正在尝试将 gulpfile 任务拆分为不同的文件 我之前做过并将其添加到主 gulpfile 中 只需添加require path taskName 但这在 gulp 4 中不起作用 这是我的styles js file var gul
  • 是否可以在 Solidity 智能合约创建上预留一个地址用于收税?

    我正在使用 Solidity 编程语言 并尝试实现一个合约 即每笔交易都会扣除税费 并且该税费应该转移到正在创建的合约的某个特定地址 那可能吗 是的 这是可能的 所有以太坊代币标准 ERC 20 ERC 721 仅定义一个接口和很少的其他点
  • 如何在.net中将数字格式化为S9(5)V99 ascii

    我一直在寻找 s9 5 v99 但得到了不同的信息 而且不太清楚 有人可以展示如何转换或转换公式吗 谢谢 您在这里向我们展示的是 这PICTURECOBOL 数据声明的子句部分 COBOL 数据声明有点奇怪 需要一些时间来适应 这是一个介绍
  • Facebook API - 减少您请求的数据量,然后重试 1 行请求

    我的广告洞察请求的逻辑如下 如果 Facebook 要求我减少所请求的数据量 我会将日期范围减半 如果日期范围相同 我会减半limit 到了我发送此请求的地步 https graph facebook com v3 2 https grap
  • 使用 ccTouchesMoved 方法移动 CCCamera? (cocos2d、iPhone)

    所以我得到了这个工作 void ccTouchesMoved NSSet touches withEvent UIEvent event UITouch myTouch touches anyObject CGPoint location
  • 双向数据绑定不更新 UI

    我试图理解为什么设置值不会自动刷新用户界面 如果我调用 binding setItem UI 就会刷新 我知道绑定对象包含更新的值 但在设置 item name 和 item checked 后 UI 没有刷新 我究竟做错了什么 我需要每次
  • 如何在flutter中显示全屏图像

    有什么办法可以显示全屏图像吗 var imagejadwal new Image network https firebasestorage googleapis com v0 b c smp bruder appspot com o fo
  • yii:使用查询生成器选择总和

    我尝试执行一个简单的查询 如下所示 tot Yii app gt db gt createCommand gt select sum field gt from products gt where id id gt queryRow 但 t
  • Gradle 依赖项 - 最新快照

    我有一个 gradle 多项目构建 在一个项目中 我定义了对其他 JAR 的一些依赖项 并使用 始终依赖于 JAR 的最新版本 例如 runtime group com app name core version 这非常有效 每当我重新构建
  • jQuery:.ready() 和 .ajaxComplete

    我希望我的 JS 的某些部分在文档准备好或 ajax 查询完成时初始化像这样的东西 if document ready or document ajaxComplete do something 这样的条件可以写吗 我该如何做才正确呢 你可
  • C 中的快速 2D 卷积

    我正在尝试用 Python 实现卷积神经网络 最初 我使用 scipy signal 的 convolve2d 函数来进行卷积 但它有很多开销 而且用 C 实现我自己的算法并从 python 调用它会更快 因为我知道我的输入是什么样的 我实
  • 由于Android 6.0监听PhoneStateListener.LISTEN_DATA_CONNECTION_STATE的变化似乎不再需要READ_PHONE_STATE权限

    我正在将 Android 6 0 运行时权限应用到一个应用程序中 该应用程序侦听运营商数据连接状态更改 我首先尝试从清单中删除 READ PHONE STATE 以检查应用程序需要权限的位置 令我惊讶的是 该应用程序根本没有崩溃 此后 我在
  • OAuth 授权码何时到期?

    我知道 在 OAuth 中使用授权代码 授权代码 时 访问令牌的生命周期应该很短 但刷新令牌的生命周期可以很长 所以我为我的项目决定 访问令牌生命周期 1 天 刷新令牌生命周期 30 天 但授权码的典型生命周期是多长 我认为它应该非常非常短
  • go中如何连接Oracle

    我认为有两种方法可以在 Go 中连接到 Oracle DB 在 Windows 上 github com tgulacsi goracle github com mattn go oci8 但对于我这个水平的人 开源 golang的初学者
  • Liferay DLFileEntryLocalServiceUtil.addFileEntry 不创建 AssetEntry 记录

    我有一个自定义 portlet 它提供了一个用户可以上传文件的表单 上传的文件应存储在文档和媒体 Portlet 中 我正在使用创建文件条目DLFileEntryLocalServiceUtil addFileEntry 文件上传成功 记录
  • NSTask、命令行工具和 root

    我正在开发一个需要使用 dd 的应用程序 我使用应用程序包中的 shell 脚本来执行此操作 该脚本从应用程序本身收集参数 进行一些检查 然后启动 dd 为了进行此操作 我需要使用 root 调用 dd 并且我已经在 StackOverfl