Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Criando um repositório criptografado de dados com Cryptsetup (dm-crypt) sem (re)particionamento do

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    Tutorial Criando um repositório criptografado de dados com Cryptsetup (dm-crypt) sem (re)particionamento do

    Aprenda a criar um repositório criptografado para arquivos e diretórios sem a necessidade de (re)particionar o disco rígido.

    Introdução
    Muitas vezes necessitamos de um local seguro em nosso disco rígido para armazenar informações confidenciais. Uma excelente opção para isto é o pacote cryptsetup, que permite criar um volume criptografado, baseado em um dispositivo de blocos e acessível somente através de uma senha.

    Ocorre que muitas vezes não possuímos uma partição livre no HD para fazer isto, e o processo de redimensionar uma partição para tal finalidade não é algo trivial e isento de riscos.

    Uma boa solução para isto é criar um arquivo vazio em um sistema de arquivos já existente e utilizá-lo como um dispositivo de blocos, o que pode ser feito através do programa losetup

    O losetup associa um arquivo comum a um dispositivo de "loop", passando então a ser visto pelo sistema operacional como um dispositivo de blocos, podendo ser criptografado, formatado, montado e utilizado para armazenar seus dados confidenciais.

    Você poderá então copiar para ele seus arquivos e diretórios contendo informações sigilosas e, após o uso, desmontá-lo e "fechá-lo", tornando-o inacessível a terceiros que não possuem a senha. Essa abordagem é especialmente interessante para uso em dispositivos móveis tais como notebooks e mídias removíveis, que mesmo em caso de roubo estarão protegidas contra a violação das informações confidenciais.

    Mas lembre-se: nenhum dispositivo de segurança é perfeito, portanto lembre-se de manter sempre um backup atualizado de seus dados mais importantes em local seguro e acessível por você.

    Atenção: As informações deste artigo não foram testadas em ambiente "de produção", e somente em caráter experimental; não nos responsabilizamos por quaisquer danos ou perdas de qualquer natureza que possam advir da utilização destas informações, bem como de sua implementação prática, a qualquer título; os direitos sobre as marcas e programas porventura aqui mencionados pertencem a seus detentores legais, bem como quaisquer responsabilidades legais que porventura houverem em relação à sua utilização.

    Sugerimos fortemente a implementação dos procedimentos aqui descritos em caráter experimental, ficando sua posterior utilização para outras finalidades a exclusivo critério e responsabilidade dos leitores ou de quem quer que venha a utilizar estas informações.

    Provendo os suportes no kernel
    Em primeiro lugar é necessário prover os devidos suportes no kernel:

    * Suporte a dispositivo de loop (sugiro NÃO habilitar a subopção "cryptoloop");
    * Suporte ao device mapper (subopção do item "RAID e LVM");
    * Suporte a criptografia AES (subopção do item "CRYPTOGRAPHIC OPTIONS").


    Apesar dessas opções pelo visto estarem habilitadas por padrão no kernel 2.6, é conveniente verificar e habilitá-las se for preciso.

    Repare que a subopção "cryptoloop" do item "Loopback device support" não tem nada a ver com o "dm-crypt", que utilizaremos através do cryptsetup, e talvez seja conveniente não habilitá-la para evitar problemas; uma vez que, pelo menos até o Kernel 2.6.21, ela tinha problemas com sistemas de arquivo com "Journaling" (ext3, raiserfs) e talvez cause algum tipo de conflito ou incompatibilidade com o "dm-crypt".

    Então verifique se os seguintes itens na árvore de compilação de seu Kernel estão como abaixo (make menuconfig):
    Device drivers --->

    Block devices --->
    <*> Loopback device support
    < > Cryptoloop Support ===> (DESABILITAR)

    Multi-device support (RAID and LVM) --->[*] Multiple devices driver support (RAID and LVM)
    <*> Device mapper support
    <*> Crypt target support

    Cryptographic options --->
    --- Cryptographic API
    --- Cryptographic algorithm manager
    --- CBC support
    <*> AES cipher algorithms
    <*> AES cipher algorithms (i586)
    Se for necessário, recompile o kernel e reinstale-o com as opções acima como estão. Para maiores informações sobre como recompilar o kernel, consulte a documentação de sua distribuição ou disponível em outras fontes sobre o assunto.

    Provendo outros pré-requisitos
    Uma vez providos os devidos suportes no kernel, instale os seguintes pacotes, se já não estiverem instalados em sua distribuição:

    * util-linux - normalmente provê o programa "losetup";
    * cryptsetup.


    Observação importante:

    Se você desejar, poderá criar o volume criptografado em uma partição comum, como por exemplo /dev/hda5; se for o seu caso, você não precisará criar o arquivo vazio abaixo mencionado, nem utilizar o programa "losetup" para associá-lo e desassociá-lo; neste caso, vá direto para a próxima página, ignore tudo o que for dito em relação ao programa "losetup" e substitua o dispositivo de blocos aqui mencionado como /dev/loop1 pelo nome do dispositivo de blocos "real" a ser utilizado, por exemplo, /dev/hda5.

    MAS ATENÇÃO: Lembre-se de que a partição que você deseja utilizar para esta finalidade deverá estar disponível para uso (SEM DADOS A SEREM PRESERVADOS), pois o processo DESTRUIRÁ TODO E QUALQUER DADO PREVIAMENTE EXISTENTE NA PARTIÇÃO. Para maiores informações consulte a documentação do "cryptsetup" disponível em seu sistema e na Internet.

    Normalmente estes programas não necessitam de nenhuma configuração especial, entretanto em caso de dúvidas, consulte os manuais de sua distribuição.

    A seguir, crie um arquivo vazio do tamanho necessário para armazenar seus arquivos confidenciais, o que poderá ser feito através do seguinte comando, por exemplo:

    # dd if=/dev/zero of=/tmp/teste bs=1k count=1024k

    No exemplo acima será criado um arquivo de nome "teste" no diretório "/tmp" com tamanho de 1GB.

    Para maiores informações sobre o comando dd consulte sua página "man".

    Associe o arquivo vazio criado a um dispositivo de "loop" da seguinte forma:

    # losetup /dev/loop1 /tmp/teste

    No caso utilizamos o dispositivo /dev/loop1, pois o loop0 normalmente é utilizado para a montagem do cdrom e outras mídias, mas poderia ser utilizado qualquer dispositivo de loop disponível; para saber qual o primeiro dispositivo de loop disponível, utilize o seguinte comando:

    # losetup -f

    Mas, como dissemos, é conveniente EVITAR utilizar o /dev/loop0, pois normalmente é utilizado para a montagem de mídias contendo imagens ISO (cdrom etc).

    Finalizada esta etapa, poderemos então prosseguir.

    Criando o volume criptografado
    Uma vez que agora possuímos um dispositivo de blocos pronto para ser usado, crie o volume criptografado através do seguinte comando:

    # cryptsetup --verbose --verify-passphrase luksFormat /dev/loop1

    O comando acima criará um volume criptografado baseado no dispositivo de blocos /dev/loop1 (que por sua vez está associado ao arquivo vazio /tmp/teste); se tudo der certo o programa apresentará na tela as seguintes mensagens:
    WARNING!
    ========
    This will overwrite data on /dev/loop1 irrevocably.

    Are you sure? (Type uppercase yes): YES
    Enter LUKS passphrase:
    Verify passphrase:
    Command successful.
    Observe que:

    * Em primeiro lugar o programa avisa que todos os dados em /dev/loop1 serão irrevogavelmente sobrescritos;
    * A seguir o programa solicita sua confirmação, em letras maiúsculas, através da palavra "YES";
    * Uma vez que utilizamos a opção --verify-passphrase, o programa solicita-nos a seguir a confirmação da senha digitada, que NÃO é ecoada (não aparece) na tela. Procure utilizar uma senha aleatória, sem palavras conhecidas, que possua letras e números e no mínimo 8 caracteres;
    * ATENÇÃO: lembre-se de guardar a senha em um local seguro (preferencialmente que não seja no mesmo micro ou junto ao mesmo ! ) e do qual você se lembre, pois se esquecer-se da senha e não conseguir recuperá-la, você muito provavelmente NÃO terá mais acesso aos seus dados;
    * Sugerimos fortemente que você mantenha uma cópia atualizada de seus dados, a serem transferidos ou criados no volume criptografado, na forma de um "backup" em uma outra mídia (outro HD, cd-r(w), dvd-r(w), pen-drive etc.); a mesma deverá ser armazenada em local seguro e acessível por você, para o caso de você perder ou esquecer-se da senha, corrupção do sistema de arquivos ou falha do dispositivo.


    Um bom programa para gerar senhas é o "mkpasswd"; utilize-o, se desejar, como por exemplo:

    # mkpasswd -l 12 -d 5 -c 7 -C 0 -s 0

    O comando acima gerará uma senha similar à seguinte:

    6q2w17zch4sf

    Trata-se de uma senha de 12 caracteres, sendo composta por 5 números, 7 caracteres minúsculos, nenhum caractere maiúsculo e nenhum caractere especial. Para maiores informações, ou gerar senhas de características diferentes, consulte a página man do "mkpasswd".

    Podemos agora passar à próxima etapa.

    Formatando o volume criptografado
    Agora que possuímos um volume criptografado, vamos prepará-lo para a utilização. Para tanto, é preciso primeiramente acessar o dispositivo:

    # cryptsetup luksOpen /dev/loop1 teste
    Enter LUKS passphrase:
    key slot 0 unlocked.
    Command successful.

    Como observamos, o comando acima abriu o volume criptografado /dev/loop1 (que, como já dissemos, trata-se na verdade do arquivo associado /tmp/teste), com o nome "teste" (este último também pode ser qualquer nome que você desejar); ao fornecermos a senha após a frase " Enter LUKS passphrase: " (que mais uma vez lembramos NÃO será ecoada, exibida na tela), a mensagem "Command successful" indica que o volume criptografado está agora acessível.

    Ele estará acessível em /dev/mapper/teste; mas não confunda este "dispositivo virtual" "teste" com o arquivo "teste", que está associado ao dispositivo loop1, e que é a base "real", "física" de tudo, criado anteriormente no diretório /tmp, e que é de fato o verdadeiro volume criptografado. Mas para as operações com o programa "cryptsetup" você sempre utilizará o dispositivo aberto sob o diretório /dev/mapper (no exemplo acima /dev/mapper/teste).

    Agora que temos acesso ao dispositivo, podemos formatá-lo normalmente, como por exemplo:

    # mke2fs -b 1024 -m1 -j /dev/mapper/teste

    Isto criará um sistema de arquivos ext3 com blocos de 1024 bytes e apenas 1% de espaço reservado ao root (para economizar espaço) no dispositivo.

    Finalmente, podemos montar o sistema de arquivos criado sobre o volume criptografado:

    # mkdir /mnt/teste
    # mount -t ext3 -o defaults /dev/mapper/teste /mnt/teste

    Para torná-lo acessível através de sua partição /home, faça o seguinte (assumindo que você realizou todo o procedimento acima como root e que o seu usuário "comum" é "usuário", seu grupo é "grupo" e seu /home é "/home/usuário"), ajuste as permissões e crie um "link" simbólico, como por exemplo:

    # chown -R usuário.grupo /mnt/teste
    # ln -s /mnt/teste /home/usuário/teste

    Agora você poderá copiar para o volume criptografado os seus arquivos e/ou diretórios confidenciais utilizando "cp" ou o "rsync" normalmente, como faria com um diretório "comum".

    Finalizando
    Quando desejar proteger seus dados, você deverá desmontar, "fechar" e desassociar do dispositivo de "loop" o volume criptografado, como por exemplo:

    # umount /mnt/teste
    # cryptsetup luksClose /dev/mapper/teste
    # losetup -d /dev/loop1


    Apesar de não ser pelo visto estritamente necessário, talvez seja conveniente, para assegurar que seus dados confidenciais não fiquem expostos, você criar um "script" para esta finalidade, a ser executado quando você se ausentar de sua máquina e/ou quando desligar o sistema operacional.

    Finalmente, nunca é demais lembrar:

    * Mantenha sempre uma cópia ("backup") atualizada de seus dados confidenciais, em um local seguro e acessível por você, para o caso de o volume criptografado falhar, for corrompido ou você perder ou esquecer-se da senha;
    * Crie uma senha "forte", com letras e números aleatórios e pelo menos 8 caracteres; NÃO guarde a senha em um arquivo no micro, nem junto ao mesmo, pois em caso de roubo ela poderá ser utilizada para acesso indevido e não autorizado a seus dados confidenciais;
    * Lembre-se que não é só o ser humano quem falha, a máquina falha também; portanto, não confie totalmente em nenhum dispositivo de segurança; um bom nível de segurança é obtido através de um CONJUNTO de hábitos, procedimentos e técnicas que, se adotados simultaneamente, visam dificultar ao máximo a violação e o acesso indevido e não autorizado aos dados; entretanto, impedir completamente tais ações invasivas é praticamente impossível, já que o conhecimento técnico atualmente é altamente disseminado, e como sabemos, ele pode ser utilizado tanto para o bem como para o mal;
    * Assim como você leu este artigo e esperamos que seja-lhe útil, esperamos também que você corresponda ao esforço e tempo empregados em disponibilizar-lhe tal conhecimento; colaborando e contribuindo de sua parte, com a disseminação voluntária, não onerosa e criteriosa de conhecimentos, que possam ser úteis à comunidade que utiliza Software Livre, pois esta é a base mais importante de seu desenvolvimento.


    Muito Obrigado. Ate a Proxima . (Y)
    Creditos: Stefan Fontz
X
Working...
X