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 的相关文章

  • 如何替换每行中出现的所有字符串?

    我想在以下脚本中将所有出现的 用户名 替换为 但它仅替换第一次出现的情况 ls al sed s username 这就是 sed 默认情况下的工作方式吗 提前致谢 你需要g 全局 修饰符 sed s username g
  • 如何捕获 Scrollview 内的缩放 UIImageView 进行裁剪?

    问题 缩小图像进行裁剪就可以了 放大图像后进行裁剪会显示应有的图像上方的图像 我在那里的 yOffset 是因为我想要的裁剪方块从滚动视图的下方开始 Code CGRect rect float yOffset 84 rect origin
  • iOS 安全性将带有密码的数据发送至服务器或从服务器发送数据

    我正在构建一个应用程序 需要在服务器执行任何操作之前从用户设备发送密码以在服务器上进行身份验证 事情是这样的 用户的手机上有一个纯文本密码 该密码也在服务器中以 bcrypt 二进制文件的形式存在 用户想要从数据库中获取某些内容 因此用户通
  • 如何使用 cron 作业运行 python 文件

    您好 我创建了一个 python 文件 例如file example py 该文件将输出 sensex 值 假设该文件在linux系统上的路径为 Desktop downloads file example py 我通常会运行该文件pyth
  • 转换为 id 与真实类类型之间的差异,目标 C

    以下 2 种说法有什么区别 UILabel mainLabel id cell viewWithTag 10 and UILabel mainLabel UILabel cell viewWithTag 10 简短的回答 没有 这两种强制转
  • 如何判断一个具有很多属性的对象(自身)是否发生了改变?

    问题的简短版本 我有一个带有大量声明属性的类 我想跟踪它是否有任何更改 以便当我调用save方法 当不需要时它不会写入数据库 我如何更新isDirty财产无需为所有声明的属性编写自定义设置器 问题的较长版本 假设我有一堂这样的课 inter
  • UITableView 顶部出现间隙[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我不确定现在问这个问题是否合适 我正在表视图上使用 Xcode 5 预览版 现在的问题是我的表格视图是否被选择为group比我在第一个单元
  • 在 Objective-C 中做事的正确位置

    我开始尝试使用 ObjectiveFlickr 框架 目标是创建一个相对简单的 iPhone 地图应用程序 显示当前 MKMapView 区域内带地理标记的 flickr 内容 我遇到了与线程相关的问题before https stacko
  • 使用 strftime 将 NSDate 转换为 String

    如何将 NSDate 转换为使用 strftime 说明符格式化的 NSString 你可以使用 strftime NSDate date NSDate date time t time date timeIntervalSince1970
  • bash双括号问题

    我对 bash 脚本非常陌生 在使用双括号时遇到了问题 我似乎无法让它们在 Ubuntu Server 11 10 中工作 我的下面的脚本位于 if test sh 中 bin bash if 14 14 then echo FOO fi
  • 当使用 loadView 创建视图时,视图的框架大小在旋转时不会改变

    我有没有 xib 的 UIViewController 并且我正在使用 loadView 来构建创建并添加两个滚动视图的 UI 问题是 当旋转发生时 主视图框架的大小不会改变 我的意思是 我在 loadView 中设置主视图的初始帧大小 纵
  • UITableView 显示的行数多于 numberOfRowsInSection 中指定的行数:

    我希望我的 tableView 显示 6 行 其中包含文本 在本例中为 示例 据我所知 我有我的numberOfSectionsInTableView and numberOfRowsInSection 设置正确 请参阅下面的示例代码 NS
  • NSUndoManager 会撤消后台发生的更改吗?

    我有一个编辑视图控制器 我正在使用 NSUndoManager 它是我的持久性存储 核心数据项目 的一组 我的应用程序的功能之一是与外部服务器同步 我想知道的是 如果我正在视图中编辑某些内容 同时应用程序正在与服务器同步 如果我改变主意并决
  • 使用动画更改 UIView 背景颜色

    我想改变我的UIView带有过渡动画的背景颜色 例如 如果视图是红色的 我将其更改为蓝色 蓝色将从屏幕底部向上滑动到顶部并充满整个屏幕 我想通过制作一个来做到这一点UIView具有相同大小和所需颜色 然后将其从屏幕外一直动画到顶部 但这似乎
  • 如何从 C 函数创建 shell 命令

    想知道如何获取一组 C 函数并将它们转换为 shell bash 命令 假设我有一组简单的 C 函数 int fn1 some C code for function 1 int fn2 some C code for function 2
  • PHP:如何访问根目录之外的下载文件夹? [复制]

    这个问题在这里已经有答案了 我如何创建一个 PHP 脚本 页面 允许会员 买家下载存储在根目录之外的下载文件夹中的压缩文件 产品 我正在使用 Apache 服务器 请帮忙 谢谢 保罗 G 您可能会在 soac 提供的链接中找到一些更好的信息
  • 更改 UINavigationBar 中 UIBarButtonItem 的位置

    如何更改 UIBarButtonItem 在 UINavigationBar 中的位置 我希望我的按钮比正常位置高约 5 像素 此代码为 UINavigationBar 创建一个具有图像背景和自定义位置的后退按钮 诀窍是创建一个中间视图并修
  • 如何确定 NSURLSessionTask 请求何时开始?

    I use NSURLSessionTask我正在尝试监视我的一些 HTTP 请求需要多长时间 我可以监视什么委托方法 或其他方法 NSURLSessionTask实际上提出了最初的请求 如果这是一个NSURLConnection里面一个N
  • 使用 sed 将 old-link-url 替换为 new-link-url

    我正在 bash 中编写一个脚本 将 old link url 替换为 new link url 我的问题是 sed 由于斜杠而无法替换 url 如果我只输入一些文字就可以了 my code sed e s old link new lin
  • stringFromDate 始终为 NIL

    我知道这是一个重复的问题 但是在 stackoverflow 和 google 上搜索了许多类似的问题后 没有一个解决方案对我有用 我正在尝试将从数据库收到的日期转换为字符串格式以在 iPhone 应用程序中显示 我正在按以下方式将日期转换

随机推荐

  • 用 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