Jump to content

dm-crypt (Português)/Mounting at login (Português)

From ArchWiki

The factual accuracy of this article or section is disputed.

Reason: Poderia se beneficiar do uso de unidades instanciadas, por exemplo cryptsetup@.service (Discuss in Talk:Dm-crypt (Português)/Mounting at login (Português))

É possível configurar o PAM e o systemd para montar automaticamente uma partição dm-crypt criptografada do diretório pessoal (home) quando o usuário fizer login, e desmontá-la quando ele fizer logout.

Este tutorial assume que você já criou sua partição criptografada, conforme descrito em Dm-crypt/Encrypting a non-root file system.

Note
  • Você precisa usar a mesma senha para sua conta de usuário e para o LUKS.
  • Em todos os exemplos, substitua username pelo seu nome de usuário, 1000 pelo seu ID de usuário e PARTITION pelo nome do dispositivo da sua partição criptografada.

Desbloqueando no login

O pam_exec pode ser usado para desbloquear o dispositivo no momento do login. Edite /etc/pam.d/system-login e adicione a linha abaixo (em negrito) após auth include system-auth:

This article or section needs expansion.

Reason: GDM, LightDM e talvez outros gerenciadores de exibição possam exigir pam_exec também para session, veja Talk:Dm-crypt/Mounting at login#pam_exec required for session & using script. (Discuss in Talk:Dm-crypt (Português)/Mounting at login (Português))
/etc/pam.d/system-login
...

auth       include    system-auth
auth       optional   pam_exec.so expose_authtok /etc/pam_cryptsetup.sh

...

Em seguida, crie o script mencionado.

/etc/pam_cryptsetup.sh
#!/bin/sh

CRYPT_USER="username"
PARTITION="/dev/sdXY"
NAME="home-$CRYPT_USER"

if [ "$PAM_USER" = "$CRYPT_USER" ] && ! [ -e "/dev/mapper/$NAME" ]; then
    /usr/bin/cryptsetup open "$PARTITION" "$NAME"
fi

Torne o script executável.

Montagem e desmontagem automáticas

O systemd-logind mantém o serviço user@1000.service ativo enquanto houver ao menos uma sessão ativa do usuário. Ele é iniciado automaticamente após o primeiro login bem-sucedido e finalizado após o logout da última sessão. Portanto, podemos criar e habilitar uma unidade systemd.mount(5) para o volume mapeado e conectá-la a user@1000.service para que seja montada e desmontada automaticamente:

/etc/systemd/system/home-username.mount
[Unit]
Requires=user@1000.service
Before=user@1000.service

[Mount]
Where=/home/username
What=/dev/mapper/home-username
Type=btrfs
Options=defaults,relatime,compress=zstd

[Install]
RequiredBy=user@1000.service

Bloqueio após desmontar

Após desmontar, o dispositivo ainda permanecerá desbloqueado, permitindo montá-lo novamente sem digitar a senha. (Ao desligar ou reiniciar, a partição será bloqueada porque a chave é removida da RAM, mas apenas desmontar não a bloqueará.) Você pode criar e habilitar um serviço que é iniciado quando o dispositivo é desbloqueado (BindsTo=dev-mapper-home\x2dusername.device) e é encerrado após o dispositivo ser desmontado (Requires,Before=home-username.mount), bloqueando o dispositivo no processo (ExecStop=cryptsetup close):

/etc/systemd/system/cryptsetup-username.service
[Unit]
DefaultDependencies=no
BindsTo=dev-PARTITION.device
After=dev-PARTITION.device
BindsTo=dev-mapper-home\x2dusername.device
Requires=home-username.mount
Before=home-username.mount
Conflicts=umount.target
Before=umount.target

[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=0
ExecStop=/usr/bin/cryptsetup close home-username

[Install]
RequiredBy=dev-mapper-home\x2dusername.device
Note dev-PARTITION é o resultado de systemd-escape -p /dev/PARTITION