![가상 머신의 디스크를 암호화하는 방법(gcloud, cryptsetup):](https://linux55.com/image/171339/%EA%B0%80%EC%83%81%20%EB%A8%B8%EC%8B%A0%EC%9D%98%20%EB%94%94%EC%8A%A4%ED%81%AC%EB%A5%BC%20%EC%95%94%ED%98%B8%ED%99%94%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95(gcloud%2C%20cryptsetup)%3A.png)
Google 클라우드 서비스(컴퓨팅 인스턴스)는 기본적으로 디스크 저장소에 대한 암호화를 제공하며, 고객은 이 기능을 통해 자체 키를 제공할 수 있습니다.고객이 제공한 암호화(상세한여기반품).
디스크 암호화를 적용하는 방법비밀번호 설정Google에 암호화 키를 제공하지 않습니까?
답변1
Linux에서는 암호화된 디스크(luks)를 사용할 때 부팅 시 비밀번호로 잠금이 해제됩니다. 여기서 아이디어는 다음 명령을 사용하여 디스크를 암호화하는 것입니다.비밀번호 설정Google 시스템(기본적으로 암호화됨) 위에서 인스턴스에 조기 액세스하여 부팅 시 드라이브 잠금을 해제할 수 있습니다. 이는 원격 직렬 콘솔 기능을 통해 달성할 수 있습니다(이 가이드에서는 opensuse VM을 사용하므로 단계는 다른 배포판과 다르지 않습니다).
결점:
- 디스크 속도가 10~15% 감소됩니다.
- 시작/다시 시작 시 직렬 세션을 통해 암호화된 비밀번호를 도입해야 합니다.
- 실패/마이그레이션 시 다시 시작하려면 자동이 아닌 경우 수동으로 비밀번호를 입력해야 할 수 있습니다.
전문적인:
- 데이터 액세스는 실제로 고객/소유자로 제한됩니다.
- 미사용 고객 개인 디스크 암호화.
- 고객은 스냅샷 백업 및 이미지에 대한 개인 디스크 암호화를 보유하고 있습니다.
- Google은 디스크의 데이터에 액세스할 수 없습니다(또는 적어도 매우 어려울 것입니다).
- 디스크 암호화 키는 Google에 제공되지 않습니다.
- 사용자 정의 가능한 암호화 방법, 알고리즘 및 키 크기.
- 데이터 보호 개선 등
구현 요약:
- 0 기존 VM 인스턴스가 있음
- 1 인스턴스/VM 직렬 액세스 활성화
- 2 추가(대상) 암호화 하드 디스크 생성
- 3 현재 하드 드라이브를 암호화된 하드 드라이브에 복사합니다.
- 4 기존 드라이브를 새 드라이브로 교체
- 5 VM을 시작하고 직렬 콘솔을 통해 비밀번호를 입력합니다.
가상 머신의 디스크를 암호화하는 방법(gcloud, cryptsetup):
전제 조건:
- 대상 지역에 새 임시 VM을 만듭니다(대상 머신의 복사본이어야 하며 스냅샷으로 디스크를 백업한 다음 스냅샷을 새 디스크에 복원할 수 있음).
- 새 빈 디스크를 만듭니다(나중에 암호화됨). 이는 대상 디스크입니다. 크기는 소스 디스크(새 /boot 파티션의 경우)보다 최소 256MB 이상 커야 하며, 공간을 확장하려면 더 커야 합니다.
- 두 디스크를 임시 가상 머신에 마운트하고 시작합니다.
Temporary VM Config: /dev/sda : main disk, copy of the original source disk /dev/sdb : new empty disk larger than /dev/sda
직렬 콘솔:
그럽 구성 업데이트:
- 요약:직렬 콘솔 활성화(직렬 콘솔을 통해 grub에 액세스할 수 있도록 설정)
- 이 콘텐츠를 다음에 추가/수정하세요.
/etc/default/grub
# ...Enabling serial console... GRUB_TIMEOUT=15 GRUB_TERMINAL="serial" GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1" # ...End
- 설정 적용
grub2-mkconfig -o /boot/grub2/grub.cfg
- 재부팅하고 직렬 콘솔에서 grub에 액세스할 수 있는지 확인하세요.
대상 디스크를 포맷합니다.
- 요약:
/boot
기존 시스템에 이미 별도의 파티션이 있는지 여부에 관계없이 시스템용 (암호화되지 않음)과 시스템용/
(암호화됨) 으로 구성된 2개의 파티션을 생성해야 합니다./boot
새 시스템에서는 시스템이 grub을 시작하고 비밀번호를 입력하도록 요청해야 합니다. 암호화된 파티션의 잠금을 해제합니다. - 빈 디스크를 포맷하고 2개의 파티션을 생성합니다. 하나는 크기가 256MB 이상(포함
/boot
)이고 다른 하나는 나머지 공간을 포함합니다.fdisk /dev/sdb
이렇게 하려면 256MB 이상의 첫 번째 파티션을 기본 파티션으로 생성하고 활성화합니다.부팅 가능한 플래그;그런 다음 남은 공간과 동일한 크기로 두 번째 기본 파티션을 만듭니다. (이전 시스템에서 스왑 파티션을 사용하는 경우 이 파티션도 만들어야 합니다.)/dev/sda : /dev/sdb : |- sdb1 : 256 MB primary and bootable (empty) |- sdb2 : xx GB primary (empty)
- 부팅 파티션의 파일 시스템을 ext4로 설정
mkfs.ext4 /dev/sdb1
- 보안 강화를 위해 두 번째 파티션 지우기
dd if=/dev/urandom of=/dev/sdb2 bs=4096 status=progress
sdb2
암호화를 다음 으로 설정
필요에 맞게 비밀번호, 키 크기, 암호화 유형 등을 변경하세요.cryptsetup -y -v --cipher aes-xts-plain64 --key-size 256 --pbkdf-force-iterations=100200 --hash sha256 --type luks1 --label=linux --use-random luksFormat /dev/sdb2
- 암호화된 파티션 확인
cryptsetup luksDump /dev/sdb2
- 암호화된 파티션 잠금 해제
cryptsetup luksOpen /dev/sdb2 crypteddisk
- 암호화 매핑 파티션을 ext4로 설정
mkfs.ext4 /dev/mapper/crypteddisk
- 암호화된 파티션 끄기
cryptsetup close /dev/mapper/crypteddisk
- 요약:
소스 디스크를 복제합니다.
- 요약:
/
시스템을 새로운 암호화된 파티션(sdb2)에 복사해야 합니다/dev/mapper/crypteddisk
. 이 단계에서는 다양한 도구를 사용할 수 있습니다. 이 가이드dd
에서는중요한 팁dd
여기서 오류 없이 디스크를 복사 하려면 원본 파티션을 마운트 해제해야 합니다. 네가 원한다면데이터 손실 방지다른 임시 가상 머신을 생성하고 소스 및 대상 디스크를 추가 디스크로 연결하여 이 단계를 수행할 수 있습니다... 그렇지 않으면 마이그레이션 프로세스가 너무 길어지는 것을 피하기 위해 실행 중인 프로세스 대부분을 종료하고dd
소스가 있는 경우 사용합니다. 파티션을 마운트 해제한 다음(권장하지 않음)fsck
소스를 마운트 해제하지 않아 발생한 오류를 수정하는 데 사용됩니다. - 암호화된 파티션 잠금 해제
cryptsetup luksOpen /dev/sdb2 crypteddisk
- 다음 명령을 사용하여 소스 파티션을 대상에 복사합니다(
/
라고 가정/dev/sda1
).dd if=/dev/sda1 of=/dev/mapper/crypteddisk bs=4096 status=progress
- 새로운 암호화된 파티션 확인 및 복구
fsck /dev/mapper/crypteddisk
- 디스크 구조를 확인하세요
fdisk -l
(암호화된 디스크 크기에 주의하지 마세요. 나중에 수정하겠습니다).
- 요약:
파티션 UUID:
- 모든 파티션에 대한 모든 UUID를 가져오고 해당 정보를 유지합니다.
blkid /dev/sda blkid /dev/sda1 blkid /dev/sdb blkid /dev/sdb1 blkid /dev/sdb2 blkid /dev/mapper/crypteddisk
- 모든 파티션에 대한 모든 UUID를 가져오고 해당 정보를 유지합니다.
디스크 크기를 조정합니다.
- 요약:이 단계에서는 새로운 암호화된 파티션의 크기를 확장합니다.
- 암호화된 파티션 확장
cryptsetup resize crypteddisk -v e2fsck -f /dev/mapper/crypteddisk resize2fs /dev/mapper/crypteddisk
백업 MBR:
- 필수는 아니지만 유용할 수 있습니다.
dd if=/dev/sdb of=/backup/location/sdb.mbr count=1 dd if=/dev/sda of=/backup/location/sda.mbr count=1
- 필수는 아니지만 유용할 수 있습니다.
부팅 파티션을 설정합니다:
- 새 부팅 파티션을 마운트하고
/boot
내용을 복사합니다.mkdir /tmp/boot mount /dev/sdb1 /tmp/boot cp -a /boot/* /tmp/boot/ ls -l /tmp/boot/* umount /tmp/boot rmdir /tmp/boot
- 기존
/boot
폴더 내용을 삭제하고 설치 위치로 유지하세요.mkdir /tmp/system mount /dev/mapper/crypteddisk /tmp/system rm -rf /tmp/system/boot/* ls -l /tmp/system/boot/* umount /tmp/system rmdir /tmp/system
- 새 부팅 파티션을 마운트하고
Chroot를 실행하고 새 시스템을 설정합니다.
새 암호화된 디스크를 현재 디스크(chroot)로 마운트하고 새 시스템 구성, 암호화 등을 적용하도록 설정합니다(
/mnt
계속하기 전에 비어 있는지도 확인하세요).mount /dev/mapper/crypteddisk /mnt/ mount /dev/sdb1 /mnt/boot for i in sys dev proc; do mount --bind /$i /mnt/$i; done chroot /mnt
이제부터 우리는 새로운 시스템을 사용할 것입니다(구성 파일의 sdb는 sda로 처리되어야 함을 기억하십시오).
구성을 업데이트하고
/etc/fstab
(sda1 대신 sdb1 uuid를 사용해야 함)cat /etc/fstab
출력은 다음과 같습니다.# Main Partition ---------------------- # Entry for /dev/mapper/crypteddisk (sda2) : UUID=CHANGE-THIS-WITH-CRYPTEDDISK-UUID / ext4 noatime,acl 0 0 # Boot Partition ---------------------- # Entry for /dev/sda1 : #/dev/sda1 /boot ext4 defaults 1 2 UUID=CHANGE-THIS-WITH-THE-CURRENT-SDB1-UUID /boot ext4 noatime,acl 1 2 # Swap Partition/File ----------------- /swap/swapfile swap swap defaults 0 0 #
/etc/crypttab
구성을 업데이트하고 (crypttab
파일이 없는 경우-rw-r--r--
권한을 사용하여 생성) sda1 또는 crypteddisk 대신 sdb2 uuid를 사용해야 합니다.cat /etc/crypttab
출력은 다음과 같습니다.crypteddisk UUID=CHANGE-THIS-WITH-CURRENT-SDB2-UUID
grub 구성을 업데이트하고
/etc/default/grub
변경하면 됩니다GRUB_ENABLE_CRYPTODISK
.GRUB_CMDLINE_LINUX
출력은GRUB_DISABLE_OS_PROBER
다음과 같습니다cat /etc/default/grub
.GRUB_DISTRIBUTOR=My-Custom-Server... # .................................... Command line #GRUB_CMDLINE_LINUX=" root=/dev/sda1 disk=/dev/sda resume=swap console=ttyS0,38400n8 quiet" GRUB_CMDLINE_LINUX=" root=/dev/mapper/crypteddisk luks_root=/dev/sda2 luks="root" disk=/dev/sda resume=swap console=ttyS0,38400n8 quiet" # .................................... Options GRUB_DEFAULT=0 GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_GFXMODE=800x600 GRUB_GFXPAYLOAD_LINUX=keep GRUB_THEME=/boot/grub2/theme/theme.txt GRUB_BACKGROUND= # .................................... Enabling serial console... GRUB_TIMEOUT=30 GRUB_TERMINAL="serial" GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1" # .................................... Enabling cryptsetup GRUB_ENABLE_CRYPTODISK="y" # .................................... Ignore other os GRUB_DISABLE_OS_PROBER="true" # ....................................
그럽 변경 사항을 적용합니다.
grub2-mkconfig -o /boot/grub2/grub.cfg
초기화 램 디스크를 업데이트하고 암호화 모듈을 강제로 포함합니다.
mkinitrd -d /dev/mapper/crypteddisk -f "dm luks"
MBR을 업데이트하고 새 디스크에 grub을 다시 설치하여 부팅 가능하게 만드세요.
grub2-install /dev/sdb
chroot를 종료하고 모든 것을 제거하십시오.
exit cd / for i in sys dev proc; do umount /mnt/$i; done unmount /mnt/boot unmount /mnt
파티션을 마운트 해제하는 동안 문제가 발생하면
-l
다음 옵션을 사용하십시오.umount -l /mnt/sys
마법 시전: