Protegendo credenciais e configurações com contêiner criptografado.

Eu uso um pequeno computador de bolso na mochila. Esse dispositivo serve para testes e desenvolvimento, e armazena informações sensíveis como credenciais, senhas e chaves de acesso. Eu não quero que esses dados caiam em mãos erradas. Diferentemente do notebook, que tem o HD criptografado, meu computador de bolso não usa criptografia no HD. A criptografia consome muito processamento e requer desativar o TRIM do SSD, o que prejudica o desempenho.

Então para contornar o problema resolvi criar um contêiner criptografado para guardar apenas as informações sensíveis. Esse contêiner é montado somente quando necessário, o que aumenta a segurança do sistema.

Criando um contêiner criptografado

Você precisa instalar o pacote cryptsetup. Para isso, execute como root:

sudo apt install cryptsetup

Depois, crie o contêiner criptografado. Primeiro, gere um arquivo de 200MB (como exemplo):

dd if=/dev/urandom of=secure_container.img bs=1M count=200

Inicialize o LUKS:

cryptsetup luksFormat secure_container.img

Abra o contêiner:

cryptsetup open secure_container.img secure_container

Formate (ext4 como exemplo):

mkfs.ext4 /dev/mapper/secure_container

Monte o contêiner:

mkdir -p /mnt/secure_container
mount /dev/mapper/secure_container /mnt/secure_container

Agora o diretório /mnt/secure_container está pronto para uso. Você pode mover seus arquivos sensíveis para lá e criar links simbólicos (por exemplo, do diretório ~/.ssh ou de chaves de acesso ~/.aws).

Desmontando o contêiner

Para desmontar, desmonte o diretório e feche o contêiner:

umount /mnt/secure_container
cryptsetup close secure_container

Automatizando a montagem e desmontagem

Como montar e desmontar o contêiner é muito repetitivo vale a pena crie scripts e automatizandor essa tarefa. Os scripts precisam de permissão de root para funcionar. Você pode configurar o sudo para não pedir senha para esses scripts, facilitando o uso.

Script de montagem (mount_secure_container.sh)

#!/bin/sh

[ "root" != "$USER" ] && exec sudo $0 "$@"

# Caminhos de exemplo.
IMAGE_PATH="/home/user/secure_container.img"
MAPPER_NAME="secure_container"
MOUNT_POINT="/mnt/secure_container"

# Abre o contêiner.
cryptsetup open "$IMAGE_PATH" "$MAPPER_NAME" || {
    echo "Falha ao abrir o contêiner."
    exit 1
}

# Monta o contêiner.
mount "/dev/mapper/$MAPPER_NAME" "$MOUNT_POINT" || {
    echo "Falha ao montar o contêiner."
    cryptsetup close "$MAPPER_NAME"
    exit 1
}

echo "Contêiner montado em: $MOUNT_POINT"
exit 0

Script de desmontagem (umount_secure_container.sh)

#!/bin/sh

[ "root" != "$USER" ] && exec sudo $0 "$@"

IMAGE_PATH="/home/user/secure_container.img"
MAPPER_NAME="secure_container"
MOUNT_POINT="/mnt/secure_container"

# Desmonta o contêiner.
umount "$MOUNT_POINT" || {
    echo "Falha ao desmontar. Verifique se algum arquivo ainda está em uso."
    exit 1
}

# Fecha o contêiner.
cryptsetup close "$MAPPER_NAME" || {
    echo "Falha ao fechar o contêiner LUKS."
    exit 1
}

echo "Contêiner desmontado e fechado."
exit 0

Script para desligar (off)

Crie um script chamado off para garantir que o contêiner seja desmontado antes de desligar:

#!/bin/sh

[ "root" != "$USER" ] && exec sudo $0 "$@"

sync
/home/user/bin/umount_encrypted.sh
poweroff

Em seguida, configure o sudo para não pedir senha ao executar esses scripts:

sudo visudo

Adicione as linhas:

user ALL=(ALL) NOPASSWD: /home/user/bin/mount_encrypted.sh
user ALL=(ALL) NOPASSWD: /home/user/bin/umount_encrypted.sh
user ALL=(ALL) NOPASSWD: /home/user/bin/off

Lembre de substituir user nos scripts pelo seu nome de usuário.

Conclusão

Esse método mantém dados sensíveis seguros e acessíveis apenas quando necessário. O contêiner criptografado simplifica backups e facilita a transferência para outro computador. Assim, você combina segurança e praticidade no seu sistema.

Cesar Gimenes

Última modificação