dd 操作不允许,如何逃离沙箱?

dd 操作不允许,如何逃离沙箱?

我正在尝试恢复磁盘上的坏扇区,在此过程中,需要覆盖坏扇区。网上有很多资料建议使用 dd 来执行此操作,但这样做不起作用:

$ sudo dd if=/dev/zero of=/dev/disk1 bs=512 count=1 seek=961575240
dd: /dev/disk1: Operation not permitted
$

我猜想也许对已挂载的文件系统执行此操作有某种检查,所以我启动到单用户模式(至少处于只读模式),但仍然出现相同的错误。不过还显示了一些有关沙盒的附加消息。

Sandbox: dd(5) System Policy: deny(1) file-write-data /dev/disk1
Sandbox: dd(5) System Policy: deny(1) file-write-data /dev/disk1

有没有办法让 dd 离开沙盒?我试过了

sudo sandbox-exec -p '(version 1) (allow default)' /bin/dd if=/dev/zero of=/dev/disk1 bs=512 count=1 seek=961575240

但仍然出现操作不允许的错误。

这是在 OS X 10.11 GM 上

答案1

我没有牺牲的电脑来测试这个,但我认为你遇到了系统完整性保护El Capitan 中的功能。大多数情况下,SIP 的作用是阻止您(即使以 root 身份)修改磁盘的系统区域(/System、/sbin、/bin/ 大部分 /usr 等)、干扰系统进程、加载未正确签名的 kext 等。但为了加强对系统文件夹的保护,它还会阻止对系统卷所在设备的原始写入。是的,即使您是 root(这就是重点——它是为了限制获得 root 访问权限的恶意软件造成的损害)。

思考此限制不适用于恢复模式。计算机启动时按住 Command-R,它将从隐藏的紧急分区启动。打开终端(它位于实用程序菜单下),然后从dd那里尝试。dd可能不存在于恢复系统中(它非常小),但您可以改用/Volumes/Macintosh\ HD/bin/dd。您不需要sudo,您已经是 root 了。

如果这不起作用,请尝试使用 禁用 SIP csrutil disable,然后正常重启(请参阅Apple 关于配置 SIP 的文档)。然后,当您完成后,我建议重新启用它——这是一个有用的安全功能。

答案2

就我而言,我必须更改“系统偏好设置 > 安全和隐私 > 完全磁盘访问 > 终端”或 iTerm2。

在我授予终端或 iTerm2 完全磁盘访问权限后,无需更改 SIP/root 或+dd即可允许操作... 我也尝试过 ;-)r

答案3

尝试使用su

在 linux/unix 上,您首先必须为 root 用户设置密码,例如:

sudo passwd root

那么您应该有足够的权限来执行此操作。

还请检查所有分区是否均已卸载。

输入mount并检查已安装的分区。

然后:

sudo umount /dev/disk1sX

而不是disk1sX写入正确的分区。

相关内容