Como eu configuro o systemd para ativar um arquivo de troca criptografado?

7

Meu pergunta anterior produziu os comandos para adicionar um arquivo de troca criptografado:

# 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

Mas o Arch Linux usa systemd , e estou tendo problemas para descobrir a melhor forma de obter o systemd para ativar meu arquivo de troca automaticamente. systemd.swap sugere que eu deveria ter uma unidade dev-mapper-swapfile.swap parecida com:

[Unit]
Description=Encrypted Swap File

[Swap]
What=/dev/mapper/swapfile

Isso executaria o comando swapon . Mas não sei como executar os comandos para preparar /dev/mapper/swapfile . Eu entendo que dev-mapper-swapfile.swap deve declarar uma dependência em alguma outra unidade, mas não tenho certeza de como essa unidade deve ser.

    
por cjm 13.02.2013 / 17:45

2 respostas

5

Você pode querer dar uma olhada em:

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

Eles trabalham para volumes criptografados respaldados por dispositivos de bloco. Eles também devem funcionar para volumes suportados por arquivos.

Atualização:

Isso funciona para mim:

# 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'

Etapas para obter este arquivo:

  • Crie uma entrada em / etc / crypttab: swap2 /swap.test /dev/urandom swap
  • Execute este comando: /usr/lib/systemd/system-generators/systemd-cryptsetup-generator Isso cria arquivos unitários no diretório /tmp/ .
  • Pesquise pelo arquivo de unidade gerado.
  • Abra e remova a entrada swap.test.device das diretivas After= e BindsTo= . Isso é importante, pois não existe, por definição, nenhum dispositivo para o swapfile. Isso impede o início do arquivo unitário.
  • Copie o unitfile para /etc/systemd/system/
  • Ative-o para seu destino favorito.
por 13.02.2013 / 18:03
3

Aqui está o resultado final que eu criei com base na resposta do .

Coloque isso em /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'

Coloque isso em /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

Configuração única (como root) para criar o swapfile, habilitá-lo para inicializações futuras e começar a usá-lo imediatamente:

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

O tamanho no comando fallocate determina o tamanho do swapfile.

A entrada /etc/crypttab não é necessária; é apenas uma maneira de gerar [email protected] . Feito isso, você não precisa mais.

    
por 21.02.2013 / 17:33