우리 회사는 몇 가지 새로운 테스트 노력으로 일부 Ubuntu 시스템을 구현하는 작업을 진행 중이며 저는 이를 위한 암호화 솔루션을 담당하게 되었습니다. Ubuntu와 Linux/Unix에 대한 실무 지식만 갖고 있는 주로 Windows 사용자였기 때문에 이는 다소 어렵지만 흥미로웠습니다. 나는 많은 암호화 서비스가 Windows에서 작동한다는 것을 알고 있지만 Ubuntu에는 이러한 서비스가 부족하다는 것을 알았고 여기에 대한 20개 이상의 게시물을 읽은 후 전체 디스크 암호화를 사용하여 새로 설치하는 것이 유일한 현실적인 옵션이라고 결정했습니다. 즉, 일부 시스템은 이미 사용 중이므로 암호화를 통해 삭제하고 새로 설치할 수는 없습니다. 모든 설정과 변경 사항은 물론 기존 파일을 복사/백업해야 합니다. 따라서 /home을 복사하는 것만큼 간단하지 않습니다. 나에게 가장 좋은 조치가 무엇인지 궁금했습니다. 테스트 머신용 파티션 전체 복사본(외부로 빠르게 복사하기 위해 gparted 사용)과 LUKS가 포함된 Ubuntu를 새로 설치했습니다. 저는 clonezilla의 기본 사항에 대해 잘 알고 있지만, 제가 수집한 내용이 여기서 도움이 될 것이라고는 생각하지 않습니다.
tldr: Ubuntu 16.04 전체 설치를 암호화된 디스크로 이동해야 합니다. 일부 시스템에서는 TPM이 활성화되고 일부 시스템에서는 TPM이 활성화되지 않습니다. 각각에 대한 최선의 조치를 알아야 합니다. 새로운 관리자를 도와주셔서 감사합니다.
외부 네트워크 액세스가 필요하지 않지만 필수는 아닌 방법을 설명할 수 있다면 보너스입니다. 즉, 패키지가 필요한 경우 테스트 PC에서 USB/CD/DVD로 다운로드하고 패키지를 오프라인으로 설치할 수 있습니다.
답변1
아래에 설명된 절차는 제가 여러 번 성공적으로 사용한 절차입니다. 우분투 16.04 및 18.04에서 작동합니다. @Arno가 답변에서 제안한 솔루션과 달리 커널 부팅 옵션을 수동으로 편집할 필요가 없습니다. 대신, 기본 LVM 기반 암호화로 설치할 때 Ubuntu에서도 사용되는 보다 정식적인(의도하지 않은) 솔루션을 update-grub
기반으로 적절한 구성을 생성하는 데 의존합니다 . /etc/crypttab
(이 솔루션은 LVM을 사용하지 않으며 암호화되지도 않습니다 /boot
)
나는 이 가이드를 따를 때 발생하는 데이터 손실이나 기타 불쾌한 결과에 대해 책임을 지지 않습니다. 어떤 일을 하기 전에 안정적인 백업이 있는지 확인하세요.
이 글을 쓰는 동안에는 이 가이드를 테스트하지 않습니다. (테스트된)을 기반으로 합니다.블로그 포스팅은 제가 직접다소 비슷한 경우와 내가 기억하는 몇 가지 세부 사항에 대해.
이 가이드에서는 다음을 가정합니다.
- 우분투가 이미 설치되어 있습니다
- 시스템이 BIOS/CSM이 아닌 (U)EFI로 부팅됩니다.
/boot
별도의 파티션 1 에 있습니다.- Ubuntu 16.04/18.04 또는 Pop!_OS 18.04의 라이브 미디어를 부팅할 수 있습니다(USB, PXE, DVD 등에서) 2
별도의 파티션에 있지 않은 경우 /boot
추출은 매우 간단합니다. 어디서나 200-500MB 파티션을 생성하고 ext4로 포맷하고 현재 /boot
콘텐츠를 복사하고 /etc/fstab
항목을 추가하고 update-grub
재부팅합니다.
1. 백업
현재 시스템 파티션을 백업해야 합니다. 이를 수행하는 가장 쉬운 방법은 Clonezilla를 사용하는 것입니다. 사용자가 직접 확인할 수 있으며 설명서가 필요하지 않습니다. 지침을 따르기만 하면 됩니다.
2. 파티션 축소
LUKS 헤더는 파티션 공간의 일부를 차지합니다. Clonezilla/partclone은 소스보다 작은 장치에 이미지를 복원할 수 없습니다. 따라서 암호화되지 않은 파티션의 이미지는 조금 더 작기 때문에 암호화된 컨테이너에 복원할 수 없습니다.
그런 다음 암호화하기 위해 파티션을 약간 축소해야 합니다. 안전을 위해 10MB 이상으로 축소하세요. 이를 수행하는 가장 쉬운 방법은 GParted를 사용하는 것입니다. Ubuntu 라이브 미디어에서 볼 수 있습니다.
3. 축소된 파티션 이미지 만들기
Clonezilla로 이 작업을 다시 수행하거나 이미 익숙해지십시오.부분클론, Clonezilla가 기본적으로 사용하는 것입니다. 나중에 partclone을 사용하여 이미지를 수동으로 복원할 예정입니다.
partclone을 사용하여 이미지에 복제:
sudo partclone.ext4 -c -s /dev/sda2 | pigz -0 > /mnt/backup/sda2.ext4.ptcl.gz
partclone.ext4
ext4 작업 전용 partclone 바이너리 중 하나입니다. 지원되는 각 파일 시스템은 자체적인 부분 클론 바이너리를 갖습니다./dev/sda2
분명히 복제하려는 파티션입니다. 나는 파티션을 부분 레이블로 참조하는 것을 선호합니다./dev/disk/by-partlabel/os
- 훨씬 더 깨끗한 IMO./dev/sda2
그래도 더 알아보기 쉽습니다.돼지멀티코어 gzip입니다.
-0
효과적인 압축보다 속도를 선호하도록 지시합니다./mnt/backup
여기에는 이미지를 저장하려는 외부 위치가 표시됩니다. 이전에 Clonezilla를 사용한 경우에도 여전히/home/partimag
. SMB 공유를 마운트하려는 경우:sudo mount -t cifs -o username=gronostaj //192.168.1.90/Backup /mnt/backup
(대화식으로 비밀번호 요청)
4. 파티션을 원래 크기로 확대
우리는 LUKS 헤더를 위한 추가 공간을 다시 확보하고 싶습니다. 그렇죠? 파티션 크기를 원래 크기로 다시 조정합니다.
5. LUKS로 포맷하기
원본 데이터를 잃어버리는 순간입니다. 백업이 괜찮은지 확인하세요.
시스템 파티션( 제외 /boot
)을 LUKS로 포맷합니다.
sudo cryptsetup luksFormat --type luks2 /dev/sda2
생성된 컨테이너 열기:
sudo cryptsetup open /dev/sda2 os
암호화된 컨테이너 전체가 무작위 쓰레기처럼 보이고 이전 데이터를 아직 읽을 수 없는지 확인하세요.
sudo dd if=/dev/zero of=/dev/mapper/os bs=1M
(이렇게 하면 컨테이너의 해독된 콘텐츠를 0으로 덮어쓰지만 암호화된 콘텐츠는 임의의 쓰레기처럼 보입니다.)
6. 이미지 복원
이미지를 복원하려면 partclone을 수동으로 실행하세요.
cat /mnt/backup/sda2.ext4.ptcl.gz | pigz -d | sudo partclone.ext4 -r -o /dev/mapper/os
쉬운 경로를 선택하고 Clonezilla를 사용하여 "축소" 백업을 수행한 경우 출력 파일을 살펴보면 부분 클론 소스가 무엇인지 쉽게 알아낼 수 있습니다. 거대한 청크 크기를 설정하지 않으면 조각화될 것이므로 cat
pigz에 파이핑하기 전에 함께 묶어야 합니다.
또한 전체 파티션에 맞게 파일 시스템 구조를 조정해야 합니다.
sudo resize2fs /dev/mapper/os
7. 암호화 지원 활성화
먼저 방금 복원된 OS로 chroot를 실행합니다.
mkdir /mnt/os
sudo mount /dev/mapper/os /mnt/os
cd /mnt/os
mount --bind /etc/resolv.conf etc/resolv.conf
mount --bind /dev dev
mount -t tmpfs tmpfs tmp
mount -t sysfs sys sys
mount -t proc proc proc
sudo chroot .
mount -a
이 터미널은 현재 라이브 인스턴스가 아닌 설치된 Ubuntu 인스턴스에서 작동하고 있습니다.
설치하다암호 설정:
apt update
apt install cryptsetup -y
파일을 생성해야 합니다 /etc/crypttab
. 그렇지 않은 경우 걱정하지 말고 수동으로 만드십시오. 이 파일을 편집하고 파티션에 대한 항목을 추가하십시오.
os /dev/sda2 none luks
편집기를 저장하고 종료합니다. initramfs를 다시 빌드하십시오.
update-initramfs -u -k all
GRUB 항목 업데이트:
update-grub
8. 추가 비밀번호 프롬프트 제거
암호화된 파티션이 두 개 이상인 경우 부팅 시 모든 파티션에 대해 비밀번호를 입력해야 합니다. 그러나 LUKS를 사용하면 비밀번호 대신 파티션 잠금을 해제하는 데 사용할 수 있는 추가 키 파일을 추가할 수 있습니다. 이러한 키 파일을 암호화된 파티션에 저장 /
하고 이를 사용하여 후속 파티션을 잠금 해제할 수 있습니다.
임의의 키 파일을 만듭니다.
dd if=/dev/urandom of=/luks.key bs=4096 count=1
루트가 아닌 파티션에 추가:
cryptsetup luksAddKey /dev/sda3 /luks.key
항목 추가 crypttab
:
home /dev/sda3 /luks.key luks
initramfs를 다시 빌드하십시오.
update-initramfs -u -k all
1 왜 분리를 사용합니까 /boot
?
- 이 방법이 더 쉽습니다 ;)
- GRUB은 아직 LUKS2를 지원하지 않으므로
/boot
LUKS2 암호화 파티션에 있어서는 안 됩니다. /boot
LUKS-암호화 및 LUKS2-암호화를 원할 경우/
비밀번호를 두 번 입력하거나initramfs에 키 파일 포함- IMO가 너무 번거롭기 때문에...- 암호화
/boot
만으로는 보안이 덜 취약해지지 않습니다. 왜냐하면 암호화되더라도/boot
EFI 시스템 파티션은 암호화될 수 없기 때문에 공격자가 이를 변조할 수 있기 때문입니다. .NET 파일 대신 사용자 정의 악성 커널/initramfs를 사용하십시오/boot
. (이 문제를 해결하려면자체 컨테이너 GRUB 바이너리를 빌드하고 개인 키로 서명합니다., UEFI 보안 부팅을 사용하여 확인)
자신만의 위협 모델을 정의하고 필요한 보안 수준(그리고 그에 대비한 보안 수준)을 결정하세요.
2 다른 Ubuntu 버전이나 다음과 같은 복구 CD로 행운을 시험해 볼 수 있습니다.GRML, 그러나 마일리지는 다를 수 있습니다. 라이브 미디어가 시스템과 일치하지 않았기 때문에 이 절차가 실패한 경험이 있습니다.
답변2
루트 파티션을 이미지화하고 LUKS로 포맷한 후 마운트하고 이미지로 덮어쓸 수 있습니다. 그런 다음 부팅 시 GRUB의 암호를 해독하려면 GRUB에 대한 몇 가지 변경 사항이 필요합니다.아래 단계는 테스트하지 않았습니다., 그들은 단지 단서일 뿐입니다.
나는 그것이 /boot
켜져 있고 sdb1
루트 파티션이 켜져 있고 sdb2
외부 /media/hdd
드라이브라고 가정했습니다. 우리는 관리자 프롬프트에서 라이브 USB에 있습니다.
루트 파티션 암호화
dd if=/dev/sdb2 of=/media/hdd/diskimg bs=1M
cryptsetup luksFormat /dev/sdb2
cryptsetup luksOpen /dev/sdb2 enc_root
dd if=/media/hdd/diskimg of=/dev/mapper/enc_root
파티션 마운트
mount /dev/sdb2 /mnt
mount /dev/sdb1 /mnt/boot
GRUB 구성
다음을 실행하여 파티션의 UUID를 기록해 둡니다.
blkid /dev/sdb2
편집하고 /mnt/etc/default/grub
이라는 줄을 찾으세요 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
. 이를 다음으로 변경하고 device-UUID
이전 단계에서 기록한 UUID로 바꿉니다.
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash cryptdevice=UUID=device-UUID:enc_root root=/dev/mapper/enc_root"
그런 다음 GRUB 구성을 업데이트합니다.
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount --bind /proc /mnt/proc
chroot /mnt
update-grub
exit
그리고 모든 것을 마운트 해제합니다.
umount /mnt/dev
umount /mnt/sys
umount /mnt/proc
umount /mnt/boot
umount /mnt
그리고 재부팅하세요. 몇 가지 함정:
- 나는 이것 중 어떤 것도 테스트하지 않았고 한동안 Linux 파티션을 가지고 놀지 않았으므로 뭔가를 잊었거나 엉망으로 만들었다고 거의 확신합니다. 사람들이 교정하고 수정할 때까지 기다리세요.
- 이는
/boot
별도의 파티션에 있다고 가정하므로 모든 것이 동일한 파티션에 있으면 작동하지 않습니다. - UEFI 시스템에서는 해당 파티션이 속한 EFI 파티션도 마운트하는 것을 잊지 마십시오.
dd
복사할 것이다모든 것여유 공간을 포함하여 파티션의 파일만 복사하는 것이 더 빠른 방법입니다.
행운을 빌어요!