Por que perder tempo com encriptação e obliteração se podemos transformar o sistema todo em um cofre? O legal da encriptação do sistema de arquivos é que temos uma forma realmente boa de proteger tudo no notebook de forma prática.
O problema é que toda praticidade tem um preço. Primeiro, a encriptação de partições é feita através de um sistema parecido com o do arquivo zip, então você terá que se esforçar para criar uma senha decente. Segundo, o sistema de arquivos encriptado deverá ser montado toda vez que for utilizado. Caso você o configure para montagem automática, então adeus segurança.
Outro ponto fraco é que criar uma partição só para os arquivos secretos pode ser um tanto chato se você tiver muitas coisas. Por exemplo, cada projeto seu tem um conjunto de arquivos que devem ser privativos, então você terá duas estruturas de pastas, uma pública no sistema de arquivos normal e outra privada no sistema de arquivos encriptado. Fora que uma partição inteira encriptada dá na vista. Porém esta é uma das únicas soluções de segurança que sobrevivem a um bom chroot.
Um artigo completo no VOL explica várias possibilidades e comandos para encriptação de sistemas de arquivos. Leitura recomendada:
Implementação de um sistema de arquivos criptografado transparente ao usuário.
Uma das soluções mais criativas que ele descreve é a criação de um sistema de arquivos em um arquivo comum. Isto resulta em uma "partição móvel" que pode ser ocultada e transportada com segurança.
Assim temos um arquivo com senha que guarda tudo dentro de forma simples e que pode ser montado e desmontado sob demanda. A partição encriptada é uma solução que combina a simplicidade do Zip encriptado sem seus problemas como atualizar arquivos internos, se bem que o File Roller faz isso quando se tenta modificar o conteúdo de um arquivo zipado.
Aqui mostrarei uma abordagem bem específica do OpenSuse, usando o Yast para criar uma partição encriptada no Pendrive. Primeiramente, abrimos o Yast e vamos direto para o gerenciador de partições. É só identificar o sistema de arquivos a ser encriptado e inserir a senha. Talvez o Yast peça para instalar algum pacote de suporte, mas é coisa rápida. Depois de criada a partição é só inserir o pendrive que o sistema de arquivos monta normalmente, pedindo a senha a cada rodada.
A partição encriptada é uma solução muito boa para pendrives que se perdem por aí.
Privacidade Local com o GID/UID/UMASK
Aqui em casa temos uma complicação adicional. Além do openSUSE, tenho uma partição com Windows 7. Para que a integração com o Windows seja a mais simples possível, meu principal sistema de arquivos é um NTFS, logo tenho que conviver com todas as complicações de implementá-lo no
Linux. Um dos problemas do NTFS é que a partir do Linux não há suporte para suas estruturas de segurança.
O NTFS-3G geralmente monta a partição dando a propriedade de tudo para o Root e liberando geral para os demais usuários. Isso causa alguns problemas. Um deles envolve o Firefox que tem dificuldades para atualizar as extensões. Meus arquivos pessoais também ficam a mercê de um delete acidental de outros usuários.
Isso pode ser resolvido com algumas configurações do FSTAB, adicionando as opções GID e UID. Esta solução é bastante específica para este cenário, mas é tão segura quanto sua senha root e seu Windows podem ser.
GID e UID são duas opções do comando mount que pode ser adicionadas ao FSTAB. Elas forçam todos os arquivos e pastas de uma partição a pertencerem a um usuário e grupo pré-determinado. É excelente para domar sistemas de arquivos rebeldes como o NTFS.
O funcionamento é bem simples, basta adicionar gid e uid na linha do fstab da partição que deseja configurar. Os valores a serem adicionados são a identificação numérica do usuário e grupo que deseja adicionar, por exemplo:
/dev/disco /windows ntfs-3g gid=100,uid=1000,locale=pt_BR.UTF-8 0 0
Aqui gid=100 e uid=1000 significam:
- gid="grupo rafael"
- uid="usuário rafael"
Uma consulta ao "man mount" mostra que gid e uid são opções disponíveis para alguns sistemas de arquivos, entre eles, Ntfs e Fat. Sistemas ext4, ext3, ext2 parecem ignorar esta opção justamente por conterem seu próprio sistema para gerir as permissões de usuário.
Com as configurações acima tenho o controle sobre os arquivos daquela partição, mas isto não basta. As permissões dos arquivos individuais ainda são distribuídas de uma forma que todos tem acesso a eles.
Para resolver a questão das permissões temos uma opção específica. O Umask é uma das opções do mount para sistemas de arquivo rebeldes que serve para definir as permissões de usuários baseando-se em uma máscara.
Assim como gid e uid, umask é um valor numérico, porém, não representa simplesmente as permissões octais para o sistema de arquivos e sim uma filtragem das permissões que um usuário já tenha.
Recordemos rapidamente as permissões octais. O mais importante das opções octais é entender que elas são uma forma de soma que sempre resulta em valores diferentes para cada combinação:
Sem acesso: 0
Ler: 1
Escrever: 2
Executar: 4
Logo:
- Ler e Escrever = 1+2=3
- Ler e Executar = 1+4=5
- Escrever e Executar = 4+2=6
- Ler, Escrever e Executar = 4+2+1=7
Então as combinações de permissões octais podem ser reduzidas a um único número somando as opções. Da mesma forma, o octal permite definir as opções de dono, grupo e usuário de um arquivo ou pasta em um única comando. Vejamos um exemplo prático com as opções que eu quero para o minha partição NTFS:
| Dono | Grupo | Outros |
Ler | 1 | 1 | 0 |
Escrever | 2 | 0 | 0 |
Executar | 4 | 4 | 4 |
Octal: | 7 | 5 | 4 |
Então as permissões que quero para minha partição, em octal, é 754. Uma configuração típica onde terei acesso livre aos meus arquivos, usuários selecionados poderão navegá-los e todos os outros usuários estarão excluídos.
Agora que entendemos o octal, temos que pensar no umask. Este possui uma forma inversa de trabalhar, onde o valor do umask não é a permissão que dou e sim a permissão que tiro dos usuários e grupos. Mas é bem simples, basta subtrair de 777 o valor do octal que você deseja. 777 significa "libera geral" em octal e em umask significa "acesso negado total", a diferença entre eles dá umask=000 que é "libera geral" em umask. Vejamos então:
Permissões umask restritas: 777
Permissões desejadas, em octal: -754
Permissões umask finais: 023
Agora basta colocar o valor umask=023 no fstab e nosso sistema de arquivos NTFS estará domado:
/dev/disco /windows ntfs-3g gid=1000,uid=1000,umask=023,locale=pt_BR.UTF-8 0 0
Com isso, agora todo mundo pode usar o computador sem que eu precise me preocupar com "incidentes". Uma curiosidade, as opções octais têm efeitos diferentes para pastas e para arquivos. Ler um arquivo é acessa-lo, ler uma pasta é entrar nela. Escrever para pastas e arquivos é a mesma coisa. Mas executar, para arquivos é permissão para rodar programas, para pastas é uma permissão para listar conteúdo. Se uma pasta tem opção de execução sem leitura (o caso acima), para os usuários que não fazem parte do grupo as pastas são inavegáveis.
A forma como calculei o valor do umask acima é extremamente primária pois ele possui muitos outros nuances então, se você estiver interessado em esquentar a cabeça leia esta discussão no VOL sobre como calcular os valores do umask:
Calculando valores UMASK.