我的上一个问题生成添加加密交换文件的命令:
# 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
您可能想看看:
- 密码表(5)
- [电子邮件受保护](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/
。 - 搜索生成的单元文件。
- 打开它并消除
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]
。一旦完成,您就不再需要它了。