私は、Debian 8 (jessie) を実行する 10GB の ECC メモリを搭載した HP Proliant Microserver Gen7 で稼働しているホームサーバーを持っています。現在、1 つの小さなシステム ディスク (rsnapshot を使用してバックアップ) と、mdadm を使用して RAID 1 としてセットアップされた 2 つの 3TB ストレージ ディスクがあり、その上にさまざまな目的の LVM グループがあり、その 1 つは、プライベート データを保持するために dm-crypt / luks でさらに暗号化されています。
ストレージ プール用に同じサイズの HD を 2 台追加購入し、サーバーを最初からセットアップする予定です。間違いなく今回も Debian を使用しますが、今回はおそらく xenserver 仮想化を使用します。したがって、ストレージ プールは 4x 3TB となり、Raid1 では 6TB が使用可能で、Raid5 (または raidz1) では 9TB になります。
mdadm / lvm / dm-crypt の組み合わせはうまく機能しますが、特に簡単な災害復旧戦略を計画するのは非常に複雑です。各レイヤーについて、最適なメタデータのバックアップと復元のプロセスなどを調査する必要があります。
理想の世界では、ストレージ全体を暗号化された raidz1 プールにしますが、暗号化は Linux 上の Zfs にはまだ導入されておらず、私の調査では、いつ実装されるのか全く不明です。
Btrfs も同じような状況にあります。少なくとも実稼働では安定しているように見えますが、残念ながら暗号化も予測できない将来にしか実現されないでしょう。
私が使いたいファイルシステムは、どちらも Linux でネイティブに暗号化をサポートしていません (まだ)。LUKS で暗号化された LVM を ZFS または BtrFS と組み合わせて使用する方法に関するハウツーやチュートリアルはたくさんあります。ZFS 上で LVM を使用するか、LVM 上で ZFS を使用するというアプローチがありますが、私にとってはひどい混乱のように思えます。
私は EncFS の概念がまったく好きではないので、これも選択肢ではありません。
おそらく、私が聞いたことのないオプションがいくつかあると思います。そこで、私の質問は次のとおりです。ホームサーバー用の Linux で選択できる、完全にまたは部分的に暗号化できる「管理しやすい (zfs のように拡張可能、エラー修正など)」ファイル システムを実現するには、他にどのような方法がありますか?
2017 年 12 月更新: 暗号化機能を備えた Linux 上の ZFS が近日登場: https://blog.heckel.xyz/2017/01/08/zfs-encryption-openzfs-zfs-on-linux/
答え1
mdadm / lvm / dm-crypt がおそらく最善の策です。それほど複雑ではありません。各レイヤーを適切に処理するだけです。または、必要に応じて、mdadm /dm-crypt/lvm (すべての LV が 1 つのパスフレーズで 1 つのデバイスを共有する場合) を使用します。
encfs を使用しないのは正しいです -安全ではない。
答え2
ZFS セットアップを選択する場合、次のことをお勧めします。
LVMを使用せず、プールの上にZVOLを作成します
OS用 - ミラー(またはraidz)を使用した暗号化されていないZFSプールのGPTパーティション
- プライベートデータの場合 - GPTパーティションでLUKSを使用し、その上にZFSプールミラー(またはraidz)を構築します。
起動後、SSH 経由でログインし、暗号化されたパーティションのパスワードを入力し、LUKS の上にあるプールをインポートして、仮想マシンを起動します (シェル スクリプトを作成するのが最適です)。
提案されるスキーマはGPT / LUKS / ZFS / データまたは VM 用の ZVOL
UEFIブートを使用しない場合は、BIOSパーティション(サイズ1M)を作成することを忘れないでください。また、150MなどのGRUB用のパーティションを作成することを忘れないでください。
ランダムIOが重い場合は、ZFSプリフェッチを無効にすることをお勧めします(echo 1 > /sys/module/zfs/parameters/zfs_prefetch_disable)
答え3
これは、一部のデータを暗号化したいすべての人へのアドバイスです。Grub パーティション、システム パーティション、ホーム パーティション、データ パーティション、スワップなど、コンピューターに接続されている可能性のあるすべてのストレージを常に 100% 暗号化してください。常にすべてを暗号化してください。
なぜでしょうか? アプリケーション/システムによってデータが保存される場所を制御できないためです。
ディスアターサンプルイベントシーケンス:
- 通常の起動
- アプリを使う
- 「プライベート」文書を開く
- システムクラッシュ(ソフトウェアまたはハードウェア)
- 次回起動時に動作しない
- 1 つのデバイスが寿命を迎えます (再び動作しなくなります)
このようなデバイスにあるものを削除することはできず (機能していません)、読み取ることもできません。では、そこに何が保存されたのでしょうか? おそらく「プライベート」なものでしょうか? 何がどこに保存されているかさえわかりません。
しかし、他の誰か(おそらくポケットに何百万ドルも持っている人)がそれを実行できるため、そのデバイスをゴミ箱に捨てることはできません。「プライベート」データがそこにないことが確認されるまでは...デバイスを会社に渡さない限りはわかりませんが、そうすると「プライベート」は危険にさらされ、会社がそれを「コピー」する可能性があります(そこで働いている悪い人など)。
質問です: 使用するすべてのコード (ブート コード、システム コード、アプリケーション コードなど) の各ソース ライン、自分でコンパイルしたソース コード、およびいかなる種類の「バイナリ」も使用していないかどうかを把握していますか。つまり、コンパイラは鉛筆と紙を使ってコンパイルしたはずです。
そうしないと、何をするかわからないコードを使用することになります。
補足: 「プライベート」データの使用が必要な場合は、そのコンピューターを二度とインターネットに接続しないでください。使用したアプリの一部がデータを保存し、将来的にインターネット サーバーに送信する可能性があります。
極端な例: 書き込みアプリを使用して TXT ファイルを読み取ると、そのファイルをどこかに隠して保存するための隠しコードが存在します... その後、数年の更新の後、そのアプリ (または別のアプリ) には、その隠された保存データを読み取り、インターネット サーバーやサードパーティのコンピューターなどに送信する隠しコードが存在します。
極端なケースですか? 私はそれを苦い経験から学びました... 私の Linux でトロイの木馬 (使用したいアプリ内) を入力すると、どうやら何もしないわけではなく (ソケット接続がないなど)、ディスクへの何らかの「書き込み」を記録し、二重書き込みを行っていました... 約 2 週間後、別のトロイの木馬がその情報を取得し、IP に送信しようとしました... なんと、インターネット接続の「中間」に別のコンピューターがあり (はい、もちろんそうでした。私は完全な被害妄想者だったので、それが私を救ってくれました)、その接続を「発見」して「ブロック」しました... 言うまでもなく、Windows では制御できないため、私は「Linux」のみを使用しています。 このようなトロイの木馬はアプリの作成者が知らないうちに存在し、アプリがリポジトリに保存されたときに挿入されました。 今では「修正」されているため、どのアプリであるかは言いたくないのですが、ご理解いただければ幸いです... いつからかは誰にもわかりません!
私がトロイの木馬や隠しファイルなどについてのみ考えていると思いますか。まったく違います。スワップや一時ファイルなどを覚えておいてください。一部のアプリは、使用中または作成中の文書を保存して、作業内容を失わないようにしていますが、そのデータは一体どこに保存されているのでしょうか。暗号化されたパーティションには必要ありません。おそらく SWAP、一時フォルダー、またはアプリの作成者が希望する一般的な場所に保存されているでしょう。そのため、保存場所を常に把握できるわけではありません。もう一度、すべてを暗号化してください。
ああ、そうです。grub.cfg は RAID0、LUKS 上の LUKS、LUKS 上の LUKS などに配置できます。Grub2 を起動するには、ステージ 1.5 または 2 用の 8MiB 以下の非常に小さなパーティション (非フォーマット (一括ダンプ)) のみが必要です。インターネットで BIOS GRUB パーティションを検索してください。
申し訳ありませんが、私はまだ ZFS を試しておらず、Grub ファイル (grub.cfg など) が ZFS 内に存在できるかどうかはわかりません... ただし、Ext4、LVM、LUKS、LVM、LUKS などの環境でテストしました... つまり、いくつかのレベルでは、LUKS、実際の GPT (MBR 内)、EFI パーティションなしで、問題なく起動します... grub2 をインストールするときに、拡張機能「crypto」と「lvm」を追加するだけで済みました... 私は独自の grub.cfg を入力することを好むため、grub2 に関連する grub2-install 以外は使用しません (繰り返しますが、私は偏執狂です)。
私は常に、他のブートローダーを呼び出す独自の grub.cfg をメイン ブートローダーとして使用します。こうすることで、テキスト エディターで手動で編集するメインのブートローダーに触れることなく、システムが独自のブートローダーを管理できるようになります。
申し訳ありませんが、私は完全な被害妄想者です。
どう考えればよいでしょうか? 暗号化されていないデータの書き込み/読み取りが可能な「場所」がある場合、あらゆる種類の「プライベート」データは完全に無視され、暗号化されていない部分に書き込まれる可能性があります。安全のために、暗号化されていない部分は決して持たないようにしてください。
PD: EFI パーティションを使用する場合は、まったく保護されておらず、暗号化できない FAT32 パーティションであるため、あらゆるコードが書き込むことができることに注意してください。
PPD: FAT32 ではどこにデータを保存できますか? どこでも、空き領域でも。Ext4 ではどうですか? まったく同じです... 常にすべてのストレージを暗号化します。