읽기 전용 LUKS 파티션을 읽기-쓰기로 다시 매핑

읽기 전용 LUKS 파티션을 읽기-쓰기로 다시 매핑

cryptsetup은 읽기 전용 매핑을 설정하는 --readonly또는 옵션을 사용하여 호출할 수 있습니다 .-r

cryptsetup --readonly luksOpen /dev/sdb1 sdb1

장치를 읽기 전용으로 연 후에 나중에 읽기-쓰기로 다시 매핑할 수 있습니까? 분명히, 먼저 닫은 다음 다시 열지 않고 읽기-쓰기 매핑을 의미합니다. 비밀번호를 다시 입력하지 않고도 다시 매핑할 수 있나요?

이것이 가능하지 않다면 cryptsetup이 이를 지원하지 않기 때문입니까, 아니면 좀 더 근본적인 수준이 있습니까?

답변1

명령 으로는 불가능한 것 같습니다 cryptsetup. 불행하게도 cryptsetup그러한 불변 플래그가 몇 가지 있습니다... --allow-discards역시 그 중 하나입니다. 컨테이너를 열 때 설정되지 않은 경우 나중에 추가할 수 없습니다.

적어도 명령은 아닙니다 cryptsetup. 그러나 일반 Device Mapper 대상을 생성하므로 를 사용하여 수정할 cryptsetup수 있습니다 . dmsetup물론 이는 여러 가지 이유로 권장되지 않습니다. 이는 사용 중인 파티션의 파티션 테이블을 변경하는 것과 같습니다. 엉망으로 만들면 모든 데이터가 손실될 수 있습니다.

장치 매퍼를 사용하면 런타임 시 모든 장치를 동적으로 다시 매핑할 수 있으며 데이터의 안전에는 전혀 신경 쓰지 않습니다. 이것이 바로 이 기능이 일반적으로 안전을 위해 필요한 메타데이터를 유지하는 LVM 레이어 뒤에 래핑되는 이유입니다.

읽기 전용 LUKS 장치를 생성합니다:

# truncate -s 100M foobar.img
# cryptsetup luksFormat foobar.img
# cryptsetup luksOpen --read-only foobar.img foobar

방법은 dmsetup그것을 본다:

# dmsetup info foobar
Name:              foobar
State:             ACTIVE (READ-ONLY)
Read Ahead:        256
Tables present:    LIVE
[...]
# dmsetup table --showkeys foobar
0 200704 crypt aes-xts-plain64 ef434503c1874d65d33b1c23a088bdbbf52cb76c7f7771a23ce475f8823f47df 0 7:0 4096

마스터 키는 LUKS가 제공하는 무차별 대입 보호 기능을 깨뜨리기 때문에 일반적으로 유출되어서는 안 되는 마스터 키에 유의하세요. 불행히도 dmsetup직접적인 옵션이 없기 때문에 그것을 사용하지 않고는 방법을 찾지 못했습니다 --make-this-read-write. 그러나 dmsetup reload매핑을 완전히 교체할 수 있으므로 읽기-쓰기 모드에서 매핑을 자체적으로 교체하겠습니다.

# dmsetup table --showkeys foobar | dmsetup reload foobar
# dmsetup info foobar
Name:              foobar
State:             ACTIVE (READ-ONLY)
Read Ahead:        256
Tables present:    LIVE & INACTIVE

다시 로드가 비활성 테이블로 이동하기 때문에 다시 로드 후에도 여전히 읽기 전용입니다.

비활성 테이블을 활성화하려면 다음을 사용하십시오 dmsetup resume.

# dmsetup resume foobar
# dmsetup info foobar
Name:              foobar
State:             ACTIVE
Read Ahead:        256
Tables present:    LIVE

따라서 읽기-쓰기 LUKS 장치가 있습니다.

라이브 파일 시스템에서 작동합니까?

# cryptsetup luksOpen --readonly foobar.img foobar
# mount /dev/mapper/foobar /mnt/foobar
mount: /mnt/foobar: WARNING: device write-protected, mounted read-only.
# mount -o remount,rw /mnt/foobar
mount: /mnt/foobar: cannot remount /dev/mapper/foobar read-write, is write-protected.

따라서 읽기 전용입니다. 읽기-쓰기로 만들고 다시 마운트합니다.

# dmsetup table --showkeys foobar | dmsetup reload foobar
# dmsetup resume foobar
# mount -o remount,rw /mnt/foobar
# echo hey it works > /mnt/foobar/amazing.txt

읽기 전용으로 돌아갈 수 있나요?

# mount -o remount,ro /mnt/foobar
# dmsetup table --showkeys foobar | dmsetup reload foobar --readonly
# dmsetup resume foobar
# mount -o remount,rw /mnt/foobar
mount: /mnt/foobar: cannot remount /dev/mapper/foobar read-write, is write-protected.

아마도 작동할 겁니다. 기존 암호화 매핑에 플래그를 추가하는 프로세스 allow_discards는 비슷합니다. 이 플래그가 포함된 테이블을 다시 로드해야 합니다. 그러나 폐기 지원이 없음을 이미 감지한 파일 시스템은 즉시 이를 다시 감지하지 못할 수도 있습니다. 그래서 그것이 얼마나 실용적인지는 불분명합니다.


cryptsetup그럼에도 불구하고 그렇게 하지 않을 타당한 이유가 없는 한, 비록 그것이 마운트를 해제하고 암호 문구를 다시 제공해야 하는 경우에도 일반 명령을 사용하여 다시 열어야 합니다 . 모든 면에서 더 안전하고 더 중요한 것은 LUKS 보안 개념을 우회하지 않는다는 것입니다.

답변2

볼륨이 열린 후에는 읽기 전용에서 읽기-쓰기로 변경할 수 없습니다. cryptsetup 소스 코드에는 해당 작업을 수행할 수 있는 옵션이 없습니다.

관련 정보