web-dev-qa-db-ja.com

暗号化されたスワップファイルをアクティブにするようにsystemdを設定するにはどうすればよいですか?

私の 前の質問 は、暗号化されたスワップファイルを追加するコマンドを生成しました:

# One-time setup:
fallocate -l 4G /root/swapfile.crypt
chmod 600 /root/swapfile.crypt

# On every boot:
loop=$(losetup -f)
losetup ${loop} /root/swapfile.crypt
cryptsetup open --type plain --key-file /dev/urandom ${loop} swapfile
mkswap /dev/mapper/swapfile
swapon /dev/mapper/swapfile

しかし Arch Linuxsystemd を使用しており、systemdでスワップファイルを自動的にアクティブ化する方法を理解するのに苦労しています。 systemd.swap は、次のようなdev-mapper-swapfile.swapユニットが必要であることを示しています。

[Unit]
Description=Encrypted Swap File

[Swap]
What=/dev/mapper/swapfile

これはswaponコマンドを実行します。しかし、/dev/mapper/swapfileを準備するコマンドを実行する方法がわかりません。私はdev-mapper-swapfile.swapが他のユニットへの依存関係を宣言する必要があると収集しましたが、そのユニットがどのように見えるべきかわかりません。

7
cjm

あなたは見てみたいかもしれません:

  • crypttab(5)
  • systemd-cryptsetup @ .service(8)
  • systemd-cryptsetup-generator(8)

これらは、ブロックデバイスによってサポートされる暗号化されたボリュームに対して機能します。それらは、ファイルでバックアップされたボリュームでも機能するはずです。

更新:

これは私にとってはうまくいきます:

# Automatically generated by systemd-cryptsetup-generator

[Unit]
Description=Cryptography Setup for %I
Documentation=man:[email protected](8) man:crypttab(5)
SourcePath=/etc/crypttab
Conflicts=umount.target
DefaultDependencies=no
BindsTo=dev-mapper-%i.device
After=systemd-readahead-collect.service systemd-readahead-replay.service
Before=umount.target
Before=cryptsetup.target
After=systemd-random-seed-load.service

[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=0
ExecStart=/usr/lib/systemd/systemd-cryptsetup attach 'swap2' '/swap.test'     '/dev/urandom' 'swap'
ExecStop=/usr/lib/systemd/systemd-cryptsetup detach 'swap2'
ExecStartPost=/sbin/mkswap '/dev/mapper/swap2'

このファイルを取得する手順:

  • / etc/crypttabにエントリを作成します:swap2 /swap.test /dev/urandom swap
  • 次のコマンドを実行します。/usr/lib/systemd/system-generators/systemd-cryptsetup-generatorこれにより、/tmp/ディレクトリにユニットファイルが作成されます。
  • 生成されたユニットファイルを検索します。
  • それを開き、removeswap.test.deviceおよびAfter=ディレクティブからのエントリBindsTo=を開きます。スワップファイル用のデバイスがないため、これは重要です。これはunitfileの開始を防ぎます。
  • Unitfileを/etc/systemd/system/にコピーします
  • お気に入りのターゲットに対してそれをアクティブにします。
5
t-8ch

これが t-8ch's の回答に基づいて私が思いついた最終結果です。

これを/etc/systemd/system/[email protected]に入れます:

# Automatically generated by systemd-cryptsetup-generator
# then manually tweaked

[Unit]
Description=Cryptography Setup for %I
Documentation=man:[email protected](8) man:crypttab(5)
SourcePath=/etc/crypttab
Conflicts=umount.target
DefaultDependencies=no
BindsTo=dev-mapper-%i.device
After=systemd-readahead-collect.service systemd-readahead-replay.service
Before=umount.target
Before=cryptsetup.target
After=systemd-random-seed-load.service

[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=0
ExecStart=/usr/lib/systemd/systemd-cryptsetup attach 'swapfile' '/root/swapfile.crypt' '/dev/urandom' 'swap,cipher=aes-cbc-essiv:sha256,size=256'
ExecStop=/usr/lib/systemd/systemd-cryptsetup detach 'swapfile'
ExecStartPost=/sbin/mkswap '/dev/mapper/swapfile'

これを/etc/systemd/system/dev-mapper-swapfile.swapに入れます:

[Unit]
Description=Encrypted Swap File
[email protected]
[email protected]
Before=swap.target

[Swap]
What=/dev/mapper/swapfile

[Install]
WantedBy=swap.target

スワップファイルを作成し、将来の起動のために有効にして、すぐに使用を開始するための1回限りのセットアップ(rootとして):

fallocate -l 4G /root/swapfile.crypt
chmod 600 /root/swapfile.crypt
systemctl enable dev-mapper-swapfile.swap
systemctl start dev-mapper-swapfile.swap

fallocateコマンドのサイズによって、スワップファイルの大きさが決まります。

/etc/crypttabエントリは必要ありません。 [email protected]を生成する方法にすぎません。完了したら、もう必要ありません。

3
cjm