在 c/c++ 中打开 PhysicalDrive 的句柄并写入 MBR 的 linux 等效是什么?



在Windows中,您可以轻松地打开PhysicalDrive的句柄(甚至\\.\c:(,并从用户模式使用WriteFile写入磁盘的第一个扇区,想知道执行此Linux的等效c/c ++代码是什么,它需要尽可能低的权限? 是否可以在 Linux 中执行此操作而无需使用 sudo 运行代码?

基本上,我想编译一个ELF程序来做到这一点,但是在Linux中,我该怎么做呢?因为在Windows中,您可以从用户模式执行此操作。

SCSI PASSTROUGH直接消息在Linux中也可以用于读取和写入磁盘扇区吗?如果是这样,那么如何在Linux中将SCSI直通IRP消息发送到磁盘驱动程序以写入文件,在Windows中我们可以使用DeviceIOcontrol发送消息(对不起,新手问题,我不太熟悉Linux编程(

在 Linux 中,每个设备都是一个文件。所以你的第一个物理硬盘可能是/dev/sda .如果您有足够的权限,则可以直接与硬盘驱动器进行通信(打开,读取和写入(。毕竟。。它只是一个文件。

至于特权:任何用户都可以这样做,只要他/她具有使用特定设备执行任何您想要的操作所需的权限。这可以通过文件权限工作。例如,您可以将用户添加到某个组并将此组分配给您的设备,通过 chmod 为该组提供所需的权限。

您还可以为程序设置 suid 位,该程序对您的物理驱动器执行操作。含义:如果用户(他仍然需要此程序的执行权限(启动它,则程序将使用另一个用户 ID 运行。这可能是根。含义:此过程单独使用提升的权限运行,为用户执行他/她无法执行的操作。

在 Linux 上,磁盘通常是一些块设备文件,例如/dev/sda。参见 sd(4( 和 hd(4(。

伪文件/proc/partitions提供磁盘分区。参见 proc(5( 并尝试在 shell 或终端仿真器中cat /proc/partitions

您可以有一个 setuid 程序访问磁盘。你需要 ioctl(2(。当心:setuidsetgid机制很棘手。花几个小时来理解它(否则你会打开一个漏洞(。

有关更多信息,请阅读高级 Linux 编程,然后阅读系统调用(2(

在配置良好的 Linux 系统上,并非所有用户都可以访问/dev/sda。在 Debian 上,它有:

% ls -l /dev/sda
brw-rw---- 1 root disk 8, 0 Jun 25 18:53 /dev/sda

所以你可以编写一个disk的setgid ELF可执行文件。参见凭证 (7( 和能力 (7( 和 execve(2( 和 elf(5(

还可以查看KernelNewbies,研究内核源代码,阅读initrd和systemd。

然后研究改进GNU的源代码,因为它是自由软件。

最新更新