ディスクの暗号化をする
CPUにAES-NI の命令セットが載っているのに、ディスクを暗号化しないなんて、勿体無いとちょっと思ってるんです。
iPad / iPhone の iOS はもちろんのこと、Androidですらディスクは暗号化されているというのに、PCを使う我々は暗号化ディスクを使わずに平文で使うのはもったいない。
cpu がAESをサポートしているか調べる
takuya@:~$ cat /proc/cpuinfo | /bin/grep flags | head -n 1 | xargs -n1 echo | sort | /bin/grep -i aes
AESがあるんですよね。IntelのCPUは安くてもAES付いてるので優秀だと思います。
暗号化ディスクの作成
Ubuntuのインストールなどで、ディスクの暗号かを選ぶと すべてのディスクは dm-crypt で暗号化される。
起動時にパスフレーズを入れる
dm-crypt で起動ディスクのパーティションを暗号化したら、
当然ですが、/ root の全てが暗号化されるので、パスフレーズを入れて解除しないと、起動ができません。
起動時にパスフレーズリモートssh 経由で入れる
通常のノートpcであれば問題ないのですが、遠隔からリモート再起動をしようとすると詰みますよね。
そこでSSH経由でパスフレーズを授受するする方法が一般的です。
linuxの起動は、いくつかのbootstrapに分かれているので
- /boot
- grub
- initramfs
- init
途中の initramfs のところで暗号化ディスクのロックを解除している。
通常はここでパスフレーズの入力になっている。
今回は、この場所にSSHを導入してリモートからロック解除を出来るようにする。
使うサーバーは簡易SSHサーバーのdropbearを使う。
インストール
apt-get install openssh-server dropbear busybox ## ubuntu の場合は、更に次が必要。 sudo apt install dropbear-initramfs
dropbear をインストールしたら。dropbear-initramfs も一緒に導入された。
鍵の準備
鍵の場所は debian /ubuntu の場合は、最初から決まっていて
ここに公開鍵を入れる
/etc/dropbear-initramfs/authorized_keys
/etc/dropbear/
もあるが、こっちはinitramfs では使わない。## 2024-04-03 追記
ここで入れた公開鍵が dropbearのSSHサーバー で使われるものになる。
私は無精をして、次のようにコピーして利用した。
sudo cp /root/.ssh/authorized_keys /etc/dropbear-initramfs/authorized_keys
initramfs の更新
authorized_keys が準備できたら、 iniramfs を作り変えて dropbear を入れた initramfs を作る
sudo update-initramfs -u
IPアドレスの指定
最後に、grubに環境変数を設定して、initramfs に渡るようにします。
/etc/default/grub
GRUB_CMDLINE_LINUX="ip=192.168.2.99::192.168.2.1:255.255.255.0::eth0:none"
このフォーマットは、決まっていて、次のように書いている。
ip=[dropbear_ip]::[gateway]:[netmask]::[nic]:none"
grubの更新
最後にGrubの起動設定を書き換えて、dropbear に ip='' が渡るようにする。
update-grub
再起動してチェック
ssh -o "HostKeyAlgorithms ssh-rsa" root@192.168.2.99
このときに、ユーザー名は root になる、IPは先程指定したIPアドレス。秘密鍵は、authorized_keys で指定した公開鍵とペアになるものを使う。
ssh ログインできたら、ロック解除する
# crypt-unlock
ここでパスを入れれば、GUIからロック解除するのと同じ意味になる。
ちなみに、 Ctrl+Alt+F2 で切り替えたCLI(Xを使わない)モードでもcrypt-unlockが出来る。なので、手順が心配ならSSH経由にする前にcrypt-unlockを事前試してもいいと思う。
かんたんにロック解除は出来ますが、authorized_keys の入った initramfs は当然ですが暗号化されていません。ここもセキュリティを確保したいとなるとPXEブートなどで遠隔からgrub とinitram を導入するなどの手順を使うことになるんでしょうね。
実際にやってみた例
参考資料
- https://qiita.com/keiya/items/bcc2a71e6b14cde7fe39
- https://hamy.io/post/0009/how-to-install-luks-encrypted-ubuntu-18.04.x-server-and-enable-remote-unlocking/
- https://askubuntu.com/questions/1076305/dropbear-initramfs-on-ubuntu-18-04
- https://www.theo-andreou.org/?p=1579
- root などのパーティションのリモート解除
追記 2019-10-10
initramfs でdropbear を有効にしたら、NetworkManagerで、ネットワークデバイスが unmanaged になります。systemd が起動するより前に ネットワークデバイスが管理下に置かれるからみたいだけど。バグ?だよねこれ。
NetworkManagerが eth0(enp3s0)が 管理無しでどうやっても unmanaged になって、nmcli がmanaged にならないので、非常に苦しんだが。このdropbearが原因だった。
2024-04-03 追記
dropbear-initramfs
と /etc/dropbear/
に付いて追記