This is Gentoo's testing wiki. It is a non-operational environment and its textual content is outdated.
Please visit our production wiki at https://wiki.gentoo.org
Dm-crypt
dm-crypt É um sistema de criptografia de disco usando a estrutura de criptografia de kernels e device mapper como subsistema. Com o dm-crypt, os administradores podem criptografar discos inteiros, volumes lógicos, partições, mas também arquivos únicos.
O subsistema dm-crypt suporta o Linux Unified Key Setup (LUKS) estrutura, que permite várias chaves acessar os dados criptografados, bem como manipular as chaves (como alterar as chaves, adicionando frases adicionais, etc.) Embora dm-crypt suporte configurações não-LUKS também, este artigo irá focar a funcionalidade LUKS, principalmente devido à sua flexibilidade, capacidade de gestão, bem como amplo apoio na comunidade.
Configuração
Existem dois pré-requisitos antes que se possa começar a usar dm-crypt:
- Configuração do Kernel do Linux
- Instalação do pacote sys-fs/cryptsetup
Configuração do Kernel
Para usar dm-crypt há um número de entradas de configuração que são necessárias.
Em primeiro lugar, o suporte à infra-estrutura device mapper, bem como crypt target deve ser incluído:
[*] Enable loadable module support Device Drivers ---> [*] Multiple devices driver support (RAID and LVM) ---> <*> Device mapper support <*> Crypt target support
Em seguida, o kernel do Linux precisa suportar o conjunto de APIs criptográficas que o administrador deseja usar para criptografia. Estes podem ser: Cryptographic API
[*] Cryptographic API ---> <*> XTS support <*> SHA224 and SHA256 digest algorithm <*> AES cipher algorithms <*> AES cipher algorithms (x86_64) <*> User-space interface for symmetric key cipher algorithms
Se o sistema de arquivos root também será criptografado, será necessário criar um sistema de arquivos ram inicial no qual o sistema de arquivos root será descriptografado antes de ser montado. Assim, isso também requer suporte a initramfs:
General setup ---> [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
Instalação do Cryptsetup
O pacote sys-fs/cryptsetup fornece o comando cryptsetup, que é usado para abrir ou fechar o armazenamento criptografado, bem como gerenciar as senhas ou chaves associadas a ele.
root #
emerge --ask sys-fs/cryptsetup
Armazenamento Criptografado
Arquivo chave ou Frase de Acesso
Para começar com o armazenamento criptografado, o administrador precisará decidir qual método usar para a chave de criptografia. Com cryptsetup a escolha é uma frase de acesso ou um arquivo chave. No caso de um arquivo chave, este pode ser qualquer arquivo, mas recomenda-se usar um arquivo com dados aleatórios que esteja devidamente protegido (considerando que o acesso a este arquivo de chave significará acesso aos dados criptografados).
Para criar o arquivo chave, utilize o comando: dd
root #
dd if=/dev/urandom of=/etc/keys/enc.key bs=1 count=4096
Nas próximas seções, mostraremos todos os comandos para ambas as situações - frase de acesso e arquivo chave. É claro que apenas um método é necessário.
Criando uma plataforma de armazenamento criptografada
Para criar uma plataforma de armazenamento criptografada (que pode ser um disco, partição, arquivo, ...) use o comando cryptsetup com o luksFormat
.
Por exemplo, ter /dev/vdb2 como o meio de armazenamento para os dados criptografados:
root #
cryptsetup -s 512 luksFormat /dev/vdb2
This will overwrite data on /dev/vdb2 irrevocably. Are you sure? (Type uppercase yes): YES Enter LUKS passphrase: ... Verify passphrase: ...
Para usar um arquivo de chaves em vez de uma frase secreta:
root #
cryptsetup -s 512 luksFormat /dev/vdb2 /etc/keys/enc.key
This will overwrite data on /dev/vdb2 irrevocably. Are you sure? (Type uppercase yes): YES
O -s 512
diz cryptsetup Qual keylength usar para a chave de criptografia real (ao contrário da frase secreta ou arquivo chave, que são usados para acessar essa chave de criptografia real).
Abrindo o armazenamento criptografado
A fim de abrir o armazenamento criptografado (isto é, tornar os dados reais acessíveis através de decodificação transparente), utilize luksOpen
.
root #
cryptsetup luksOpen /dev/vdb2 myname
Enter passphrase for /dev/vdb2: ...
Se um arquivo chave for usado, então o comando ficará assim:
root #
cryptsetup luksOpen -d /etc/keys/enc.key /dev/vdb2 myname
Quando o comando termina com êxito, um novo arquivo de dispositivo chamado /dev/mapper/myname será disponibilizado.
Se esta é a primeira vez que este dispositivo criptografado é usado, ele precisa ser formatado. O exemplo a seguir utiliza o sistema de arquivos Btrfs Mas é claro que qualquer outro sistema de arquivos fará:
root #
mkfs.btrfs /dev/mapper/myname
Uma vez que o sistema de arquivos é formatado ou a formatação já foi feita no passado, o arquivo do dispositivo pode ser montado no sistema:
root #
mount /dev/mapper/myname /home
Fechando o armazenamento criptografado
Para fechar o armazenamento criptografado (ou seja, garantir que os dados reais não são mais acessíveis através da decodificação transparente) utilize: luksClose
root #
cryptsetup luksClose myname
Claro, certifique-se de que o dispositivo não está mais em uso.
Manipulando chaves LUKS
As chaves LUKS são usadas para acessar a chave de criptografia real. Elas são armazenados em slots no cabeçalho da partição, disco ou arquivo (criptografado).
Listando os slots
Com o luksDump
, informações sobre a partição, disco ou arquivos criptografados podem ser mostrados. Isso inclui os slots:
root #
cryptsetup luksDump /dev/vdb2
LUKS header information for /dev/vdb2 Version: 1 Cipher name: aes Cipher mode: xts-plain64 Hash spec: sha1 Payload offset: 4096 MK bits: 512 MK digest: 34 3b ec ac 10 af 19 e7 e2 d4 c8 90 eb a8 da 3c e4 4f 2e ce MK salt: ff 7c 7f 53 db 53 48 02 a4 32 dc e0 22 fc a3 51 06 ba b3 48 b3 28 13 a8 7a 68 43 d6 46 79 14 fe MK iterations: 59375 UUID: 2921a7c9-7ccb-4300-92f4-38160804e08c Key Slot 0: ENABLED Iterations: 241053 Salt: 90 0f 0f db cf 66 ea a9 6c 7c 0c 0d b0 28 05 2f 8a 5c 14 54 98 62 1a 29 f3 08 25 0c ec c2 b1 68 Key material offset: 8 AF stripes: 4000 Key Slot 1: ENABLED Iterations: 273211 Salt: 01 4c 26 ed ff 18 75 31 b9 89 5d a6 e0 b5 f4 14 48 d0 23 47 a9 85 78 fb 76 c4 a9 d0 cd 63 fb d7 Key material offset: 512 AF stripes: 4000 Key Slot 2: DISABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
No exemplo acima, são utilizados dois slots. Observe que luksDump
não dá nada sensível - é apenas exibido o conteúdo do cabeçalho LUKS. Nenhuma chave de criptografia tem que ser fornecida para chamar luksDump
.
Adicionando arquivo chave ou frase secreta
Para adicionar um arquivo chave ou frase secreta para acessar o armazenamento criptografado, utilize: luksAddKey
root #
cryptsetup luksAddKey /dev/vdb2
Enter any passphrase: (Enter a valid, previously used passphrase to unlock the key) Enter new passphrase for key slot: ... Verify passphrase: ...
Para usar um arquivo chave para desbloquear a chave (mas ainda adicionar uma frase secreta):
root #
cryptsetup luksAddKey -d /etc/keys/enc.key /dev/vdb2
Enter new passphrase for key slot: ... Verify passphrase: '''
Um arquivo chave deve ser adicionado em (/etc/keys/backup.key):
root #
cryptsetup luksAddKey /dev/vdb2 /etc/keys/backup.key
Ou, para usar o primeiro arquivo chave para destravar a chave principal:
root #
cryptsetup luksAddKey -d /etc/keys/enc.key /dev/vdb2 /etc/keys/backup.key
Remvoendo arquivo chave ou frase secreta
Com o luksRemoveKey
, um arquivo chave ou frase secreta pode ser removido (para que eles não possam mais serem usados para descriptografar o armazenamento):
root #
cryptsetup luksRemoveKey /dev/vdb2
Enter LUKS passphrase to be deleted: ...
Ou remova o arquivo chave:
root #
cryptsetup luksRemoveKey -d /etc/keys/backup.key /dev/vdb2
Certifique-se de que pelo menos um método para acessar os dados ainda esteja disponível. Uma vez que uma frase secreta ou arquivo chave é removido, não poderá ser recuperado novamente.
Esvaziando o slot
Suponha que a frase secreta ou arquivo chave não é mais conhecido, então o slot pode ser liberado. Naturalmente, isso requer conhecimento prévio de qual slot que a frase secreta ou arquivo chave foi armazenado.
Por exemplo, para esvaziar o slot 2 (que é o terceiro slot, pois os slots são numerados a partir do 0):
root #
cryptsetup luksKillSlot /dev/vdb2 2
Este comando pedirá uma frase de acesso válida antes de continuar. Ou pode-se utilizar o arquivo chave:
root #
cryptsetup luksKillSlot -d /etc/keys/enc.key /dev/vdb2 2
Automate mounting encrypted file systems
Until now, the article focused on manual setup and mounting/unmounting of encrypted file systems. An init service dmcrypt exists which automates the decrypting and mounting of encrypted file systems.
Configuring dm-crypt
Edit the /etc/conf.d/dmcrypt file and add in entries for each file system. The supported entries are well documented in the file, the below example is just that - an example:
/etc/conf.d/dmcrypt
Automatically enabling two encrypted file systems# Definition for /dev/mapper/home (for /home) target=home source=UUID="abcdef12-321a-a324-a88c-cac412befd98" key=/etc/keys/home.key # Definition for /dev/mapper/local (for /usr/local) target=local source=UUID="fedcba34-4823-b423-a94c-cadbefda2943" key=/etc/keys/local.key
Configuring fstab
The next step is to configure /etc/fstab to automatically mount the (decrypted) file systems when they become available. It is recommended to first obtain the UUID of the decrypted (mounted) file system:
root #
blkid /dev/mapper/home
/dev/mapper/home: UUID="4321421a-4321-a6c9-de52-ba6421efab76" TYPE="ext4"
Then, update the /etc/fstab file accordingly:
/etc/fstab
Automounting the decrypted file systemsUUID="4321421a-4321-a6c9-de52-ba6421efab76" /home ext4 defaults 0 0 UUID="bdef2432-3bd1-4ab4-523d-badcf234a342" /usr/local ext4 defaults 0 0
Add initscript to bootlevel
Don't forget to have the dmcrypt init service launched at boot:
root #
rc-update add dmcrypt boot
Recursos adicionais
- Dm-crypt full disk encryption A Gentoo Wiki fornece informações suplementares sobre o uso de sistemas de arquivos criptografados para instalações do Gentoo Linux
- The cryptsetup FAQ Hospedado no GitLab abrange uma ampla gama de perguntas frequentes.