Ubuntu 10.04をインストールすると、現在10.10で、ハードドライブの「暗号化LVM」を有効にするオプションが提供されました。このオプションを選択すると、起動時にLVMを復号化するためのパスワードの入力を求められます。
現在、Linux(Ubuntuとは限らない)を実行するヘッドレスサーバーをセットアップすることを考えていますが、サーバーがヘッドレスであるため、起動時にサーバーを解読できないのではないかと心配しています。起動中にSSHでSSHにログインして、暗号化されたLVMのパスワードを入力できますか?もしそうなら、私はそれをどのように設定しますか?または別の解決策はありますか?繰り返しますが、この質問はUbuntuに固有のものではありません。ありがとう。
14.04など、ubuntuの新しいバージョンの場合、@ draglyと this blogposts ' の組み合わせが非常に役立つことがわかりました。言い換えると:
(サーバー上)Dropbearをインストールする
Sudo apt-get install dropbear
(サーバー上)rootの公開/秘密鍵ログインのコピーとアクセス許可の割り当て
Sudo cp /etc/initramfs-tools/root/.ssh/id_rsa ~/.
Sudo chown user:user ~/id_rsa
userをサーバー上のユーザー名に変更することを忘れないでください
(クライアント上)サーバーから秘密鍵を取得する
scp [email protected]:~/id_rsa ~/.ssh/id_rsa_dropbear
(クライアント上)ssh configにエントリを追加します
Host parkia
Hostname 192.168.11.111
User root
UserKnownHostsFile ~/.ssh/know_hosts.initramfs
IdentityFile ~/.ssh/id_rsa_dropbear
Remember to change _parkia_ to whatever you'd like to type `ssh my-box` to be.
(サーバー上)作成 このファイル at /etc/initramfs-tools/hooks/crypt_unlock.sh
(サーバー上)そのファイルを実行可能にします
Sudo chmod +x /etc/initramfs-tools/hooks/crypt_unlock.sh
Initramfsを更新する
Sudo update-initramfs -u
ブート時にdropbearサービスを無効にして、パーティションが復号化された後にopensshが使用されるようにします
Sudo update-rc.d dropbear disable
完了です。やってみて。静的IPアドレスを使用してサーバーを構成する方法が必要な場合は、上記にリンクされているブログ投稿を確認してください。
BusyBoxとDropbearでこのような設定を行うためのガイドは このブログ投稿 に示されています。アーリーsshは私にとっては機能せず、どうやらもう必要ないようです。
以下に、必要な作業をまとめました。詳細については、上記の投稿をご覧ください。
BusyBoxとDropbearをサーバーにインストールします
Sudo apt-get install dropbear busybox
サーバーでinitramfsを更新します
Sudo update-initramfs -u
Dropbearによって生成された秘密鍵をクライアントマシンにコピーします。これを新しいディレクトリにコピーして所有権を変更しなければならない場合があります。 serverで次の手順を実行します。
Sudo cp /etc/initramfs-tools/root/.ssh/id_rsa ~/.
Sudo chown user:user ~/id_rsa
Userを自分のユーザー名に置き換えてください。パスワードのログインが機能していないようです。
これで、clientで以下を呼び出すことにより、scpで秘密鍵を転送できます。
scp [email protected]:~/id_rsa ~/.ssh/id_rsa_dropbear
clientの〜/ .ssh/configファイルを設定して、簡単にログインできるようにします。テキストエディタで開き、以下を追加します。
Host myremoteserver
HostName my.remote.server
User root
UserKnownHostsFile ~/.ssh/known_hosts.initramfs
IdentityFile ~/.ssh/id_rsa_dropbear
Hostを任意の名前に変更し、HostNameをサーバーの名前に変更します。ユーザーをrootにします。 Dropbearで承認されている唯一のユーザーのようです。ファイルを保存して閉じます。
serverを再起動し、パスフレーズのプロンプトを待ちます。 Dropbearがインターネット接続を検出してセットアップするまで数秒かかります。 clientで次のコマンドを使用してサーバーに接続します。
ssh myremoteserver # or any name you chose
ログインしたら、serverで次のコマンドを発行します。詳細については、ブログ投稿を参照してください。
pid=`ps | grep "/scripts/local-top/cryptroot" | cut -d " " -f 3`
kill -9 $pid
sleep 35
/scripts/local-top/cryptroot
pid=`ps | grep "/bin/sh" | cut -d " " -f 3`
kill -9 $pid;
パスフレーズを入力するまでに少し時間がかかります(30秒)。プロンプトが表示されたら入力します。
入力して接続を閉じます
exit
これでサーバーは暗号化されたハードドライブのロックを解除し、通常どおりに起動するはずです。
(ブログ投稿の元の著者に大きな感謝を!)
私は early-ssh があなたが探しているものを提供すると思います:
Early-ssh is a simple initramfs hook, which installs Dropbear SSH server into
your initramfs, and starts it at boottime, so you will be able to do a lot of
things remotely over SSH, before your root partition gets mounted, for example:
* unlocking LUKS encrypted crypto devices -
even your root can be an encrypted filesystem
* assembling/altering RAID arrays (mdadm)
* checking the root filesystem in read-write mode,
taking action in case of errors
* and so on...
すでに利用可能な.debパッケージがあるので、おそらくUbuntuで問題ないでしょう。
/usr/share/doc/cryptsetup/README.remote.gz
(Ubuntuパッケージcryptsetup
)にあるcryptsetup readmeをご覧ください。これを達成するための完全なガイドがあります。 dragly's answer に似ていますが、これはもう少しエレガントだと思います。 (Dropbear形式のキー、パスフレーズをFIFOなどで渡す)
initramfsのsshログインによるrootfsのロック解除
リモートからの起動時にrootfsのロックを解除できます。initramfsがマウントされた状態で実行中に、sshを使用して起動システムにログインします。
セットアップ
リモートロック解除を機能させるには、initramfsをビルドする前に、次のパッケージをインストールする必要があります。
dropbear
busybox
ファイル
/etc/initramfs-tools/initramfs.conf
には、initramfsのビルド時に使用される構成オプションが含まれています。 initramfsにbusyboxをインストールするためには、BUSYBOX=y
(busyboxパッケージのインストール時にデフォルトとして設定されます)を含める必要があります。また、initramfsへのdropbearのインストールを無効にするDROPBEAR=n
を含めないでください。DROPBEAR=y
に設定すると、dropbearはどのような場合でもインストールされます。DROPBEAR
がまったく設定されていない場合、dropbearは既存のcryptrootセットアップの場合にのみインストールされます。Initramfsに使用されるホストキーは
dropbear_dss_Host_key
とdropbear_rsa_Host_key
で、どちらも/etc/initramfs-tools/etc/dropbear/
にあります。 initramfsのコンパイル時に存在しない場合は、自動的に作成されます。手動で作成するコマンドは次のとおりです。dropbearkey -t dss -f /etc/initramfs-tools/etc/dropbear/dropbear_dss_Host_key dropbearkey -t rsa -f /etc/initramfs-tools/etc/dropbear/dropbear_rsa_Host_key
Initramfsは暗号化されないため、公開鍵認証が想定されます。そのために使用されるキーは
/etc/initramfs-tools/root/.ssh/authorized_keys
から取得されます。 initramfsのコンパイル時にこのファイルが存在しない場合は作成され、/etc/initramfs-tools/root/.ssh/id_rsa.pub
が追加されます。後者のファイルも存在しない場合は、自動的に生成されます。一致する秘密鍵は、後で/etc/initramfs-tools/root/.ssh/id_rsa
(またはid_rsa.dropbear
)でinitramfsにログインする必要があります。 dropbear形式で必要です)。以下は、それぞれの手順を手動で実行するコマンドです。キーを作成するには(dropbear形式):
dropbearkey -t rsa -f /etc/initramfs-tools/root/.ssh/id_rsa.dropbear
キーをdropbear形式からopenssh形式に変換するには:
/usr/lib/dropbear/dropbearconvert dropbear openssh \ /etc/initramfs-tools/root/.ssh/id_rsa.dropbear \ /etc/initramfs-tools/root/.ssh/id_rsa
公開鍵を抽出するには:
dropbearkey -y -f /etc/initramfs-tools/root/.ssh/id_rsa.dropbear | \ grep "^ssh-rsa " > /etc/initramfs-tools/root/.ssh/id_rsa.pub
公開鍵をauthorized_keysファイルに追加するには:
cat /etc/initramfs-tools/root/.ssh/id_rsa.pub >> /etc/initramfs-tools/root/.ssh/authorized_keys
Dhcpを使用して設定するインターフェースが必要な場合は、
DEVICE=
に/etc/initramfs-tools/initramfs.conf
を設定するだけで十分です。 initramfsはip=
カーネルパラメータも尊重する必要があります。 grubを使用する場合は、おそらく/boot/grub/menu.lst
の '# kopt=
'行に設定するか、特定の 'kernel
'行に追加することをお勧めします。ip=
カーネルパラメータは、カーネルソースツリーのDocumentation/nfsroot.txt
に記載されています。問題
設定を変更して効果的なものにした場合は、必ず
update-initramfs
を実行してください。Sshデーモンのために十分なエントロピーを収集することは、時々問題となるようです。十分なエントロピーが取得されるまで、sshデーモンの起動が遅れる可能性があります。これは起動プロセスをブロックしないため、コンソールにいるときは、sshdが起動を完了するのを待つ必要はありません。
ロック解除手順
リモートからロックを解除するには、次のようにします。
ssh -o "UserKnownHostsFile=~/.ssh/known_hosts.initramfs" \ -i "~/id_rsa.initramfs" [email protected] \ "echo -ne \"secret\" >/lib/cryptsetup/passfifo"
この例では、cryptrootシステムのホストキーを保持する追加の
known_hosts
ファイル "~/.ssh/known_hosts.initramfs
"があり、ファイルの承認済みキーを保持するファイル "~/id_rsa.initramfs
"があることを前提としています。 cryptrootシステム、cryptrootシステムの名前は「initramfshost.example.com
」、cryptrootパスフレーズは「secret
」-<
[email protected]
>、水曜日、2009年9月30日
jap のおかげで、これを別のチャネルで私に指摘してくれました。
無人だけでなくリモートでも起動できるようにしたい場合は、 Mandos (私や他の人も)を確認する必要があります。書いている):
Mandosは、暗号化されたルートファイルシステムを持つサーバーを無人またはリモートで再起動できるようにするシステムです。 FAQリストを含む詳細については、 イントロマニュアルページ ファイルを参照してください。
つまり、起動サーバーはネットワークを介して安全な方法でパスワードを取得します。詳細については、READMEを参照してください。
ヘッドレスサーバー?シリアルポートがある場合は使用してください。
GRUBは、シリアルポートで動作するように構成できます。カーネルは、初期ブートメッセージの出力、ドライブのロックを解除するためのパスワードの入力、およびログインにシリアルポートを使用するように構成することもできます(サーバーがシリアルBIOSをサポートしている場合は、それも有効にします。その後、接続する必要はありません。マシンへのモニター)。
ヘッドレスサーバーにアクセスするための「非ネットワーク」方法を持つことは常に良い考えです。
残念ながら、上記の答えはどれもうまくいきませんでした。さらに、サーバーから秘密鍵をコピーすることは逆説的です。
とにかく、 次の指示 がうまくいきました:
apt-get install dropbear initramfs-tools busybox
公開鍵をコピーして、サーバーの/etc/dropbear-initramfs/authorized_keys
に貼り付けるだけです
/etc/initramfs-tools/hooks/crypt_unlock.sh
に次のスクリプトを作成します
#!/bin/sh
PREREQ="dropbear"
prereqs() {
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
. "${CONFDIR}/initramfs.conf"
. /usr/share/initramfs-tools/hook-functions
if [ "${DROPBEAR}" != "n" ] && [ -r "/etc/crypttab" ] ; then
cat > "${DESTDIR}/bin/unlock" << EOF
#!/bin/sh
if PATH=/lib/unlock:/bin:/sbin /scripts/local-top/cryptroot; then
kill \`ps | grep cryptroot | grep -v "grep" | awk '{print \$1}'\`
# following line kill the remote Shell right after the passphrase has
# been entered.
kill -9 \`ps | grep "\-sh" | grep -v "grep" | awk '{print \$1}'\`
exit 0
fi
exit 1
EOF
chmod 755 "${DESTDIR}/bin/unlock"
mkdir -p "${DESTDIR}/lib/unlock"
cat > "${DESTDIR}/lib/unlock/plymouth" << EOF
#!/bin/sh
[ "\$1" == "--ping" ] && exit 1
/bin/plymouth "\$@"
EOF
chmod 755 "${DESTDIR}/lib/unlock/plymouth"
echo To unlock root-partition run "unlock" >> ${DESTDIR}/etc/motd
fi
chmod +x /etc/initramfs-tools/hooks/crypt_unlock.sh
/etc/initramfs-tools/initramfs.conf
を編集して、行を追加(または変更)します。
#format [Host ip]::[gateway ip]:[netmask]:[hostname]:[device]:[autoconf]
#([hostname] can be omitted)
IP=192.168.1.254::192.168.1.1:255.255.255.0::eth0:off
update-initramfs -u
Sudo update-rc.d dropbear disable
ssh [email protected] [-i ~/.ssh/id_rsa]
経由でサーバーに接続しますArch LinuxにはAURパッケージ dropbear_initrd_encrypt があり、そのまま使用できます。有線インターフェースでかなりうまく機能します。ワイヤレスのために少しハックしなければならなかった。
Debian 9(安定版)では、このソリューションは古くなっています。インストール中にdropbear: WARNING: Invalid authorized_keys file, remote unlocking of cryptroot via SSH won't work!
に関する警告が表示され、必要なキーを見つけることができませんでした。この方法は非常にシンプルで、すばらしい#debianチャネルで説明されています(ありがとうございます)。
まず、busybox
、dropbear
およびdropbear-initramfs
がインストールされていることを確認します
Sudo apt install busybox dropbear*
次に、公開鍵(ほとんどの場合~/.ssh/id_rsa.pub
)をファイル/etc/dropbear-initramfs/authorized_keys
に追加します。
次にinitramfs
を更新して、変更を考慮します。:update-initramfs -u
それで全部です!
注:dropbear
とopenssh
の間のキーの衝突を避けたい場合(同じIPを共有しますが、異なるキーを使用します)、クライアントに~/.ssh/config
こんな感じです:
Host myserver_luks_unlock
User root
Hostname <myserver>
# The next line is useful to avoid ssh conflict with IP
HostKeyAlias <myserver>_luks_unlock
Port 22
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
次に、以下を使用して接続します。
ssh myserver_luks_unlock
プロンプトが表示されたら、busyboxプロンプトの指示に従って入力します。
cryptroot-unlock
パスワードを入力します。
楽しい!
私はこのページで他の人が説明した手法(カーネルIP
パラメーターを使用したinitramfsのSSHでネットワークを構成する)を使用して、ヘッドレスUbuntu Linuxサーバー(12.02、14.04、 16.04および18.04)。
私は実際に私のためにロック解除を行うPythonプログラム( nlock-remote-system )を開発することさえしました。少し壊れやすいので、サーバーを再起動するのを怖がり始めたので、「それが害を及ぼす場合は自動化する価値がある」という精神で、知識をPython ????セキュリティ更新プログラムを適用するための定期的な再起動がはるかに簡単になりました)。
それ以来、私は リモートルートディスクの暗号化 に関する個人的なメモも世界中に公開することにしました。リンク先のページには、手順に関するかなりの詳細(ここで触れられていないヒントも含まれています)が含まれており、最新の状態に保つつもりです。
私はあなたのためにこれを行うAnsibleロールを書きました。ロール debops-contrib.dropbear_initramfs を取得して実行するだけです。詳細は ロールのドキュメント を参照してください。