如何配置 systemd 来激活加密的交换文件?

如何配置 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

架构Linux用途系统,并且我无法弄清楚如何最好地让 systemd 自动激活我的交换文件。 系统交换建议我应该有一个dev-mapper-swapfile.swap看起来像这样的单元:

[Unit]
Description=Encrypted Swap File

[Swap]
What=/dev/mapper/swapfile

那将执行该swapon命令。但我不确定如何执行准备命令/dev/mapper/swapfile。我认为dev-mapper-swapfile.swap应该声明对其他单元的依赖,但我不确定该单元应该是什么样子。

答案1

您可能想看看:

这些适用于由块设备支持的加密卷。它们还应该适用于文件支持的卷。

更新:

这对我有用:

# 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/
  • 搜索生成的单元文件。
  • 打开它并消除swap.test.device来自After=和指令的条目BindsTo=。这很重要,因为根据定义,没有用于交换文件的设备。这会阻止单元文件的启动。
  • 将单元文件复制到/etc/systemd/system/
  • 为您最喜欢的目标激活它。

答案2

这是我根据以下内容得出的最终结果t-8ch 的回答。

把这个放进去:/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

一次性设置(以 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]。一旦完成,您就不再需要它了。

相关内容