我一直在寻找适用于 Linux 的解决方案,该解决方案可以禁用/拒绝直接写入块设备的尝试(最好仅限某些块设备,例如启动磁盘(如 Apple 的 SIP)),同时仍然允许在文件系统级别进行写入。
grsecurity 是我发现的第一个拥有此解决方案的项目,也是我得到这个想法的地方。他们的问题是我不需要(也不关心)它提供的其余内容,而且它太全面了。任何以只读方式安装或卸载的块设备本身都将变为只读(即,您无法运行dd if=/dev/zero of=/dev/sda1
),并且如果它们在运行时是这样的,则不能(重新)以读写方式安装它们。激活保护。看看他们的代码,我设法编写了一个内核模块(以及带有单向 sysctl 条目的内核补丁)来完成同样的事情。后来我修改了内核模块,仅根据名称阻止原始写入/dev/sda
操作/dev/sda1
。然后,我再次重写它,仅根据主编号阻止写入,因为我不知道如何处理非规范路径。
我放弃了内核,因为模块要容易得多,但如果我知道如何编写可以确定启动设备及其父设备的代码,那么我就不必对数字进行硬编码,那就更容易了。因此,我求助于 Google 来寻找解决方案,因为我认为这将是一个常见的想法(不以启动磁盘为目标)。我的结果仅涉及原始设备、用于取证的写入阻止程序以及与内存相关的原始 IO。用于描述禁止直接写入数据存储设备的系统的术语是什么?