Quero ter uma criptografia completa do sistema no meu laptop. Mas tenho dois usuários, um para casa e outro para trabalho e quero uma criptografia separada para ambos. Claro que eu poderia fazer uma criptografia completa do disco com dm-crypt e usar uma segunda camada de criptografia com ecryptfs para criptografar os diretórios iniciais. No entanto, isso parece não ser uma boa ideia por razões de desempenho. Então, como posso configurar um sistema tal que:
- todo o disco rígido é criptografado
- quando o usuário 1 está logado e o usuário 2 não, os dados do usuário 2 são criptografados para o usuário 1 e vice-versa
- Eu preciso digitar uma senha na inicialização que descriptografa o sistema (como em uma configuração normal de LVM/dm-crypt) e apenas uma segunda que efetua login no usuário x e descriptografa sua partição
- o desempenho é semelhante a uma simples criptografia completa de disco
- a solução deve funcionar em conjunto com um SSD, ou seja, deve suportar TRIM
Eu quero usar o Ubuntu como uma distro para isso, se isso for importante.
Responder1
Não criptografe todo o disco rígido (como em
/dev/sda
, faça isso por partição (ou mais precisamente por sistema de arquivos - veja abaixo).Tenha sistemas de arquivos separados montados nas residências para os dois usuários. Estou evitando intencionalmente escrever partições separadas, pois embora essa seja a maneira usual de fazer as coisas, é restritiva em alguns aspectos. Pode ser mais conveniente ter uma partição inicial grande, que contenha arquivos grandes que contenham os sistemas de arquivos criptografados e sejam montados conforme necessário. A vantagem é o redimensionamento mais fácil das casas dos usuários, mantendo-as separadas.
Montagens automáticas no login são possíveis através do PAM. Observe que você não deseja usar a mesma senha para login e para o login real.criptografia de dados. Em vez disso, você usa o LUKS ou o imita, armazenando a chave de criptografia em um arquivo que é criptografado com a senha de login. Isso garante que uma alteração na senha de login não afetará os dados criptografados, mas apenas a chave criptografada e, portanto, você não terá que se preocupar em criptografar novamente os usuários inteiros.
Instruções gerais:
uso de particionamento
gdisk
(também conhecido comogptfdisk
às vezes)parted
ou qualquer outro programa apropriado, leia as páginas de manual para obter detalhes (o particionamento está um pouco fora do escopo deste controle de qualidade)sistemas de arquivos baseados em arquivos criptografados - tenho algumas objeções ao design do LUKS, então geralmente estou usando
cryptsetup
o modo "simples", que imita o LUKS em alguns aspectos. Se você escolher LUKS, poderá simplesmente reduzir as etapas paracryptsetup
(com opções apropriadamente modificadas)prepare a chave de criptografia e a senha. Esta é uma parte interessante - para criptografar os dados você quer algo com aleatoriedade suficiente (uma senha de 8 letras realmente não é suficiente) e para a senha algo que você possa alterar facilmente (sem precisar criptografar novamente todo o sistema de arquivos) e que seja razoavelmente fácil para lembrar e digitar. Esses requisitos vão um contra o outro. Portanto, usaremos o mesmo truque que o LUKS faz (e que na verdade pode ser considerado uma variação de umcriptossistema híbridoem algum sentido)). OChave de encriptaçãopode ser mais ou menos aleatório - use alguns dados realmente aleatórios (por exemplo, de
/dev/random
) ou um hash razoavelmente longo como SHA-2 ou SHA-3 (o primeiro foi projetado pela NSA, se você estiver em dúvida se deve usá-lo ou não em luz dos acontecimentos recentes) de uma senha razoavelmente longa.Razoavelmente longo no primeiro caso (e no caso de dados realmente aleatórios) significa que o comprimento deve ser aproximadamente o comprimento da chave escolhida para a cifra usadamaiso comprimento dovetor de inicialização. No segundo caso, significa que deveria ser difícilforça brutaisto. Usar um hash tem a vantagem de poder recuperar a chave se ela for danificada ou perdida (desde que você se lembre da senha inicial que foi criptografada, é claro). Essa chave é então criptografada e armazenada em um arquivo. A senha da chave criptografada no seu caso será a mesma da senha de login.
# set up the encrypted encryption key printf "Reasonably long and complicated passphrase" \ | openssl dgst -sha512 -binary \ | openssl enc -bf > /path/to/key.enc
openssl dgst -sha512 -binary
produz a forma binária do hash SHA-512 a partir de sua entrada padrão,openssl enc -bf
criptografa-o usandoBaiacu- sinta-se à vontade para escolher hash e cifra de acordo com sua preferência (Twofish ou Rijndael são ambos bastante testados, mas outras cifras disponíveis no kernel também devem servir).Manter a chave fora do dispositivo criptografado tem a desvantagem de precisar de algo adicional além dos próprios dados criptografados - o LUKS armazena a chave em seus cabeçalhos, portanto, é independente. Por outro lado, você está vinculado a um conjunto específico de ferramentas. Embora não tenha sido projetado descuidadamente e esteja presente na maioria das instalações, vocêprecisaras ferramentas especiais para acessá-lo.
Por outro lado, com um arquivo separado, você pode escolher qualquer método de armazenamento da chave. Você pode até colocá-lo em uma mídia removível, inseri-lo antes do login e removê-lo assim que o sistema de arquivos estiver montado (provavelmente você poderia até conectar o login automático no caso de anexar a mídia ao computador). Claro que tudo isto deve ser bem pensado já que a máxima de segurança“Não invente sua própria criptografia”se aplica (ver, por exemploesta postagem no Security SE) - o que pode realmente ser um argumento para usar o LUKS. Fazer backup da chave é obviamente fácil.
crie um arquivo vazio que conterá o sistema de arquivos
dd if=/dev/zero of=/path/to/backing_file.enc bs=1M count=X
crie o dispositivo criptografado
openssl enc -bf -d -in /path/to/key.enc 2>/dev/null \ | cryptsetup create \ -c twofish-cbc-essiv:sha256 \ -s 256 \ -h plain \ encryptedfs /path/to/backing_file.enc
openssl enc -bf -d
pede senha no stdin e tenta descriptografar a chave de criptografia.cryptsetup create ... encryptedfs /path/to/backing_file.enc
criou um dispositivo DM criptografado chamadoencryptedfs
com suporte do arquivo criado anteriormente. Opção importante que-c
seleciona a cifra de criptografiaeseu modo de operaçãopreencha o dispositivo com zeros - isso efetivamente coloca "lixo aleatório" no arquivo de apoio e torna menos óbvio qual pode ser o conteúdo do arquivo (caso contrário, você poderia dizer onde as coisas foram escritas procurando por blocos que não estão zerados da etapa 2).
dd if=/dev/zero of=/dev/mapper/encryptedfs bs=1M
Crie um sistema de arquivos
mkfs.[favourite_filesystem] [tuning options] /dev/mapper/encryptedfs
Coloque uma linha correspondente
/etc/fstab
caso queira fazer tudo sozinho ou em/etc/crypttab
se você deseja algum tipo de integração com ferramentas do sistema.
para (des)montagem automática no login/logout, vou encaminhá-lo para odocumentação pam_mount.
Responder2
Posso pensar em duas maneiras valiosas de obter esse sistema sem criptografar sua casa duas vezes.
- partição inicial separada:crie uma partição separada que seja montada em
/home
. Cada usuário então criptografa sua casa viaencfs
. - partição inicial separada para cada usuário:cada usuário obtém uma partição separada para sua casa, que é criptografada usando
dm-crypt
. Esta partição é montada/home/user
quando ele faz login.
Claro, além da criptografia de /
;-)
Em ambos os casos as casas podem ser montadas automaticamente durante o processo de login se você usar a mesma senha para login e criptografia. (pode ser configurado, por exemplo /etc/security/pam_mount.conf.xml
, há muitos tutoriais) Embora o primeiro método não criptografe os nomes das pastas de seus usuários, usando o segundo método realmente tudo é criptografado. Então eu prefiro (e realmente uso) o método dois ;-)