web-dev-qa-db-ja.com

暗号化された/ bootを使用したUbuntuフルディスク暗号化

別の/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 #swap
      • / dev/sda3 ext4 15 GB #root
      • / dev/sda4 ext4 FREESPACE #home
  • ボリュームを暗号化する

    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
    
  • インストール(Ubiquityを使用)

    • / 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
    
  • crypttab

    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を正しく設定およびインストールし続けるにはどうすればよいですか?

14
Nicholas Roveda

あなたはいくつかの間違いを犯しましたが、主な問題はユビキタスとグラブにあります。基本的に、/を暗号化されたパーティションに設定し、/boot用に別のパーティションを作成しない場合、grubは次のようなエラーメッセージを表示します。

/bootが暗号化されていることは知っています。 GRUB_ENABLE_CRYPTODISK=y/etc/default/grubを設定する必要があります。私はあなたのためにそれをしませんので、私は失敗するつもりです、そして、あなたのインストールは止まります。

プロセスの概要:

  • EFIモードを使用します。
  • 標準のインストーラーを使用して、暗号化されていない/bootパーティションと暗号化されたbtrfs /にインストールします。
  • インストーラーが完了したら、chroot、重要な構成変更をいくつか行い、grubを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
    
  • Ubuntuをインストールする

    • インストールの種類について尋ねられたら、「その他」を選択します。
    • /dev/sda1EFI System Partitionとして設定します
    • /dev/sda2をマウントポイント/bootでフォーマットされたext2として構成します
    • /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に行を追加します。最初にSudo blkidを実行して、/dev/sda3のUUIDを見つける必要があります(/dev/mapper/sda3_cryptではありません)。

    sda3_crypt UUID=<UUID of /dev/sda3> none luks,discard
    
  • /etc/fstabを編集し、/bootの行を削除します。他のエントリは正しいです。

  • EFIシステムパーティションにgrubをインストールし、新しい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 lukscryptomount -u <UUID>、正しいブートエントリなど。そして、initrdにcryptsetupバイナリが含まれていることを再確認してください。これらが欠落している場合、それはgrub-mkconfigおよび/またはupdate-initrdが、fstabでマウントまたは指定したボリュームがcrypttabの暗号化されたボリュームにどのように関連するかを把握できなかったためです。 (多くの魔法の自動設定があります。)これは、たとえばZFSを使用したり、sda3_cryptをパーティション分割しようとしたりして、このガイドから分岐した場合に発生する可能性があります。

  • (btrfsの代わりにZFSを使用する場合)grub-mkconfigおよびupdate-initrdはZFSを認識しません。回避策は、(chroot中、grub-mkconfig/update-initrdの前に)/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パーティションを暗号化していない場合に実行する手順に追加されます(ライブシステムとchrootの両方でzfsユーザー空間ユーティリティをインストールし、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に一度だけ入力するだけで済みます。詳細については、 http://webcache.googleusercontent.com/search?q=cache:z2MwHuPWTakJ:missinglink.xyz/security/tutorial-debianubuntu-full-disk-encryption-luks-fde-include -encrypted-boot/improved-full-disk-encryption-add-luks-key-file-initrdinitramfs/+&cd = 1&hl = en&ct = clnk&gl = us

アップグレード

  • 新しいカーネルをインストールするたびに、カスタムgrub-mkconfigコマンドを実行する必要があります。
  • Grubを更新するたびに、カスタムgrub-installcommandを実行する必要があります。

その他の注意事項

  • 暗号化された単一のボリュームを作成し、パーティションを作成してスワップパーティション(および場合によっては他のパーティション)を作成するのは魅力的ですが、これは機能しません。 grub-mkconfigとupdate-initrdの両方が誤動作します。ただし、LVMは試していません。
  • Btrfsの上でswapfileを使用するのは魅力的かもしれませんが、パフォーマンスのためにおそらく悪い考えです。
12