再起動後にdm-integrityスタンドアロンマッパーデバイスが失われる

再起動後にdm-integrityスタンドアロンマッパーデバイスが失われる

私は現在dm-integrityを使ってスタンドアロンモードで実行しようとしています。この目的のために、仮想マシンにデフォルトのUbuntu Server 20.04をインストールしました。

次の手順では、dm-integrityデバイス(ext4ファイルシステム)を作成してマウントします。

integritysetup format /dev/sdb
integritysetup open /dev/sdb hdd-int
mkfs.ext4 /dev/mapper/hdd-int
mkdir /data
mount /dev/mapper/hdd-int /data
echo "/dev/mapper/hdd-int /data ext4 defaults 0 0" >> /etc/fstab

メモ:単純化の/dev/sdbために/dev/disk/by-id/<ID>

再起動し、/dev/mapper/hdd-intデバイスが存在しないため、インストールが失敗したことを確認します/data

今私の質問:再起動後にマウントがすでに存在するようにdm-integrityデバイスの情報を永久に維持する方法は?に行を作成する必要がありますか/etc/fstab?それとも別の設定ファイルがありますか?

ベストアンサー1

婦人声明:これは標準的な実装ではなく、実際にはテストされていません。いつでも壊れることがあります。自分の責任で使用してください。バックアップしてください! ! !

だから私の理論的な答えに加えてこれは、新しいUbuntu 20.04デスクトップインストールでスタンドアロンDM-Integrityを実装した例です。ステップ1〜4は設定とインストールのプロセス、ステップ5〜8はカスタムudevルールとフックです。

原料:

  • GPTパーティションスキームを使用するドライブ(PARTLABEL整合性のためにUUIDを提供するために使用されます)
  • integrity-somenameラベルで識別されるDM-Integrityを使用する1つ以上のパーティション。
  • 表示されている各パーティションにDM-Integrityを設定するには、udevルールをカスタマイズしてください。
  • integritysetup初期設定用のバイナリおよびudevルールを含めるようにinitramfsフックをカスタマイズします。

段階的な実装:

1. パーティションの作成

ここで重要なのは、各整合性パーティションにそれぞれルートとパーティションのパーティションラベル(この場合は1integrity-rootと1)があることです。integrity-home//home

# parted /dev/vda
GNU Parted 3.3
Using /dev/vda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit mib                                                         
(parted) mklabel gpt
(parted) disk_set pmbr_boot on                                            
(parted) mkpart grub 1MiB 2MiB
(parted) set 1 bios_grub on
(parted) mkpart boot 2MiB 1024MiB
(parted) set 2 lvm on                                                     
(parted) mkpart integrity-root 1024MiB 10240MiB
(parted) set 3 lvm on                                                     
(parted) mkpart integrity-home 10240MiB 100%                              
(parted) set 4 lvm on                                                     
(parted) print free                                                       
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 19456MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: pmbr_boot

Number  Start     End       Size     File system  Name            Flags
        0.02MiB   1.00MiB   0.98MiB  Free Space
 1      1.00MiB   2.00MiB   1.00MiB               grub            bios_grub
 2      2.00MiB   1024MiB   1022MiB               boot            lvm
 3      1024MiB   10240MiB  9216MiB               integrity-root  lvm
 4      10240MiB  19455MiB  9215MiB               integrity-home  lvm
        19455MiB  19456MiB  0.98MiB  Free Space

(parted)                                                                  
Information: You may need to update /etc/fstab.

それに応じて、パーティションが/dev/disk/by-partlabel下に表示されていることを確認してください。

# ls -l /dev/disk/by-partlabel
total 0
lrwxrwxrwx 1 root root 10 May  2 17:52 boot -> ../../vda2
lrwxrwxrwx 1 root root 10 May  2 17:52 grub -> ../../vda1
lrwxrwxrwx 1 root root 10 May  2 17:52 integrity-home -> ../../vda4
lrwxrwxrwx 1 root root 10 May  2 17:52 integrity-root -> ../../vda3

2. 真実性を確立しなさい

パーティションを設定したら、実際にパーティションを整合性デバイスに切り替える必要があります。

# integritysetup format /dev/disk/by-partlabel/integrity-root 

WARNING!
========
This will overwrite data on /dev/disk/by-partlabel/integrity-root irrevocably.

Are you sure? (Type uppercase yes): YES
Formatted with tag size 4, internal integrity crc32c.
Wiping device to initialize integrity checksum.
You can interrupt this by pressing CTRL+c (rest of not wiped device will contain invalid checksum).
Finished, time 01:14.903, 9081 MiB written, speed 121.2 MiB/s

# integritysetup open /dev/disk/by-partlabel/integrity-root integrity-root

ペアに対して同じ操作を繰り返し、次に存在することを/dev/disk/by-partlabel/integrity-home確認します/dev/mapper

# ls -l /dev/mapper
total 0
crw------- 1 root root 10, 236 May  2  2020 control
lrwxrwxrwx 1 root root       7 May  2 18:07 integrity-home -> ../dm-1
lrwxrwxrwx 1 root root       7 May  2 18:07 integrity-root -> ../dm-0

この命名方式は技術的にLVMと競合するため、integrityVG名として使用しないでください。

3. ファイルシステム、RAID または LVM

整合性のためには、ファイルシステムも作成する必要があります。それ以外の場合、Ubuntuインストーラはこの不思議なデバイスで何をすべきかわからず、代わりにそのデバイスにパーティションテーブルを作成しようとします。

# mkfs.ext4 /dev/mapper/integrity-root
# mkfs.ext4 /dev/mapper/integrity-home

したがって、これはファイルシステムが整合性デバイスに配置される点です。

または、ここでRAIDまたはLVMを使用できます。 LUKSも使えると思います。しかし、LUKS2にはすでにIntegrityのサポートが組み込まれていますが、なぜそうするのですか?ここでLUKSを選択すると、間違ったチュートリアルに従う可能性が高くなります。

4. Ubuntuのインストール

技術的には、Ubuntuデスクトップインストーラは完全性をサポートしていませんが、ファイルシステムを手動で設定するので、とにかく使用できます。以下の追加手順に従わないと起動できません。

  • [インストールの種類]ダイアログボックスで、[その他](手動パーティショニングの場合)を選択します。
  • integrity-rootマウントポイントに「変更」/
  • integrity-homeマウントポイントに「変更」/home

ブートローダーを忘れないでください! (整合性デバイスは使用できません)

  • 「変更」を/dev/vda1「BIOSブート領域の維持」に変更
  • /dev/vda2マウントポイントに「変更」/boot
  • 別のパーティションを維持する(整合性デバイスをフォーマットしない)

UEFIセキュアブート設定では、これはまったく異なります。簡単にするために、この例では古いBIOS grubを使用して起動します。

結局、次のようになります。

Ubuntuインストーラのインストールタイプは、整合性ルートが/、整合性ホームが/home、vda2が/bootであることを示しています。

[今すぐインストール]をクリックします。

続行すると、以下に示す変更がディスクに書き込まれます。それ以外の場合は、手動で追加の変更を実行できます。

警告:これにより、削除したパーティションとフォーマットするパーティションのすべてのデータが削除されます。

次のデバイスのパーティションテーブルが変更されました。

Virtual disk 1 (vda)

次のパーティションがフォーマットされます。

LVM VG integrity, LV home as ext4
LVM VG integrity, LV root as ext4
partition #2 of Virtual disk 1 (vda) as ext2

デフォルトでは、インストーラはインテグリティデバイスをターゲットとして使用するようにだまされているため、LVM VG-LVアレイを誤って想定しています。無視して続行してください。

しかし、再起動しないでください。まだ動作していません。

インストールの実行中にlsblkターミナルで次を実行して、インストールがスムーズに進行していることを確認できます。

# lsblk
vda                252:0    0    19G  0 disk  
├─vda1             252:1    0     1M  0 part  
├─vda2             252:2    0  1022M  0 part  /target/boot
├─vda3             252:3    0     9G  0 part  
│ └─integrity-root 253:0    0   8.9G  0 crypt /target
└─vda4             252:4    0     9G  0 part  
  └─integrity-home 253:1    0   8.9G  0 crypt /target/home

整合性デバイスがまだサポートされていなくても、暗号化デバイスであるとlsblk誤って仮定します。何があっても、清廉の根があり、/target清廉の家/target/homeがあるだけ/dev/vda2で、すべてが良い方向に発展します/target/boot

インストールが完了したら、「今すぐ再起動」の代わりに「テストを続行」を選択します。

5. chroot と整合性設定のインストール

Ubuntuが実際に独立した整合性パーティションのインストールをサポートするには、新しいインストールにルートを変更し、カスタムudevルールとinitramfsフックを設定する必要があります。

# mount /dev/mapper/integrity-root /target
# mount /dev/mapper/integrity-home /target/home
# mount /dev/vda2 /target/boot
# mount --bind /dev /target/dev
# mount --bind /proc /target/proc
# mount --bind /run /target/run
# mount --bind /sys /target/sys
# chroot /target

これでintegritysetupまだインストールされていない可能性があります。また、RAIDまたはLVMを使用していることを確認し、mdadmlvmのものもインストールされていることを確認する必要があります。

# apt-get install cryptsetup

6. udevルールのカスタマイズ

カスタムudevルールが提供されます/etc/udev/rules.d。参考までに、リンクを生成するための標準ルールは/dev/disk/by-partlabel/次のとおりです。

ENV{ID_PART_ENTRY_SCHEME}=="gpt", ENV{ID_PART_ENTRY_NAME}=="?*", SYMLINK+="disk/by-partlabel/$env{ID_PART_ENTRY_NAME}"

したがって、カスタムルールは次のようになります。

ENV{ID_PART_ENTRY_SCHEME}=="gpt", ENV{ID_PART_ENTRY_NAME}=="integrity-?*", RUN+="/usr/sbin/integritysetup open $env{DEVNAME} $env{ID_PART_ENTRY_NAME}"

別の名前で保存してください/etc/udev/rules.d/99-integrity.rules

これにより、udevはパーティションラベルを持つすべてのパーティションに対してオープン統合設定を実行しますintegrity-xyz。これらの名前はシステム全体で一意である必要があるため、RAID設定では各ドライブに異なるパーティションラベルが必要です。

7.カスタムinitramfsフック(Ubuntuのみ)

udevルール自体可能/ルート自体が整合性にない場合は、すでにうまく機能します。基準ファイルシステムの初期化非整合性 rootfs はすばらしくマウントする必要があり、この時点でシステム全体が他のすべてを処理するようになります。

ただし、Integrityのrootfs自体には次のものが必要です。ファイルシステムの初期化私たちのために設定してください。そうしないと、rootfsのマウントに失敗し、起動に失敗します。これはintegritysetup、バイナリとudevルール自体を追加することを意味します。

Ubuntuのinitramfs-toolsを使用すると、次のように作成できます。カスタムフックスクリプト:

#!/bin/sh
PREREQ=""
prereqs()
{
    echo "$PREREQ"
}

case $1 in
    prereqs)
        prereqs
        exit 0
        ;;
esac

. /usr/share/initramfs-tools/hook-functions

# Begin real processing below this line

force_load dm_integrity
copy_exec /usr/sbin/integritysetup /usr/sbin
copy_file text /etc/udev/rules.d/99-integrity.rules

別の名前で保存してください/etc/initramfs-tools/hooks/integrity

8. initramfs アップデート

initramfs 構成に対するすべての変更と同様に、initramfs を再構築する必要があります。

# update-initramfs -u -k all
update-initramfs: Generating /boot/initrd.img-5.4.0-28-generic
cryptsetup: WARNING: target 'integrity-root' not found in /etc/crypttab
update-initramfs: Generating /boot/initrd.img-5.4.0-26-generic
cryptsetup: WARNING: target 'integrity-root' not found in /etc/crypttab

残念ながら、Ubuntuのデフォルトのcryptsetupフックは混乱し、整合性デバイスをcryptsetupデバイスと間違えます。幸い、この警告は無害なので無視しても構いません。

9. 再起動

すべてが順調に進んだ場合は、Live CDからインストールされたシステムで再起動した後、lsblk端末に次のようなウェルカムメッセージが表示されます。

integrity@ubuntu $ lsblk
vda                252:0    0   19G  0 disk  
├─vda1             252:1    0    1M  0 part  
├─vda2             252:2    0 1022M  0 part  /boot
├─vda3             252:3    0    9G  0 part  
│ └─integrity-root 253:0    0  8,9G  0 crypt /
└─vda4             252:4    0    9G  0 part  
  └─integrity-home 253:1    0  8,9G  0 crypt /home

デバイスlsblkとして誤って識別されたため、実際にデバイスであることを確認してください。cryptdmsetup tableintegrity

integrity@ubuntu:~$ sudo dmsetup table
[sudo] password for integrity: 
integrity-root: 0 18598008 integrity 252:3 0 4 J 6 journal_sectors:130944 interleave_sectors:32768 buffer_sectors:128 journal_watermark:50 commit_time:10000 internal_hash:crc32c
integrity-home: 0 18595960 integrity 252:4 0 4 J 6 journal_sectors:130944 interleave_sectors:32768 buffer_sectors:128 journal_watermark:50 commit_time:10000 internal_hash:crc32c

その時点であなたは終わりました。独立した完全性を備えた新しいLinuxシステムをお楽しみください!

(とにかく故障するまで。危険は本人の負担で使用してください。バックアップしてください!)

おすすめ記事