私は現在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と競合するため、integrity
VG名として使用しないでください。
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を使用して起動します。
結局、次のようになります。
[今すぐインストール]をクリックします。
続行すると、以下に示す変更がディスクに書き込まれます。それ以外の場合は、手動で追加の変更を実行できます。
警告:これにより、削除したパーティションとフォーマットするパーティションのすべてのデータが削除されます。
次のデバイスのパーティションテーブルが変更されました。
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を使用していることを確認し、mdadm
他lvm
のものもインストールされていることを確認する必要があります。
# 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
として誤って識別されたため、実際にデバイスであることを確認してください。crypt
dmsetup table
integrity
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システムをお楽しみください!
(とにかく故障するまで。危険は本人の負担で使用してください。バックアップしてください!)
答え2
残念ながら、現在の状況はかなり複雑です。スタンドアロンDM-Integrityは広く採用されていないため、これを設定する標準的な方法はありません。
直接処理するには、独自のinitramfsフック/systemdサービス/ initスクリプトを作成する必要があります。また、Live CD/回復システムを起動するたびに手動で設定する必要があります。
その道に行きたい場合は、他の問題を考慮する必要があります。たとえば、サポートされているデバイスにUUIDがないため、認識されません。 PARTUUIDまたはPARTLABELを使用してこの問題を解決できますが、これは通常のUUIDよりはるかに安定しています。
したがって、不可能ではないが、いかなる方法でも解決しなければならない様々な問題が発生すると予想される。
そうしない特別な理由がない限り、現在DM-Integrityを使用する最も実用的な方法は、オプションの整合性サポートが有効になっているLUKS 2(cryptsetup luksFormat --integrity ...
)を使用することです。
cryptsetup/LUKSが広く採用されています。サポートされているデバイスを識別するために必要なUUIDを提供し、初期ブートステップはすでにほぼどこでもサポートされています。したがって、他のLUKSデバイスのように最初に設定する必要はなく、操作のために他のタスクをほとんど実行する必要はありません。