Kubuntu / Ubuntu: Instalando encriptado com chave de 128 bits

Kubuntu / Ubuntu: Instalando / atualizando partição estendida de HD encriptada com chave de 128 bits

Deparei-me com a seguinte situação: notebook com partição Windows (exigida pela equipe de TI do trabalho), partição estendida, onde fora instalado Kubuntu usando a pŕopria opção de encriptação do CD Kubuntu Alternate (que existia na época), ou seja, LUKS-Crypt AES 256 bits contendo as partições do sistema, home com dados e swap... e querendo dar um upgrade para um HD maior e mais rápido.

Bem, para trabalhar o notebook velho está muito bom. O único gargalo era o HD. Como o Core2Duo não possui instruções AES-NI, a encriptação onerava significativamente o desmpenho.

Por outro lado, existem algumas regras FUNDAMENTAIS sobre encriptação que têm que ser seguidas, entre elas, SEMPRE encriptar, além dos seus dados, a partição SWAP, ou os resíduos nela encontrados podem compromenter totalmente a segurança. Desse modo, usando o instalador do Kubuntu Alternate, eu havia optado por encriptar toda a partição estendida, nela criando um LVM com partições do sistema (root), swap e dados.

Além disso, uso muito máquinas virtuais e estas sofriam especialmente com a configuração.

Bom a escolha do HD maior foi fundamental. Foi feita a opção por um SSHD (Solid State Hybrid Drive), tentando obter o melhor dos dois mundos: o espaço do HD mecânico e a velocidade de leitura do SSD. Além disso, pensando um pouco, os dados e o swap precisam ficar encriptados, mas aparentemente, a partição de sistema, não... Como todos os programas ficam aí, o ganho de velocidade seria significativo...

Aproveitando, o Kubuntu 13.04 acabara de sair... mas seu instalador não permitiria fazer as alterações necessárias... Não tinha jeito, senão pesquisar, estudar e solucionar. Além de tudo, eu queria baixar a chave de 256 para 128 bits, pois haveria ganhos signficativos de velocidade.

O AES foi criado por razões históricas da segurança militar dos EUA. Eles tinham por regra, ter 3 níveis de encriptação, um rápido, um médio e um mais seguro, dependendo da classificação de segurança da informação. Bem, criaram AES 128 que é quase um exagero de seguro. Provavelmente ainda levarão décadas para poder decriptar AES 128 em tempo prático. Lembrando que a Lei de Moore pode estar chegando ao limite com o fim da miniaturização fácil (os transístores já têm poucas dezenas de átomos de largura...). Com base neste já totalmente seguro, criaram os dois "exageros" que são AES 192 e AES 256.

Posso estar falando besteira, pois não sou especialista na área, mas é o resultado de alguma pesquisa.

Além disso, há uma falha que afeta o AES 256 e o torna um pouco menos seguro, o que diminui a sua diferença em relação ao AES 128.

E instalar do zero?

Estou relatando como fiz o procedimento para atualizar o HD, transferindo os dados do velho para o novo, mas naturalmente, poderia ser adaptado para fazer uma instalação completamente nova. Estas informações podem ser obtidas na Internet, mas combinar tudo e com LVM num só lugar pode ajudar algumas pessoas.

ANTES DE COMEÇAR e DISCLAIMER

Não custa repetir: tudo que mexe com seu disco rígido, ou mesmo puro azar de uma pane súbita na máquina, de uma hora para a outra, um raio caindo próximo num dia de céu azul, um meteorito atravessando o telhado e caindo no computador... qualquer coisa, pode fazer você perder TUDO. Claro que você deve manter backups regularmente...

Em suma, antes de mais nada, faça DOIS BACKUPS de tudo e verifique se estão OK. Guarde-os em locais seguros, de preferência diferentes. Exagero? Talvez... Mas talvez seja melhor que os backups esteja encriptados... que lugar é 100% seguro?! Paranoia? Você é quem decide e também o responsável pelas consequências de cada decisão. Cada um é o único responsável. Este artigo tem só a pretensão de auxiliar a conseguir algo que considerei difícil e trabalhoso, mas não podemos ser responsabilizados pelas consequências das decisões de CADA UM.

O procedimento não é para o usuário iniciante, nem talvez para o mediano. Você deve estar familiarizado com encriptação, particionamento, abrir o equipamento e trocar componentes. Se não for o seu caso, nem continue. Pesquise, estude e pratique bastante estes assuntos primeiro.

É necessário tomar MUUUITO CUIDADO o tempo todo para não fazer qualquer alteração por engano no HD velho!!!! Marque com clareza, com caneta permanente o HD velho, para não cometer erros!!!!

Muitos dos passos aqui relatados são lembranças "de cabeça", pois nem tudo foi anotado, então pode haver erros.

Todo o procedimento foi feito com o Kubuntu, mas DEVE funcionar com o Ubuntu e suas variantes.

Equipamento necessário

No meu caso, usei uma docking station e sua porta USB 2.0. Idealmente use uma porta e-SATA, se disponível na docking station e no computador. Num desktop (ou em um notebook mais avançado), pode instalar provisoriamente o HD em seu interior, se possível. Também serve uma "gaveta" externa USB 2.0 que aceite seu HD novo.

A Partição Windows

Meu Windows 7 Professional está todo customizado pela equipe de TI do trabalho para acessar a intranet, fazer logon no domínio AD... Seria interessante não ter que reinstalar tudo (teria que marcar um horário e deixar a máquina com eles algum tempo), mesmo porque perde-se muito tempo reinstalando completamente um Windows... Buscar os drivers adequados, instalá-los um a um, intermináveis reincializações, vários programas e mais reinicializações... Provavelmente ainda estaria fazendo isso e não estaria escrevendo da máquina com o HD novo!

Minha solução foi simples. Com o HD novo na docking station externa, usei o próprio gparted e sua função de cópia de partição do HD antigo para o novo. Por limitações desse sistema operacional, ele deve ser a primeira partição física do disco.

Para fazer um teste, tirei o HD velho e coloquei o novo.

Surpreendentemente, ao tentar dar o boot, mesmo sem instalar o grub 2, ele começou a dar boot no Windows, mas deu uma mensagem de erro, sugerindo o uso do disco de instalação do Windows e a opção de reparo. Segui a sugestão e rapidamente ele reparou a partição no disco novo (sei lá o que ele viu de diferente, uma vez que a partição estava copiada - talvez diferença do número de identificação do HD?).

OK, grande passo dado. Windows transferido e funcionando no HD novo. Removi o HD novo e coloquei o velho de novo no notebook. O HD novo voltou pra docking station.

O Limite de 4 partições

Lá pelos idos de quando criaram o particionamento de discos, ninguém imaginava que alguém poderia usar mais de 4 partições físicas. Então criaram mais tarde a partição estendida que é um container para mais partições que são chamadas de lógicas. Minha máquina não trabalha com UEFI (talvez felizmente...)

Uma das partições físicas já está usada pelo Windows. Outra delas tem que ser a estendida (que será encriptada). Outra teria que ser a de boot do Linux (senão não poderia dar boot pelo sistema encriptado).

Inicialmente, eu havia planejado usar uma partição física de boot e uma de sistema para ganhar velocidade, mantendo-a não encriptada. Daí me lembrei que uso muito as máquinas virtuais e que elas são um dos maiores gargalos. Pensei em usar diretamente uma partição física como partição de sistema (sim, é possível) e manter os dados sempre em HDs virtuais na partição encriptada, mas significaria ficar sem o fantástico recurso dos snapshots (que permitem voltar para um instante anterior em que foi salvo o snapshot). E, de que adiantaria ter um boot mais rápido da máquina virtual se atualmente, eu abro o último estado, o que leva poucos segundos e não tivesse mais ess recurso?

Acabei optando por uma solução intermediária que foi usar uma partição física do sistema (root) que inclui o /boot e uma outra partição física que eu usaria para guardar os arquivos de minhas máquinas virtuais. Na partição estendida foi criado um LVM com partições lógicas de home com dados e swap. Falando em swap, tenha em mente que é melhor não ter que usar o swap, então, se puder, tenha RAM suficiente!

Na verdade, poderia ter mais partições não encriptadas se tivesse usado partições lógicas dentro da estendida e uma partição lógica como container de encriptação, mas acabei usando a configuração como descrito. Na verdade, a partição estendida NÃO pode ser usada diretamente como container de encriptação LUKS. É necessário primeiro criar uma partição lógica dentro da estendida para este fim.

Continuando o particionamento do disco novo

Com o Windows copiado e funcionando, usei o gparted para adicionar a partição física de root com boot, a partição física para os discos de sistema e programas das máquinas virtuais, aloquei o resto do disco para a partição estendida. Dentro dela, criei uma partição ext4 sem sistema que seria o container a encriptar que ficará no disco novo em /dev/sda5 (no docking station externo ele deve surgir com outro nome como /dev/sdb5). Lembre-se de que, se você tiver qualquer dado nesse HD, a estas alturas já estará difícil de recurperar.

Encriptando a partição estendida

Ainda com o HD novo na docking station externa, via USB, encha o container (lembre-se que o /dev/sda5 vai estar com outro nome, pois o HD velho é que provavelmente vai estar com sda: muito provavelmente o HD novo vai estar com sdb e o container vai estar em /dev/sdb5) de informações aleatórias (ajuda muito na segurança, inclusive impossibilitando um possível invasor de descobrir onde começam e terminam as coisas, com o comando (supondo sempre que o HD externo esteja reconhecido como sdb - MUITO CUIDADO PARA NÃO ERRAR DE DISCO !!!!!! ). Este comando destruirá irremediavelmente todos os dados da partição !!

dd if=/dev/urandom of=/dev/sdb5

Claro, todos estes comandos devem ser executados como root. Isto deve demorar... mas não use erandom pois é inseguro para este fim, se tiver pressa, use frandom.

Para encriptar esse recipiente em /dev/sdb5, vamos usar o cryptsetup (eu já tinha instalado, pois meu sistema já era encriptado, mas talvez você tenha que instalar o pacote).

cryptsetup -s 128 luksFormat /dev/sdb5

Para abrir o recipiente encriptado:

cryptsetup luksOpen /dev/sdb5 recipiente

O que o faz surgir em

/dev/mapper/recipiente

LVM

Criei então o LVM com

pvcreate /dev/mapper/recipiente

vgcreate MeuLVM /dev/mapper/recipiente

O wiki no final da página dizia para usar o lvcreate para "particionar" o LVM com volumes lógicos, mas eu preferi usar uma ferramenta visual. Fiz tudo com o programa KVPM. Com ele criei as partições home com dados e swap, com os respectivos sistemas de arquivos ext4 e swap.

Copiei os dados da home do HD velho para o volume lógico do home do HD novo. Isto poderia demorar... recomendo usar o comando rsync.

Então fechei o KVPM e desliguei o computador, acreditando que tomaria as devidas providências para desmontar / fechar o que tivesse que ser desmontado / fechado, sem danos.

Instalando o Kubuntu 13.04

Finalmente, abri o notebook, tirei o HD velho e coloquei o novo.

Dei boot pelo Kubuntu 13.04 64 bits, previamente gravado em um DVD-RW já com a gravação verificada pelo K3B.

Como a maioria dos problemas durante a instalação de Linux são oriundos de erros de leitura em CDs e DVDs regraváveis, teclei qualquer coisa para obter o menu inicial, quando surge a imagem com "teclado" = "ser humano". No menu, selecionei "Testar Disco", só para garantir. O teste não encontrou erros, então reiniciei. Quando ele perguntou se eu queria instalar ou testar o Kubuntu, selecionei testar.

Aguardei o (lento) boot via disco óptico e abri um terminal onde digitei (lembrando que o HD novo, que era externo sdb, agora é interno sda !!!! )

sudo su

cryptsetup luksOpen /dev/sda5 recipiente

automaticamente ele deve reconhecer o lvm MeuLVM e suas "partições" home e swap.

Cliquei no ícone "Instalar Kubuntu 13.04" e segui as instruções. Na parte referente a particionamento, selecionei manual. Cliquei na partição LVM swap e cliquei em "alterar". Informei que é partição swap (acho que ele já faria automaticamente). Informei que a partição home no LVM é ext4 e NÃO marquei formatar para preservar os dados copiados. Cliquei na partição física de sistema que vai ter root e boot. Cliquei em "alterar" e selecionei ponto de montagem "/", ext4 e marquei formatar.

Após a instalação ele pergunta se quer continuar testando ou reiniciar. Eu selecionei reiniciar (o que foi um erro) e me deparei no boot com uma mensagem dizendo que não coneguia encontrar meu home e pedia para teclar "S" para pular ou "M" para solução manual. Selecionei "M" e ele abre uma janela de prompt de comando. Se eu dava o comando cryptsetup luksOpen /dev/sda5 recipiente e dava Control+D, ele continuava o boot e tudo funcionava bem!

Para evitar este inconveniente, em vez de reinciar após a instalação, abra novamente um terminal de linha de comando como o Konsole e digite:

nano /etc/crypttab

adicione esta linha no começo do arquivo:

recipiente /dev/sda5 none luks

e dê o comando

cd /boot

update-initramfs -u

agora a mensagem de erro ainda surge, mas permite digitar a passphrase sem precisar logar como root e digitar o cryptsetup a cada boot!

Talvez seja possível eliminar a mensagem alterando as configurações do mountall, mas não me dei ao trabalho. Ufa! Agora tudo funciona como desejado no SSHD novo e os ganhos de velocidade são perceptíveis!

Referências

https://help.ubuntu.com/community/EncryptedFilesystemHowto8

https://code.google.com/p/cryptsetup/wiki/FrequentlyAskedQuestions

https://wiki.archlinux.org/index.php/Encrypted_LVM

anúncio

anúncio