USBで起動できるUSB SSDをもっとセキュアに使いたい
USBのSSDを使用して、簡単にUbuntuをPCで使うというのは、多くの方がチャレンジしていて、かの有名なからあげ先生も記事をあげています。
ただ、当然ですが、会社のPCなどセキュアブートが有効化されていたり、そもそもUSB SSDを暗号化して使わないといけない場合など、そんな簡単にUbuntuをPCで使うことはできません。
(というより、そもそも会社のPCとかだとルールでUSB SSDでほかのOSを起動するのはできないと思いますが)
今回、個人的にもSecureBootを切ることなく、暗号化されたUbuntu SSDが欲しいところだったので、記事にまとめてみたいと思います。
暗号化については、以下の記事を参考にしています。
準備するもの
- Bitlockerの暗号化をしていないPC
- Ubuntuインストールメディア
- UbuntuをインストールしたいUSB SSD(メモリ)
※ここでセットアップするPCはミスをすると起動しなくなる可能性があるので、注意してください(自己責任)
インストールの開始
それではまずインストールを進めていくため、Secure Bootが有効になっているPCを用意して、そこにUbuntuのインストールメディアと作成したいUSB SSDを用意します。
起動の際は、PC毎にことなるので割愛しますが、Ubuntuのインストールメディアから起動するようにします。
すると、いかの画面が出ますが、ここではいろいろと細工をするのでTry Ubuntuを選択します。
インストールしたいUSB SSDのパーティションを分割
以下の図はセットアップが終わった後なので、いろいろ設定がすでにされていますが、UbuntuのDISKSアプリもしくはGPARTEDでパーティションを以下の通り作成していきます。
- EFIパーティション用:100MBくらい
- Kernel保存用の暗号化しない/bootパーティション:2048MBくらい
- メインの暗号化するパーティション:残り
- Windowsとファイル共有したい場合は、データ交換用のパーティションを必要に応じて用意
ここまで完了したら続いて、暗号化パーティションの処理を進めていきます。
暗号化パーティションの準備
続いて暗号化パーティションの準備を行います。基本的にTerminalを使用して行いますので、これが理由でUbuntuインストール時にTry Ubuntuを選択しています。
それではTerminalを起動し、rootでの操作が必要なので、まずはrootになります。
sudo su
続いて、パーティションを暗号化していきます。sdbやパーティションの番号は、DISKSなどで調べて適切に設定します。
cryptsetup luksFormat --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 2000 /dev/sdb3
cryptsetup luksOpen /dev/sdb3 ubuntu-crypt
pvcreate /dev/mapper/ubuntu-crypt
vgcreate UbuntuVG /dev/mapper/ubuntu-crypt
途中でパスワードを聞かれますので、パスワードを設定します。Ubuntu起動時にこのパスワードを聞かれるので忘れないようにします。
続いて、暗号化パーティションをさらに分割し、SWAP領域を作成します。SWAP領域が必要ない人は、ここは飛ばしてOKです。
lvcreate -C y -L 16G -n swap UbuntuVG
最後に残りの領域をrootとして、Ubuntuがインストールされる領域とします。
lvcreate -C n -l 100%FREE -n root UbuntuVG
こちらで、Linuxに詳しい人であればお気づきかと思いますが、今回Ubuntuまるごと暗号化をしていますが、いろいろと起動時にトラブルが起きかねないので、その場合はこのパーティションの設定で/homeのみを暗号化するといった使い方も可能です。
Ubuntuのインストール
続いて、Desktopの左上にあるUbuntuのインストーラーを起動し、Ubuntuのインストールの続きを進めていきます。ここは通常と変わりないですが、今回UEFIでSecure BootをOnしている状態なので、以下のとおりSecure Bootを設定する項目が出てきます。ここに関しては、再起動後にKeyを登録する際にこのパスワードが必要となるので、覚えておきます。
インストール先については、自分で細かく設定するので、Something elseを選択します。
ここで、インストールを行うパーティションを設定していきますが、ここで間違えるとHostのPCにWindowsが入っていたりするとぶち壊れる可能性があるので十分注意します。
まず、このような感じで、上のほうに今回作成した暗号化パーティションが表示されていると思います。これがないときは、暗号化パーティションをマウントできていないので、
cryptsetup luksOpen /dev/sdb3 ubuntu-crypt
が実行できているか確認します。再度このコマンドを実行しても、インストーラは再読み込みしてくれないようなので、いったんインストーラは終了する必要があります。
ではここれ、パーティションを設定していきます。
上のほうから、UbuntuVG-rootは/に設定するので、以下のとおり設定します。
続いて、swap領域用のところはswapに設定しておきます。
続いて下に進み、UbuntuをインストールしたいUSB SSD(今回は/dev/sbd)に進み、1つ目の100MBくらい用意していたパーティションをEFI Partitionに設定します。
続いて2つ目のパーティションはKernel保存用の非暗号化パーティションなので、以下の通り通常のext4で/bootをマウントポイントとします。
最後に一番下の、Device for boot loader installationを/dev/sbdにしておきます(が効果はないようです。。。)
こちらでパーティションの設定は終了なので、Install Nowをクリックし、フォーマットなどをするのかという注意が出ますが、そのまま進めていきます。
が、、、ここで、タイムゾーンの設定に進んでみると、設定した各パーティションが適切な場所にマウントされているはずなのですが、、、以下の通り、なぜかEFIパーティションが、USB SSDを指しておらず、既存のSSDを指してしまっています。このままではHost PCのEFIに書き込んでしまい、トラブルが起こる可能性があるのと、そもそもこれではほかのPCで起動できるUSB SSDにならないので、修正していきます。
具体的には以下のコマンドで修正します。
umount /target/boot/efi
mount /dev/sdb1 /target/boot/efi
すると以下のように正しくUSB SSDのほうがマウントされている状態となります。
ここまで来たら通常のインストールを進めていきます。ただ、インストール後の処理がまだいろいろとありますので、インストール完了後に再起動”しない”ように注意します。
インストール後の設定
インストールが完了した後、そのまま継続してUbuntuのLive USBを使っていきます。まずターミナルで、インストールしたUSB SSDをマウントして、USB SSDの中身をいじれるようにしていきます。
mount /dev/mapper/UbuntuVG-root /mnt
mount /dev/sdb2 /mnt/boot
mount /dev/sdb1 /mnt/boot/efi
cd /mnt
mount --rbind /dev dev
mount --rbind /sys sys
mount --rbind /run run
mount --bind /proc proc
続いて、ここまで進めるとchrootして、USB SSDの中を操作できるようにしていきます。chrootをご存じない方向けに少し説明すると、chrootした場合、そのあとのコマンドはHost側のPCではなく、マウントした中の今回だとUSB SSDを起動して、そこの中で実行しているのと同じ状況となります。
chroot . /bin/bash -l
ここから USB SSD内のファイル操作となり、まずは起動時に暗号化パーティションをマウントできるように設定を書き込みます。この際暗号化パーティションのUUIDが必要ですが、先ほどのDISKSアプリでUUIDを確認できるので、そこで確認したUUIDを入力します。
echo "ubuntu-crypt UUID=/dev/sdb3のUUID none luks,discard" > /etc/crypttab
続いて、設定の更新と、GRUBに起動設定を更新していきます。
update-initramfs -u
grub-install --recheck /dev/sdb
grub-mkconfig -o /boot/grub/grub.cfg
最後に、特に重要なのですが、起動時の非暗号化パーティションのマウントの設定に問題があるため、それを修正していきます。
vi /etc/fstab
ここで、/boot/efiのマウントするデバイスのUUIDがここでもまさかのHostのPC側のEFIパーティションを指してしまっているので、こちらのUUIDもDISKSで/dev/sdb1のUUID調べて反映しておきます。
以上で、インストール後の設定は完了なので、アンマウントして再起動します。
exit
でchrootを抜けます。
cd
umount -l /mnt
sync
reboot
これでリブートを行います。
MOKの登録
再起動すると以下のような画面が出てきますので、Enroll Mokを選択し、
Continueを選択し、登録を進めて、
Ubuntuをインストール際に自分で設定したパスワードを入れてMOKの登録を行います。
この辺りは、Secure BootがOnのPCにNVIDIA Driverをインストール際と同じなので、こちらの参考記事のままです。
最後にrebootすればUSB SSDが完成です。
USB SSDでの起動
完成したUSB SSDで起動する際は、各PCのBoot設定でUSBデバイスでの起動が優先されるようにするか、もしくは起動時にBootデバイスを選択できるようにして、USB SSDで起動できるようにします。
Windows PCで使用する場合は、apt upgradeでカーネルの更新やNVIDIA DRIVERのインストールなどで、Secure bootの設定がなにかの拍子に変わってしまうことがあったりするので、Windows側でBitlockerを使用していると回復パスワードを求められてしまうようになることがあります。そのため、Bitlockerを使用しているPCで使う場合は”必ず”Bitlockerの回復パスワードを保存しておいて、いつでも参照できるようにしましょう。
また、Ubuntuを使用するとWindowsの時刻がずれてしましますので、Ubuntuで以下のコマンドを実行して、時刻ズレが起こらないようにします。
sudo hwclock --verbose --systohc --localtime
まとめ
今回は、あまり誰もまとめていなかった暗号化したUSB SSDでしかもSecure BootがONのPCでも起動できる方法について記載しました。自分のための備忘録もかねているので、わかりづらいかもしれませんが、この操作はちょっとでも間違えると元のPCのWindowsを壊してしますので、内容がきちんと理解できる人だけ活用していただければと思います。