blockdev --setro 不起作用(至少对我来说)

blockdev --setro 不起作用(至少对我来说)

我确信我不明白 blockdev 是如何工作的。

我已经安装了闪存驱动器并将其映射到/dev/sdb1.然后我在终端中输入(以 root 身份):

root# blockdev --setro /dev/sdb1
root# blockdev --report

报告内容是:

在此输入图像描述

正如你所看到的,报告说/dev/sdb1设置为只读(ro)。但我仍然可以在闪存驱动器中创建文件和文件夹。

我缺少什么?

答案1

blockdev这似乎是用于与 HDD 交互的驱动程序的问题。

摘录-RE: 只读环回物理磁盘

> Another option that I recently found was the 'blockdev' command. You can 
> specify that the blockdev is ro even before mounting.
>
> $ blockdev --report
> $ blockdev --setro /dev/device
>
> But my professor brought up the point - these probably depend on the 
> driver used. Maybe a driver for ntfs totally ignores the ro switch? I 
> don't totally agree that blockdev would be based on the driver, but how do
> you test whether the drive actually is in ro without writing? What if
> it fails?

本节也相关:

好吧,文件系统代码将(或应该)穿过块层,所以使用blockdev --setro应该是有效的。然而,分区似乎没有继承只读标志!换句话说,如果您有一个/dev/sda带有单个分区的硬盘/dev/sda1,您可以这样做blockdev --setro /dev/sda,但是如果您这样做, blockdev --getro /dev/sda1您会发现 sda1 的只读标志没有设置!我还没有验证在这种情况下是否可以写入 sda1。

因此,给定的分区似乎不会继承您可能需要使用的读/写权限mount

另一个摘录

> Then the saving grace - loopback devices. Mount the partition as a file. 
> You don't need to worry about drivers, support, etc.
> To do this use losetup to create a loopback device:
>
> $ losetup -r /dev/loop1 /dev/hda1
>
> This creates a read-only loopback device  pointing to `/dev/hda1`
> Then you can mount the loopback device (read-only if you are paranoid)
>
> $ mount -o ro /dev/loop1 /media/test

> This mounts the loopback device loop1 at `/media/test`. You can then 
> traverse the directory of `/dev/hda1` just like it was mounted.

> According to the PDF document I mentioned above, doing this:
>
> $ mount -o ro,loop /dev/hda1 /media/test

答案2

blockdev --setro必须在安装文件系统之前完成,而不是之后完成,否则您需要重新安装。它在联机帮助页中这么说。这比仅仅执行更多的写入操作mount -o ro,但它仍然不一定阻止所有低级写入(特别是由于软件错误)。可以认为blockdev --setro是告诉文件系统驱动程序驱动器上的写保护开关/跳线已翻转(记住驱动器/介质实际上有这些开关/跳线),但实际上并没有阻止写入。

mount -o ro阻止用户/程序创建/更改文件,但文件系统驱动程序本身仍然可以执行诸如更新上次安装日期和重播日志之类的操作。

可以使用只读循环设备(losetup -r),这可能更有效,但仅当文件系统不跨越设备时才有效。

有一些 Linux 取证 writeblocker 补丁可以提供--setro更多功能,但是将设备从认为可以写入设备的已安装文件系统下更改为只读仍然是非常粗鲁的。该文档会告诉您有关这些问题的更多信息: https://github.com/msuhanov/Linux-write-blocker

联机帮助页忽略了在整个磁盘设备 ( ) 上设置时--setro不一定影响分区设备 ( ) 的情况。/dev/sdb1/dev/sdb

相关内容