cryptsetup은 읽기 전용 매핑을 설정하는 --readonly
또는 옵션을 사용하여 호출할 수 있습니다 .-r
cryptsetup --readonly luksOpen /dev/sdb1 sdb1
장치를 읽기 전용으로 연 후 나중에 읽기-쓰기로 다시 매핑할 수 있습니까? 분명히, 먼저 닫은 다음 다시 열지 않고 읽기-쓰기로 매핑하는 것을 의미합니다. 비밀번호를 다시 입력하지 않고 다시 매핑할 수 있나요?
이것이 가능하지 않다면 cryptsetup이 이를 지원하지 않는 것일까요, 아니면 좀 더 기본적인 수준이 있습니까?
답변1
명령으로는 작동하지 않는 것 같습니다 cryptsetup
. 불행하게도 cryptsetup
불변 플래그가 몇 가지 있는데... --allow-discards
이것이 그 중 하나입니다. 컨테이너를 열 때 이를 설정하지 않으면 나중에 추가할 수 없습니다.
적어도 cryptsetup
주문은 아닙니다. 그러나 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 소스 코드에는 이 작업을 수행할 수 있는 옵션이 없습니다.