設定:私はUSB HDDでRaspberry Piを使用しており、Arch Linuxを実行しています。物事を同期自分だけの「クラウド」同期のため。
質問:物理的な侵入によってHDDパイとHDDが盗まれた場合は、HDD内のファイルを機密に保つようにしたいと思います。
現在の高レベルのアイデア:ハードドライブを暗号化し、ネットワークサーバーにキーを保存します。起動時にキーがダウンロードされ、パスワードが復号化されてインストールされます。 HDD / SDカードにキーを保存しないでください。盗難が発生した場合は、Webサーバーでキーの提供を中止してください。
Q:どうやって始めますか?
(crypttabはこの問題を解決できますか?自分のシステムデバイスを書くのが良いでしょうか?他のアイデアやソリューションも歓迎します)
答え1
設定する最も簡単な方法は、プレーンテキストシステムパーティション(SDカードにあるようです)と暗号化されたデータパーティションを持つことです。データパーティションはdmcryptを使用して暗号化され、キーはサーバーからダウンロードしたキーファイルに保存されます。
サーバーインフラストラクチャの設定から始めて、キーファイルをダウンロードし、それを使用して暗号化されたボリュームを作成するか、既存のボリュームcryptsetup luksFormat /dev/sdb1 /run/data.keyfile
にキーを追加しますcryptsetup luksAddKey /dev/mapper/encrypted /run/data.keyfile
。パスワードまたはキーファイルを使用してボリュームのロックを解除できるため、管理が簡単です(サーバーが利用できない場合でもパスワードを入力できます)。
キーファイルは特定の形式である必要はありません。サーバーからランダムなバイトを生成するだけです。 16バイトで十分です(より多くの場合、より良いセキュリティを得ることはできませんが、より少ないとより良いパフォーマンスを得ることはできません)</dev/urandom head -c 16 >pi.keyfile
。
覗き見を避けるために、HTTPSを使用してキーを提供してください。 CA検証証明書がない場合は、自分で作成して/etc/ssl/certs
ダウンロードコマンド(wget --ca-certificate /etc/local/my.cert
またはcurl --cacert /etc/local/my.cert
)に追加または転送してください。
ボリュームを有効にする前にキーをダウンロードする必要があります。次のいずれかを使用して、1つの手順でこれを実行できます。
wget -nv -O - https://myserver.example.com/pi.keyfile | cryptsetup luksOpen /dev/sdb1 --key-file /dev/stdin
curl https://myserver.example.com/pi.keyfile | cryptsetup luksOpen /dev/sdb1 --key-file /dev/stdin
または、キーを一時ファイルとしてダウンロードしてからボリュームを有効にし、最後に(必須ではありませんが、セキュリティをわずかに向上させることができます)、一時ファイルを削除することもできます。この一時ファイルの元の場所は/run
RAMにあり、ルートとしてのみ書き込むことができます(永続ストアにキーをダウンロードしないでください)。ルートでのみファイルを読み取ることができるように設定する必要があります(umask 700
ダウンロードする前にスケジュールを設定できます)。これは、起動時に実行されるすべてのコードを制御しない場合にのみ重要です。
キーを一時ファイルとしてダウンロードする場合は、キーファイルをに挿入して/etc/crypttab
systemdデバイスを追加してボリュームを有効にする前に(しかしネットワークが利用可能になった後)、実行されているキーファイルをダウンロードして他のデバイスを追加して削除できます。それからキーファイル。インストールが簡単にwget … | cryptsetup …
見えます/etc/rc.local
。
クライアントがキーをダウンロードすると、クライアントを認証できます。認証トークンはPiにプレーンテキストとして保存する必要があります。 SSL クライアント証明書を使用できます。
curl --cert /etc/keyfile.cert https://myserver.example.com/pi.keyfile
wget --certificate /etc/keyfile.cert https://myserver.example.com/pi.keyfile
または、HTTP基本認証を使用するパスワードとして保存されます。/root/.netrc
:
curl -n --user=pi https://myserver.example.com/pi.keyfile
wget --user=pi /etc/keyfile.cert https://myserver.example.com/pi.keyfile
サーバー側で基本認証を構成する方が簡単に設定できます。特殊文字</dev/urandom | head -c 16 | base64
なしでランダムに生成されたパスワードを使用してください。
何をしてもPiを盗む人は誰でも最初に送信者側でブロックしないとパスワードを取得し、鍵をダウンロードできます。また、Piに物理的にアクセスできる人は、SDカードをすばやく取り出し、コピーを作成して再接続することができます。稼働時間以外の項目を監視しないと、これは停電のように見えます。これを完全に防止する方法はありません。スマートカードにキーを入れることで、攻撃者がキーをコピーするのを防ぎますが、スマートカードを盗んだり、その場でキーファイルをダウンロードしたりすることはできません。
繰り返しますが、物理的にアクセスできる人がキーファイルをすばやくダウンロードしてから、空き時間にディスクを盗んで復号化するのを防ぐことはできません。これを避けるために、さまざまな価格で提供される改ざん防止ハードウェアを調べることをお勧めします。
答え2
私は少し異なる解決策で同じ問題を解決しました。私はZoLを使用しているので、EcryptFSを使用することを好みます。また、鍵にアクセスできるようにしたいので、ファイル交換サービス(Dropoboxなど)に暗号化して保存します。その後、手順は次のとおりです。
a) A systemd unit connects to the file exchange service, downloads the key and
decrypts it.
b) The dependent systemd units wait until the previous has finished and then use
the decrypted key to mount the file systems.
c) I have a service that monitors a box switch, so if the server box is opened I
receive an alert via pushbullet and the key is deleted from dropbox.
サーバーの物理的な整合性が損なわれたり、サーバーが盗まれたりするなどの場合、キーがアーカイブアカウントから削除され、データが読み取れなくなるという概念です。