dm-crypt したシステムルートをリモートSSHから解除
luks の鍵をtpmに入れたいけど、TPMデバイスがないPCの場合、鍵をUSBで差し込むか、SSHでリモートからアンロックをするといい
仕組み
luks のルートパーティションがinitramfs に読み出されるときに、dorpbearでsshサーバーで、パスフレーズ入力を待ち受ける。
準備
## debian 11 apt install -y dropbear busybox ## debian 10 apt install dropbear-initramfstools
起動時のIP割当
起動時に initramfs が起動する。initramfs がIPアドレス持つように grub を変更する
dhcp で割り当てる場合
GRUB_CMDLINE_LINUX="ip=:::::eth0:dhcp"
固定IPの場合(おすすめ)
GRUB_CMDLINE_LINUX="ip=10.1.1.5::10.1.1.1:255.255.255.0:my-name:eth0:none"
並びは、次のようになってる(DNSのところは自信がない。)
GRUB_CMDLINE_LINUX="ip=ADDR:BRD:GW:NETMASK:hostname:eth0:none"
eth0 を使わせる設定 を利用して固定することにした。
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
出来上がった設定はだいぶ長い・・・
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0 ip=10.1.1.5::10.1.1.1:255.255.255.0:my-server:eth0:none"
eth0 を使わない場合は、enoXXや enpXX を使う
GRUB_CMDLINE_LINUX="ip=10.1.1.5::10.1.1.1:255.255.255.0:10.1.1.53:enp0ns11:none"
公開鍵の追加
initramfsのdropbearへSSHするには公開鍵ログインが必須です。
パスフレーズだと、/bootなどを総当りされる恐れがあります。
公開鍵を登録する
公開鍵の設置先。
/etc/dropbear-initramfs/authorized_keys
既存の公開鍵を設置すればおっけ。
sudo cp /root/.ssh/authorized_keys /etc/dropbear-initramfs/authorized_keys
drobear設定は、/etc/dropbear
にもあるが、ここは使わない。
/etc/dropbear-initramfs/
に、authorized_keys を置くのが正しい。
update-initramfs -u update-grub
update-initramfs で firmware 関連のエラーが出るとき
ただし、non-free なfirmware を入れると起動時にめっちゃエラー出る。
W: Possible missing firmware /lib/firmware/i915/skl_huc_2.0.0.bin for module i915 W: Possible missing firmware /lib/firmware/i915/skl_guc_33.0.0.bin for module i915
main contrib nonfree に変えるとファームウェアのエラーは消せる。
sudo sed -i 's/ main$/ main contrib non-free/' /etc/apt/sources.list sudo apt update sudo apt list firmware* sudo apt install firmware-linux
シリアルも有効にしておく。
grub に設定を書いて、シリアルのコンソールでも待ち受けておく。(予備手段)
GRUB_CMDLINE_LINUX='console=tty1 console=ttyS0,115200' GRUB_TERMINAL='console serial' GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
リモートで作業することも考えて、シリアルを有効にしておく。
リモート時に障害時対応ができると思う。
シリアルの接続先に、Raspiなどをつないでおく。そうすれば、RaspiにSSHしてログインし、serial console でメンテできます。 raspi zero とかのRS232CのGPIOとか使えばコストも安く上がる。
ホスト鍵を揃えてやる/fingerprint不一致対策
grub で指定するIPアドレスを同じにすると、initramfs(dropbear)と 起動後のdebian(opensshd) でホスト鍵が異なって警告が鬱陶しい。そこでホスト鍵を揃えておく
ホスト鍵の揃え方に従って処理をする。
変換対象の鍵
root@borane:/home/takuya# ls -l /etc/ssh/ssh_host_* | grep -v pub -rw------- 1 root root 505 11月 14 16:51 /etc/ssh/ssh_host_ecdsa_key -rw------- 1 root root 399 11月 14 16:51 /etc/ssh/ssh_host_ed25519_key -rw------- 1 root root 2590 11月 14 16:51 /etc/ssh/ssh_host_rsa_key
ssh_host_ecdsa_key を変換する。
## 作業ファイルにコピー cp /etc/ssh/ssh_host_ecdsa_key /tmp ## PEM 形式に変換 ssh-keygen -p -m PEM -f /tmp/ssh_host_ecdsa_key ## dropbear用に変換 sudo dropbearconvert openssh dropbear \ /tmp/ssh_host_ecdsa_key \ /etc/dropbear-initramfs/dropbear_ecdsa_host_key
これを繰り返す
for name in ecdsa ed25519 rsa; do cp /etc/ssh/ssh_host_$name_key /tmp; ssh-keygen -p -m PEM -f /tmp/ssh_host_$name_key dropbearconvert openssh dropbear/tmp/ssh_host_$name_key /etc/dropbear-initramfs/dropbear_$name_key done;
initramfs の再生成 / grub 再生性
sudo update-initramfs -c -t -k all ## または # sudo update-initramfs -u sudo update-grub
これでおっけ。
起動CHECK
起動したらSSHでログインする。
ssh -vvv -i ~/.ssh/id_rsa root@192.168.2.5
参考資料
- https://slide.rabbit-shocker.org/authors/kenhys/osc2021-online-nagoya-lt-20210529/osc2021-online-nagoya-lt.pdf
- https://icat.hatenablog.com/entry/install-debian-encrypted-on-ovh-vps
- https://qiita.com/keiya/items/bcc2a71e6b14cde7fe39
- https://unix.stackexchange.com/questions/556946/possible-missing-firmware-lib-firmware-i915-for-module-i915
- https://www.pbworks.net/ubuntu-guide-dropbear-ssh-server-to-unlock-luks-encrypted-pc/
- https://tnishinaga.hatenablog.com/entry/2019/03/03/043040