암호화 된 / boot를 사용한 우분투 전체 디스크 암호화


15

별도의 /boot파티션 으로 전체 암호화 디스크를 설정하려고하는데 문제가 있습니다.

Ubuntu 15.04 Live DVD 세션에서 수행 한 절차를 기록하겠습니다.

  • '무작위 데이터'로 디스크를 채우십시오

    sudo dd if=/dev/urandom of=/dev/sda1 bs=4096   #ok
    
  • 파티션 만들기 (gparted 사용)

    1. 파티션 테이블 생성-gpt 2.
      • / dev / sda1 ext2 1.5GB #boot
      • / dev / sda2 linux-swap 4GB # 스왑
      • / dev / sda3 ext4 15GB #root
      • / dev / sda4 ext4 FREESPACE # 홈
  • 볼륨 암호화

    cryptsetup luksFormat --cipher twofish-xts-plain64 --key-size 512
                          --hash sha512 --iter-time 3000 /dev/sda1
    cryptsetup luksFormat --cipher twofish-xts-plain64 --key-size 512
                          --hash sha512 --iter-time 3000 /dev/sda2
    cryptsetup luksFormat --cipher twofish-xts-plain64 --key-size 512
                          --hash sha512 --iter-time 3000 /dev/sda3
    cryptsetup luksFormat --cipher twofish-xts-plain64 --key-size 512
                          --hash sha512 --iter-time 5000 /dev/sda4
    
  • 공개 암호화 볼륨

    cryptsetup luksOpen /dev/sda1 boot
    cryptsetup luksOpen /dev/sda2 swap
    cryptsetup luksOpen /dev/sda3 root
    cryptsetup luksOpen /dev/sda4 home
    
  • 체재

    mkfs.ext2 /dev/mapper/boot
    mkswap /dev/mapper/swap
    mkfs.ext4 /dev/mapper/root
    mkfs.ext2 /dev/mapper/home
    
  • 설치 (유비 쿼티 사용)

    • / dev / sda의 부트 로더
    • / dev / sda1-ext2로 사용-마운트 지점 / boot
    • / dev / sda2-ext2로 사용-마운트 지점 / boot
    • / dev / sda3-ext2로 사용-마운트 지점 / boot
    • / dev / sda4-ext2로 사용-마운트 지점 / boot

    마지막으로 설치 프로그램은 grub-install이 실패했음을 경고합니다 (부팅 볼륨이 암호화되었으므로 '부트 로더없이 계속')를 선택하십시오.

  • 클린 부팅 볼륨

    mkfs.ext2 /dev/mapper/boot
    
  • 마운트 볼륨

    mkdir /mnt/root
    mount /dev/mapper/root /mnt/root
    mount /dev/mapper/boot /mnt/root/boot
    
  • fstab 및 crypttab 업데이트

    sudo blkid
    
    [/dev/sr0: UUID="2015-10-21-16-17-40-00" LABEL="Ubuntu 15.10 amd64"
               TYPE="iso9660" PTUUID="429817b4" PTTYPE="dos"
    /dev/sda1: UUID="...#1" TYPE="crypto_LUKS" PARTUUID="..."
    /dev/sda2: UUID="...#2" TYPE="crypto_LUKS" PARTUUID="..."
    /dev/sda3: UUID="...#3" TYPE="crypto_LUKS" PARTUUID="..."
    /dev/sda4: UUID="...#4" TYPE="crypto_LUKS" PARTUUID="..."
    /dev/mapper/boot: UUID="..." TYPE="ext2"
    /dev/mapper/swap: UUID="..." TYPE="swap"
    /dev/mapper/root: UUID="..." TYPE="ext4"
    /dev/mapper/home: UUID="..." TYPE="ext4"]
    
  • fstab

    #<file system>   <mount point>   <type>   <options>           <dump>   <pass>
    UUID=#1          /boot           ext2     defaults            0        2
    UUID=#2          none            swap     sw                  0        0
    UUID=#3          /               ext4     errors=remount-ro   0        1
    UUID=#4          /home           ext4     defaults            0        2
    
  • 암호

    boot   UUID=#1   luks,cipher=twofish-xts-plain64,size=512,
                     hash=whirlpool, time=3000
    swap   UUID=#2   luks,swap,cipher=twofish-xts-plain64,size=512,
                     hash=whirlpool,time=3000
    root   UUID=#3   luks,cipher=twofish-xts-plain64,size=512,
                     hash=whirlpool,time=3000
    home   UUID=#4    luks,cipher=twofish-xts-plain64,size=512,
                      hash=whirlpool,time=5000
    
  • initramfs 이미지 업데이트

    cd /mnt
    sudo chroot root
    mount -t proc proc /proc
    mount -t sysfs sys /sys
    mount -t devpts devpts /dev/pts
    update-initramfs -u                      #ok
    
  • 부트 로더 구성 ( /etc/default/grub)

    GRUB_ENABLE_CRYPTODISK=y
    GRUB_PRELOAD_MODULES="luks cryptodisk"
    GRUB_CMDLINE_LINUX="cryptdevice=UUID#3:root root=/dev/mapper/root resume=/dev/mapper/swap 
                        crypto=whirlpool:twofish-xts-plain64:512:0:"
    
  • 구성 파일 생성

    $ grub-mkconfig -o /boot/grub/grub.cfg
    [/usr/sbin/grub-probe: error: failed to get canonical path of `/dev/mapper/root'.]
    
  • 밖에서 시도

    $ exit
    $ grub-mkconfig -o /boot/grub/grub.cfg
    [/usr/sbin/grub-probe: error: failed to get canonical path of `/cow'.]
    

이 전에 실수를 했습니까? 계속해서 grub을 올바르게 구성하고 설치하려면 어떻게해야합니까?


Q를 "올바른"사이트로 옮긴 후에는 아무도 도움이되지 않았다고 생각합니다. 우분투 에서이 수준의 작업을 수행하지 않았습니다. 그러나 나는 Google에서 grub+ 제목 을 보았습니다 . pavelkogan.com/2014/05/23/luks-full-disk-encryption (이 주제의 첫 번째 Google 검색)에서 암호화 절차를 찾았다 고 가정합니다 . 그렇지 않다면 도움이 될 것입니다. 좋은 질문! 그리고 행운을 빌어!
shellter

몇 가지 : 1. /boot모든 것을위한 마운트 포인트로 언급 합니다. 나는 그것이 오타되기를 바라고 있습니다. 2. /devchroot하는 동안 마운트하지 않았지만 devpts를 마운트했습니다. Oo
muru

또 다른 실수는 crypttab 및 fstab에서 동일한 UUID를 사용하는 것 같습니다. fstab은 실제로 / dev / mapper / 드라이브의 UUID를 사용해야합니다.
Aleksandr Dubinsky

1
Ubuntu 커뮤니티 회원 이이 안내서를 확인 하십시오 . 나는 그것을 사용했고 그것은 나를 위해 아주 잘 작동합니다.
kapad

답변:


13

실수를했지만 주된 문제는 어디에서나 생기는 것입니다. 기본적으로 /암호화 된 파티션으로 설정 하고에 대해 별도의 파티션을 만들지 않으면 /bootgrub은 다음과 같은 오류 메시지를 표시합니다.

/boot암호화되어 있음을 알고 있습니다. 당신은 설정해야합니다 GRUB_ENABLE_CRYPTODISK=y에서 /etc/default/grub. 나는 당신을 위해 그것을하지 않을 것입니다, 그래서 나는 실패하고 설치가 중단됩니다.

프로세스 개요

  • 우리는 EFI 모드를 사용합니다.
  • 표준 설치 프로그램을 사용하여 /boot암호화 되지 않은 파티션과 암호화 된 btrfs에 /설치합니다.
  • 설치 관리자가 완료되면 chroot몇 가지 중요한 구성 변경을 수행하고 그럽을 EFI 시스템 파티션에 다시 설치하고 initrd를 다시 만듭니다.

자세한 단계

  • Ubuntu 16.04 설치 디스크에서 부팅합니다 (Xubuntu에서 테스트).
  • 인터넷에 연결 sudo apt update && sudo apt upgrade하고 설치 프로그램 구성 요소를 업데이트하기 위해 실행
  • 사용 fdisk, gparted또는 다른 도구는 3 개 파티션을 생성합니다 :
    • GPT 파티션 테이블
    • EFI 시스템 파티션에 사용할 200MB 파티션
    • 결국 암호화 된 스왑 파티션으로 사용되지만 임시 암호화되지 않은 멀티 기가 바이트 파티션입니다. /boot
    • 나머지 공간을 사용하는 암호화 된 파티션
  • 암호화 된 파티션 준비

    sudo cryptsetup luksFormat /dev/sda3
    sudo cryptsetup luksOpen --allow-discards /dev/sda3 sda3_crypt
    sudo mkfs.btrfs /dev/mapper/sda3_crypt
    
  • 우분투 설치

    • 설치 유형에 대해 물으면 "다른 방법"을 선택하십시오.
    • 구성 /dev/sda1EFI System Partition
    • /dev/sda2마운트 포인트가 ext2 인 형식으로 ext2로 구성/boot
    • /dev/mapper/sda3_crypt마운트 지점이 btrfs로 구성/
    • 설치를 계속하십시오.
    • 완료된 후에는 라이브 시스템을 유지하도록 선택하십시오 (재부팅 안 함).
  • 의 내용을 복사 /boot하고 할chroot

    sudo mount -o subvol=@ /dev/mapper/sda3_crypt /target
    sudo mount /dev/sda2 /mnt
    # (Watch those trailing slashes! rsync is very sensitive to them.)
    sudo rsync -aXAH /mnt/ /target/boot/
    sudo mount /dev/sda1 /target/boot/efi
    sudo mount --bind /dev /target/dev
    sudo mount --bind /proc /target/proc
    sudo mount --bind /sys /target/sys
    sudo chroot /target
    
  • (모든 것이 이제 chroot새로운 시스템 내부에서 일어나고 있습니다.)

  • 라인 추가 /etc/default/grub

    GRUB_ENABLE_CRYPTODISK=y
    
  • 에 줄을 추가하십시오 /etc/crypttab. (NOT ) sudo blkid의 UUID를 찾으 려면 먼저 실행해야합니다 ./dev/sda3/dev/mapper/sda3_crypt

    sda3_crypt UUID=<UUID of /dev/sda3> none luks,discard
    
  • /etc/fstab의 행을 편집 하고 삭제하십시오 /boot. 다른 항목이 맞습니다.

  • grub을 EFI 시스템 파티션에 설치하고 새 grub.cfg를 생성 한 후 initrd를 준비하십시오.

    sudo grub-install --target=x86_64-efi --efi-directory /boot/efi --bootloader=ubuntu --boot-directory=/boot/efi/EFI/ubuntu --recheck
    sudo grub-mkconfig -o /boot/efi/EFI/ubuntu/grub/grub.cfg
    sudo update-initramfs -c -k all
    
  • 옵션을 두 번 검사 : 한 번 확인 /boot/efi/EFI/ubuntu/grub/grub.cfg등 라인을 포함 insmod luks, cryptomount -u <UUID>은 등 올바른 부팅 항목, 그리고 당신의 initrd를이 포함되어 있는지 다시 한 번 확인 cryptsetup바이너리. 이러한 사항이 누락 된 경우 grub-mkconfig 및 / 또는 update-initrd에서 fstab에 마운트하거나 지정한 볼륨이 crypttab의 암호화 된 볼륨과 어떤 관련이 있는지 파악할 수 없었기 때문입니다. (매직 자동 구성이 많이 있습니다.) 예를 들어 ZFS를 사용하거나 sda3_crypt를 분할하여이 안내서에서 벗어날 경우 발생할 수 있습니다.

  • (btrfs 대신 ZFS를 사용하는 경우) grub-mkconfig 및 update-initrd는 ZFS를 인식하지 못합니다. 해결 방법은 편집 GRUB (-mkconfig / 업데이트-initrd를하기 전에, chroot를하는 동안) 관련 /usr/sbin/grub-mkconfig추가 || true(시작 라인 139 GRUB_DEVICE=)에 추가 GRUB_DEVICE="/dev/mapper/sda3_crypt"/etc/default/grub파일 생성, /usr/share/initramfs-tools/conf-hooks.d/forcecryptsetup내용 export CRYPTSETUP=y및 파일 /etc/initramfs-tools/conf.d/cryptroot내용을 target=sda3_crypt,source=UUID=<UUID of sda3>,key=none,discard. 이 모든 것은 ZFS partiion을 암호화하지 않은 경우 수행하는 단계 (예 : 라이브 시스템과 chroot 모두에서 zfs userspace utils를 설치 /하고 fstab에 마운트 된 행을 삭제)와 같은 단계에 추가됩니다 .

  • chroot를 종료하고 새 시스템으로 재부팅하십시오

    exit
    sudo umount /target/boot/efi
    sudo umount /target/dev
    sudo umount /target/proc
    sudo umount /target/sys
    sudo umount /target
    sudo reboot
    
  • grub이 비밀번호를 요구하는 것을 보게 될 것입니다. 그러면 부팅 메뉴가 나타납니다. Ubuntu를 선택하면 비밀번호를 다시 입력하라는 메시지가 표시됩니다. 그럼 당신은 당신의 시스템에있을 것입니다. Ubuntu가 BTRFS를 사용하는 방법 에 대해 자세히 알아 보십시오 .

  • TODO : 암호화 된 스왑 생성 (힌트 : crypttab, fstab 편집 및 재실행 포함 update-initrd)

  • TODO : 비밀번호를 저장하면 grub에 한 번만 입력하면됩니다. 자세한 내용은 여기를 참조 하십시오 .

업그레이드

  • 새 커널을 설치할 때마다 사용자 정의 grub-mkconfig명령을 실행해야합니다 .
  • grub을 업데이트 할 때마다 사용자 정의 grub-install명령을 실행해야합니다 .

기타 노트

  • 단일 암호화 볼륨을 생성하고 스왑 파티션 (및 기타)을 생성하기 위해 파티션을 생성하려고하지만, 작동하지 않습니다. grub-mkconfig와 update-initrd가 잘못 작동합니다. 그러나 LVM을 시도하지 않았습니다.
  • btrfs 위에 스왑 파일 을 사용하고 싶을 수도 있지만 성능 때문에 나쁜 생각 일 것입니다.

: 그냥 내가 (당신의 코멘트 당) 당신이 이미 알고 무슨 생각을 명확히 fstab하고 crypttab실제로 하지 질문에 올바른. 원시 장치를 crypttab가리켜 야 합니다. 에서 열린 암호화 장치를 가리켜 야합니다 . uuid/dev/sdxYfstab/dev/mapper/label
Hendy

이 답변을 해 주셔서 감사합니다.이 설정에 도움이되었습니다.
x13

파티션 정보가 유출되었으므로 실제로는이 진정한 FDE를 고려하지 않습니다. True FDE는 모든 섹터가 암호화 된 데이터를 갖도록합니다 (처음에는 LUKS 헤더 제외). 분리 된 헤더를 사용하면 기술적으로 필요하지 않습니다. LUKS 내부에서 LVM을 사용하여 FDE를 사용하므로 파티션 / 볼륨 크기를 나중에 변경해야하는 경우 확실히 작동하며 더 좋을 수 있습니다. 12.04 에서이 작업을 수행 하는 데 대한 오래된 블로그 게시물 이 있지만 이후 버전에서는 작동합니다.
crass

또한, BTRFS에 스왑 파일을 사용하는 것은 확실히 좋은 생각이 ...
천박

귀하의 grub-install지시에는 --bootloader=ubuntu매개 변수가 있습니다. 우분투GNU 매뉴얼 에서 그 주장을 찾을 수없는 것 같습니다 . 그것이 무엇인지 또는 어디에 기록되어 있는지 명확히 할 수 있습니까?
Samuel Harmer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.