NAS用LinuxディストリビューションのRockstorを使ってお家のNASを作り直したので、そのときにやったことを備忘録として書き残しておきます。
再構築の目的
私は以前からRockstorを入れたNASサーバーを運用していたのですが、以下の点が気になっていたのでOSごとインストールし直しを行いました。
- UEFIでなくBIOSブートでインストールされている
- Data diskが暗号化されていない
- data diskの鍵を入れるOS diskも暗号化されていない
- RAIDを組むためにData diskを2枚指したのにRAIDを組めていない
再構築の主目的は以下の2点になります。
- RockstorのOSの入っているdisk(以降OS disk)含めて暗号化する
- Dataを入れるdisk(以降data disk)をRAID1にする
なお、RockstorをUEFIブートするようインストールする件に関しては、途中で発生した問題をすべて解決できなかったので諦めました。詳細は最後におまけで記します。
暗号化の話
インストール
最近のインストーラーはとても親切なので、指示に従っているだけでDisk暗号化をしつつOSのインストールができました。 わからないことがあっても、RockstorはRHEL系ディストリビューションをベースとしているので、FedoraやCentOSのドキュメントを参考にすれば良いでしょう。
ディスク暗号化のリモート解除
さて、ここが私がこの備忘録を書いたきっかけになります。
インストール後、実際に起動してみて困ったのが起動時のディスク暗号化解除方法です。 Rockstorでディスク暗号化を行いつつインストールを行うと、起動時にディスク暗号化を解除するためのパスコード入力を求められます。 しかし、うちのサーバーマシンは基本的にディスプレイとキーボードを外して運用していることに加え、頻繁に電源をON//OFFするので、毎回起動時にパスワード入力を求められると不便です。
これを解決するために、はUSBメモリに鍵を入れ、起動時に自動で復号する方法やSSH経由でリモートから鍵入力をする方法がありますが、今回は後者を試してみました。この方法を使うメリットとしては、復号鍵が対象から分離されることと、USBメモリなど追加で必要なものがないので気軽に試せる点があるでしょう。
基本的な作業手順は以下のサイトのStep6以降を進めるだけです。
こちらも参考になります。
https://github.com/dracut-crypt-ssh/dracut-crypt-ssh
Rockstorのマシンにrootでログインした後、dracut-crypt-sshパッケージを入れます。
sudo yum install wget -y sudo wget -O /etc/yum.repos.d/rbu-dracut-crypt-ssh-epel-7.repo https://copr.fedorainfracloud.org/coprs/rbu/dracut-crypt-ssh/repo/epel-7/rbu-dracut-crypt-ssh-epel-7.repo sudo yum install dracut-crypt-ssh -y
次に/etc/default/grubを開いてgrubのエントリを修正し、起動時にIPアドレスを得るように設定します。
アドレス取得をDHCPで行う場合は、GRUB_CMDLINE_LINUX="crashkernel=auto
と rd.luks.uuid=
の間に rd.neednet=1 ip=dhcp
を入れれば設定完了です。
static IPを割り当てたい方は以下を参照してください。
設定後のGRUB_CMDLINE_LINUX
の行はこんな感じになります。
GRUB_CMDLINE_LINUX="crashkernel=auto rd.neednet=1 ip=dchp rd.luks.uuid=luks-xxxx rhgb quiet"
設定が完了したら以下のコマンドでgrubのconfigを生成します。
sudo grub2-mkconfig -o /etc/grub2.cfg
次にinitramfs内に入れるSSHの設定を記入していきます。
/etc/dracut.conf.d/crypt-ssh.conf
を開いて以下を追記します。
dropbear_acl="/etc/dropbear/keys/authorized_keys" dropbear_ecdsa_key="/etc/dropbear/keys/ssh_ecdsa_key" dropbear_rsa_key="/etc/dropbear/keys/ssh_rsa_key"
ファイルを保存したら、ここで設定した場所に新しいSSH鍵を生成します。 この鍵は起動時にディスク復号パスワードを受け取るためのSSH通信に利用されます。
sudo mkdir -p /etc/dropbear/keys/; sudo chmod /etc/dropbear/keys/ sudo ssh-keygen -t ecdsa -f /etc/dropbear/keys/ssh_ecdsa_key sudo ssh-keygen -t rsa -f /etc/dropbear/keys/ssh_rsa_key sudo chmod 400 /etc/dropbear/keys/*_key; sudo chmod 444 /etc/dropbear/keys/*.pub
次に /etc/dropbear/keys/authorized_keys
を開き、ディスク復号鍵を送るための、接続元マシンの公開鍵を記述します。ここで記述する鍵はrsaの公開鍵である必要があります。dropbearを使う場合はed25519鍵でアクセスできないようです。ここ、ドハマりポイントでした。
最後にdracutコマンドでinitramfsを生成して再起動すれば設定完了です。
sudo dracut -f && sudo reboot
再起動後、サーバーにユーザーroot、ポート222で接続し、console_authコマンド実行後にディスク復号のパスワードを入れればOSが立ち上がります。
なお、このアンロックの手順も自動化できるようなのですが、とりあえず今日はここまでで。詳しい話は以下を参照。
https://github.com/dracut-crypt-ssh/dracut-crypt-ssh#34-unlocking-using-the-unlock-command
data disk暗号化
data diskの暗号化は公式のドキュメントがあるのでこちらを参照して作成してください。
http://rockstor.com/docs/luks/luks.html
RAIDを組む場合は先にディスク暗号化を済ませてからpool割当のところで設定すれば作れます。詳しくは以下参照です。
http://rockstor.com/docs/pools-btrfs.html#redundancy-profiles
おまけ: RockstorがUEFIブートでインストールできない話
結論から話せば、少なくとも2019年2月ごろのRockstorはUEFIブートからインストールができませんでした。以下理由を記しますが、メモをとっていなかったため誤りが含まれるかもしれません。
まず、インストーラーのISOをそのままUSBメモリに書き込むとUEFIブートしません。
これはfatでフォーマットしたUSBメモリにISOの中身を書き込むと回避できますが、今度は立ち上がったKernelがrootfsをマウントできず失敗します。
これはどうやらrootfsのラベル指定がUSBメモリのラベルを指していないことが原因のようで、grub.cfgを書き換えてUSBメモリのラベルで参照できるようにすると解決します。
この修正でインストーラーが立ち上がるところまで進みますが、インストール途中にエラーが起きて先に進めない問題が発生したため、解決を諦めました。
おしまい
おしまい。