新しい 4.1 カーネルを搭載した Ubuntu 15.04 で ext4 暗号化パーティションを作成する方法は?

新しい 4.1 カーネルを搭載した Ubuntu 15.04 で ext4 暗号化パーティションを作成する方法は?

ext4Ubuntu 15.04 でカーネル 4.1 を使用して新しい暗号化パーティションを作成できますか?

答え1

まず免責事項: 私はこれを Ubuntu で実行したのではなく、有効にしたカスタム Linux 4.2.3 カーネルを使用して Debian "Stretch" がインストールされたマシンで実行しましたEXT4_FS_ENCRYPTION

指示はクメア投稿されたとおりには動作しません。いくつかの項目が省略されています (コマンド ライン パラメータと手順)。

  • e2fsprogs上記のように更新します
  • ランダム ソルトを生成します。これを「安全な場所」に保存するために、次のものを使用しました。

    head -c 16 /dev/urandom | xxd -p >~/tmp-salt.txt
    echo 0x`cat ~/tmp-salt.txt` >~/.cryptoSalt
    
  • ファイル システムで ext4 暗号化を使用するには、スーパー ブロックに「encrypt」フラグを設定する必要があります。これは、ext4 ファイル システムの作成時のデフォルトではありません。e2fsprogs 1.43 以降の「tune2fs」ユーティリティを使用して、「encrypt」オプションを設定します。

    sudo tune2fs -O encrypt /dev/sda4
    
  • カーネルが変更を認識できるように、ファイル システムをマウントまたは再マウントします (おそらく自動で行われますが、私は別のパーティションでしかこれを実行していないため、確信はありません)。

  • 暗号化を有効にしてマウントされたファイル システムにディレクトリを作成します。

    sudo mkdir -p /secret/home/$USER
    sudo chown $USER:$USER /secret/home/$USER
    
  • キーリングにキーを作成し、それを使用して暗号化するディレクトリのポリシーを設定します (sudoここではコマンドは必要ありません)。

    $ /usr/sbin/e4crypt add_key -S s:`cat ~/.cryptoSalt`
    Enter passphrase (echo disabled):
    Added key with descriptor [0132fed69f946c86]
    $ /usr/bin/e4crypt set_policy 0132fed69f946c86 /secret/home/$USER
    Key with descriptor [0132fed69f946c86] applies to /secret/home/theuser.
    
  • 再起動するたびに、次のadd_keyコマンドを使用して、ディレクトリとその子孫の復号化キーを設定できます。

    $ /usr/sbin/e4crypt add_key -S s:`cat ~/.cryptoSalt`
    Enter passphrase (echo disabled):
    Added key with descriptor [0132fed69f946c86]
    

    前の手順で使用したのと同じパスワードを入力すると、記述子の 16 進文字列を覚えておく必要はありません。

  • 直接使用することもできますadd_key。これはファイルシステム固有のソルトを使用します(したがって、そのパーティションの下にあるすべてのフォルダーは同じソルトを持ちます)

    $ /usr/sbin/e4crypt add_key /secret/home/$USER
    Added key with descriptor [0132fed69f946c86]
    Key with descriptor [0132fed69f946c86] applies to /secret/home/theuser.
    

答え2

Linux 4.1 には、ファイルシステムのディレクトリを暗号化する新しい Ext4 機能が搭載されています。暗号化キーはキーリングに保存されます。開始するには、カーネル オプションが有効になっており、カーネルが 4.1 以上であることを確認してCONFIG_KEYSくださいCONFIG_EXT4_FS_ENCRYPTION

まず、e2fsprogsを少なくともバージョン1.43にアップデートする必要があります。これは執筆時点ではまだWIPなので、Gitリポジトリ:

$ git clone git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git

e4crypt ソースはソース コード内の関連セクションを無効にしています。misc/e4crypt.c を編集し、行 714 付近の次の 2 行を削除して有効にします。

    printf("arg %s\n", argv[optind]);
    exit(0);

次に、新しい e2fsprogs をビルドしてインストールします。

$ sudo apt-get install devscripts build-essential gettext texinfo pkg-config debhelper m4
$ debuild
$ sudo dpkg -i e2fsprogs_1.43-WIP_amd64.deb

今すぐバージョンを確認してください。1.43-WIP になっているはずです。

# e2fsck -V
e2fsck 1.43-WIP (18-May-2015)
        Using EXT2FS Library version 1.43-WIP, 18-May-2015

キーを操作するには、パッケージをインストールする必要がありますkeyutils

$ sudo apt-get install keyutils

暗号化するディレクトリを作成しましょう。暗号化ポリシーは空のディレクトリにのみ設定できます。

$ sudo mkdir -p /encrypted/dir

まずランダムなソルト値を生成し、安全な場所に保存します。

$ head -c 16 /dev/random | xxd -p
877282f53bd0adbbef92142fc4cac459

次に、新しいキーを生成してキーリングに追加します。この手順は、キーチェーンをフラッシュするたびに繰り返す必要があります(再起動)。

$ sudo e4crypt -S 0x877282f53bd0adbbef92142fc4cac459
Enter passphrase (echo disabled): 
Added key with descriptor [f88747555a6115f5]

これで、キーの記述子がわかりました。キーチェーンにキーを追加したことを確認してください。

$ keyctl show
Session Keyring
1021618178 --alswrv   1000  1000  keyring: _ses
 176349519 --alsw-v   1000  1000   \_ logon: ext4:f88747555a6115f5

ほぼ完了です。次に、ディレクトリの暗号化ポリシーを設定します。

$ e4crypt set_policy f88747555a6115f5 /encrypted/dir

以上です。キーチェーンにキーを追加せずにディスクにアクセスしようとすると、ファイル名とその内容は暗号化された意味不明な文字列として表示されます。ファイルシステムで古いバージョンの e2fsck を実行する場合は注意してください。暗号化されたファイル名は無効として扱われます。

関連情報