blockdev --setro가 작동하지 않습니다(적어도 나에게는)

blockdev --setro가 작동하지 않습니다(적어도 나에게는)

나는 blockdev가 어떻게 작동하는지 이해하지 못한다고 확신합니다.

플래시 드라이브를 마운트하고 에 매핑했습니다 /dev/sdb1. 그런 다음 터미널에 루트로 다음을 입력했습니다.

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/sda1sda1에 대한 읽기 전용 플래그가 설정되지 않은 것을 알 수 있습니다! 이 경우 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 포렌식 쓰기 차단 패치가 있지만 --setro장치에 쓸 수 있다고 생각하는 마운트된 파일 시스템에서 장치를 읽기 전용으로 변경하는 것은 여전히 ​​무례한 행동입니다. 이 문서에서는 이러한 문제에 대해 자세히 설명합니다. https://github.com/msuhanov/Linux-write-blocker

맨페이지에서는 전체 디스크 장치( )의 설정이 --setro반드시 파티션 장치( )에 영향을 미치는 것은 아니라는 점을 무시합니다./dev/sdb1/dev/sdb

관련 정보