Para todos interessados em montar volume protegido (não vou citar os motivos o porque alguém iria querer – isso depende de quem quer fazer) vou escrever um pequeno guia que eu segui com informações sobre o que faz cada passo.
1. Particione seu disco de modo que sobre um grande bloco de de dados sem formatação, não se esqueça de deixar um pequeno espaço de fora para a partição do /boot que não pode ficar dentro do volume. (ou você pode colocar o /boot em um pendrive ou outro lugar de sua preferência)
Exemplo de layout de disco: /dev/sda – /dev/sda1 –> /boot, /dev/sda2 –> bloco não formatado (lvm)
2. Crie um “cofre” pra botar o seu volume, mas antes randomize os dados do seu disco (isso dificulta a descoberta dos seus dados dentro do volume)
dd if=/dev/urandom of=/dev/sda2
(fazer a randomização da partição é opcional – o comando acima usa o gerador pseudo-randômico usa /dev/urandom para gerar os dados para preencher o disco)
cryptsetup -y –cipher aes-cbc-essiv:sha256 –key-size 256 luksFormat /dev/sda2
(-y faz o programa cryptsetup pedir confirmação da senha, –cipher aes-cbc-essiv:sha256 expecifica o tipo de encriptação a ser usado, –key-size 256 especifica o tamanho da matriz usada para encriptação, luksFormat é o parametro para formatar a partição e /dev/sda2 é a partição)
cryptsetup luksOpen /dev/sda2 cofre
( luksOpen abre a partição para leitura e escrita, /dev/sda2 é a partição e cofre é o nome do dispositvo a ser gerado no /dev)
3. Crie o seu volume dentro dessa partição com encriptação:
pvcreate /dev/mapper/cofre
vgcreate vol /dev/mapper/cofre
(vol é o nome do volume a ser criado)
Agora crie suas partições dentro do volume que você geralmente usa:
Exemplo: lvcreate -L TAMANHOG -n ROTULO vol
Veja as referências no final da página para mais informações.
Depois de criado o seu layout das partições dentro do volume, formate como partições normais e faça a instalação normal do Gentoo/Funtoo.
mkfs.tipo_fs /dev/mapper/vol-rotulo_da_particao
4. Antes de acabar a instalação ainda restam algumas configurações:
Você vai precisar de sys-fs/lvm2 e sys-apps/busybox compilados com a useflag “static” para poder usa-los mais tarde no seu initramfs, entretanto você não deve usar o static como useflag global – isso poderia ter efeitos catastróficos – use o arquivo /etc/portage/package.use no lugar.
package.use:
sys-fs/lvm2 static
sys-apps/busybox static
Algumas configurações extras no kernel serâo necessárias também:
Device Drivers –> Multiple device driver support (RAID and LVM) –> Device Mapper Support
–> Device Mapper Support –> Crypt target support
5. Se o seu / (root) estiver dentro do volume você irá precisar de um initramfs – se você não estiver usando ele lá pule este passo, isto está fora do escopo deste guia. O initramfs é necessário para poder montar sua partição / (root) que está no seu volume, porém para fazer isso você precisa primeiro abrir o “cofre” e é exatamente isso que a initramfs vai fazer, abrir o cofre e montar suas partições de dentro do volume nos lugares certos.
mkdir /tmp/initramfs
cd /tmp/initramfs
mkdir -p bin dev/mapper dev/vc etc newroot proc
Depois de criado a estrutura do initramfs você ira preenche-la agora com os executáveis necessários para abrir o cofre, ativar os volumes e montá-los. (ATUALIZAÇÃO: aparentemente os novos pacotes do lvm2 estão provendo binário estático e shared ao mesmo tempo, então se usar a flag static você deve copiar o arquivo /sbin/lvm.static ao invés de/sbin/lvm, eu também notei que em algumas das versões novas o binário estático anda apresentando erros, se você tiver problemas tente versões mais antigas)
cp /bin/busybox /sbin/cryptsetup /sbin/lvm bin
(de acordo com slashbeast um colega de irc (veja o comentário abaixo), o passo de criar os links é desnecessário, vou manter este código por motivo de compatibilidade (busybox sabe gerar links automaticamente, mas nem sempre funciona como deveria))
********
ln -s busybox bin/cat
ln -s busybox bin/loadkmap
ln -s busybox bin/mount
ln -s busybox bin/sh
ln -s busybox bin/switch_root
ln -s busybox bin/umount
ln -s lvm bin/vgchange
********
E agora com toda a atenção você deve popular o seu diretório dev que devera conter os dispositivos (blocos de caractéres para acessar os discos) necessários para ativar o cofre.
(Denovo, busybox já cuida disso, porém vou manter o código por motivos de compatibilidade)
********
cp -a /dev/console /dev/sda2 /dev/null dev
********
ln -s ../console dev/vc/0
Este passo é opcional, porém recomendados, seguindo o próximo passo será possível carregar um mapa de teclado para facilitar a entrada da senha no boot que vem depois de o sistema estar pronto.
mkdir /dev/vc
ln -s ../console /dev/vc/0
busybox dumpkmap > etc/kmap-custom
Agora para o initramfs funcionar será necessário um script que será rodado quando o initramfs for carregado pelo kernel:
Abra com seu editor favorito de texto, e crie o arquivo init: (vim init)
#!/bin/sh
mount -t proc proc /proc
CMDLINE=`cat /proc/cmdline`
# Espere até as saídas do kernel passarem para não cobrir o pedido de senha do cryptsetup
sleep 3
# Carregue o mapa do teclado
loadkmap < /etc/kmap-custom
# Abra o cofre
cryptsetup luksOpen /dev/sda2 cofre
# Ative seus volumes
vgchange -ay vol
# monte o root na pasta newroot – lembre do label que voce botou na particao do root
mount -r /dev/mapper/vol-root /newroot
umount /proc
# passe o root temporário para o seu lugar
exec /bin/busybox switch_root /newroot /sbin/init ${CMDLINE}
Ponha o atributo executável no seu script de init:
chmod a+x init
Gere o initramfs a partir da pasta atual:
find . | cpio –quiet -o -H newc | gzip -9 > /boot/crypto.initramfs
Está tudo pronto agora, instale o grub e o configure:
root (hdx,x)
kernel /boot/kernel
initramfs /boot/crypto.initramfs
Isso já deve ser o suficiente para poder entrar no seu Gentoo/Funtoo instalado no seu volume encriptado. Note que durante o boot será pedido a senha que você colocou no inicio deste guia, anote ela em algum lugar para não esquecer, senão você correrá riscos de perder seus dados para sempre.
Fontes:
1, 2, 3, 4, 5 e 6.
** Atualização: para aqueles que não estão conseguindo criar o seu próprio initram por causa do lvm2 ou algum outro erro, tente usar o meu que estou mantendo uma cópia aqui: link).