Linuxディスク暗号化とリモート復号の方法

事務所内Fax送信サーバー(Ubuntu LTS 22.04、ネットワーク内のブラザーの複合機にデータを自動送信してFAX実行)は、セキュリティの観点からディスクを暗号化しています。

ただやっかいなのが、ディスクを暗号化してしまうと、起動時の復号は基本的にローカルマシンで実行しないといけません。

起動した後は、事務所内LANで接続された他のマシンからSSH接続で操作できますが、再起動時にはFax送信サーバーにモニターとキーボードをつながなければならず、かなり不便でした。

調べたところ、

gihyo.jp

という記事を発見。この記事を参考に試してみた結果、知見が得られたのでメモしておきます。

まずは、Ubuntuマシンのコマンドラインからインストール等(WindowsからSSH接続で操作している前提)。

sudo apt install dropbear-initramfs

curl https://github.com/itiut.keys -o authorized_keys

sudo cp authorized_keys /etc/dropbear/initramfs/authorized_keys

dropbearに他のマシンからアクセスするためには、アクセスするマシンの公開鍵をアクセス先のUbuntuマシンに登録しておく必要があります。

まず、Windowsマシンのpowershell(コマンドライン)で以下のコマンドを実行して、公開鍵を作成します(Windows11が前提)。

ssh-keygen -t ed25519

Enter file in which to save the key と聞かれたら、そのまま Enter を押します。(C:\Users\あなたのユーザー名\.ssh\ に保存されます)

その後、Enter passphrase と聞かれます。

秘密鍵自体を守るためのパスワード(パスフレーズ)を入力します。

このコマンド実行で、

C:\Users\あなたのユーザー名\.ssh\id_ed25519.pub

ここに公開鍵が作成されるので、このファイルをメモ帳などで開いて最初から最後まで全てコピー。

再度、ubuntuに戻ります(WindowsからSSH接続で操作している前提)。

sudo nano /etc/dropbear/initramfs/dropbear.conf

dropbear.confのオプションに以下追記。

# (前略)
#
# Command line options to pass to dropbear(8)
#
DROPBEAR_OPTIONS="-p 2222"
#ポート番号がデフォルトだとSSH使用不可になるため指定

追記できたら、ctrr+Xで終了してYで保存。

次にアクセスするマシンの公開鍵を登録。

sudo nano /etc/dropbear/initramfs/authorized_keys

このコマンドで開いたファイルに、C:\Users\あなたのユーザー名\.ssh\id_ed25519.pub
をメモ帳などで開いて全てコピーしたものを貼り付け。

貼り付けしたら、ctrr+Xで終了してYで保存。

その後、コマンドラインで以下のコマンドを実行。

sudo update-initramfs -u -k all

sudo update-initramfs -u

それから、起動時にUbuntuマシンのIPアドレスを固定する設定を行ないます。

暗号化ディスクの復号時には、まだUbuntuが立ち上がっていないため、起動直後のIPアドレスの設定が必要です。

コマンドラインで以下のコマンドを実行。

sudo nano /etc/default/grub

grubの内容に以下のように追記。

GRUB_CMDLINE_LINUX="ip=192.168.200.66::192.168.200.1:255.255.255.0:ubuntu:enp2s0:none"

192.168.200.66はUbuntuで設定しているアドレスと同一にしておいたほうがわかりやすいと思います。

enp2s0は、ネットワークの識別として必要で、Ubuntu起動時にコマンドラインで

ip a

として特定できるので、その内容を転記します。

設定できたら、ctrr+Xで終了してYで保存。

最後に、grubの設定を反映させます。

sudo update-grub

このコマンドを実行しないと、GRUB_CMDLINE_LINUX=の内容が反映されないので、必ず実行しましょう。

最後にリブートします。

sudo reboot

Ubuntuマシンが起動したら、公開鍵を登録したマシンからSSHでアクセスします。

ssh -p 2222 root@192.168.200.66
#rootしかない、passは同じ

Ubuntuではroot自体設定しない場合もあるかと思いますが、dropbearではrootしかログイン名がないようです。

パスワードは、root権限を持つユーザーのパスワードで大丈夫なはず。

Enter passphrase for key 'C:\Users\あなたのユーザー名/.ssh/id_ed25519':

ここでは公開鍵を作成時に入力したパスフレーズを入力します。

To unlock root partition, and maybe others like swap, run `cryptroot-unlock`.

BusyBox v1.36.1 (Ubuntu 1:1.36.1-6ubuntu3.1) built-in shell (ash)
Enter 'help' for a list of built-in commands.

これで複合化前のUbuntuマシンにアクセスできました。

コマンドラインで、

cryptroot-unlock

と入力して、

Please unlock disk dm_crypt-0:

復号パスワードを入力すると、復号が始まります。

cryptsetup: dm_crypt-0 set up successfully
# Connection to 192.168.200.66 closed by remote host.
Connection to 192.168.200.66 closed.

復号が開始されると、切断されます。Ubuntuが起動したら、今度はSSHでログインできるようになります。

事務所内LANからしかアクセスしないので、公開鍵不要でログインしたかったのですが、最終的に無理だったので諦めました。

DROPBEAR_OPTIONSでは、デフォルトで-s -gが付与されていて、
DROPBEAR_OPTIONS="-s -g"

とやれば設定が反転(トグル)してパスワードのみでログインできるとGeminiから説明されたのですが、いくらやってもダメでした。まあ復号をリモートログインで実行できることを考えると、公開鍵を作成して登録したマシンしかログインできないのが正解なんでしょうが。公開鍵の作成も登録も間出てまではそこまで手間ではないので、頑張りましょう。

余談ですが、事務所内の他のスクリプトは全てQNAP NAS上のUbuntu 22.04 コンテナ上で動かしています。

しかし、ブラザーのPC-FAX Linuxドライバーだけは散々試して、ブラザーのサポートにもかなり細かく問い合わせせしましたが、自前でビルドしたコンテナ上では動かすのは無理でした。動作の前提となるライブラリが結局なんなのかわからず、ビルド時に何が足りないのか判明しませんでした。

そのため、Ubuntu LTS 22.04をUbuntuのサイトからダウンロードしてインストールしたFaxサーバーを一台だけ立てています。ダウンロードしたイメージでブラザーのPC-FAX Linuxドライバーをインストールしたら、何の問題もなく一発で動いたので、なんかもう仕方ないですねという。