Como esconder arquivos em um cartão de memória.

Quando você tem arquivos de conteúdo sensível, profissional ou pessoal, o uso de um cartão de memória flash (SD, MMC etc.) criptografado pode ser a melhor solução entre a discrição e o tamanho da mídia.
Cartão de memória com chaves
As dicas deste post servem para criptografar quase qualquer tipo de mídia — seja um pendrive USB, uma partição no disco, um mero arquivo, um disco virtual ou um cartão de memória microSD.
Ao executar corretamente este procedimento você impede o acesso a seus arquivos por pessoas não autorizadas.
Se você costuma acessar arquivos que gostaria de manter em segredo, você precisa usar mídias criptografadas.

O que você precisa ter em mãos para criptografar um cartão de memória

Neste texto vou mostrar como criptografar um cartão de memória formatado com o sistema de arquivos F2FS, no Linux. Só quem tem a senha de acesso poderá ver o conteúdo deste cartão.
Se você é preocupado com os diversos aspectos da segurança, vai entender por que a escolha do Linux é óbvia e necessária.
Você precisa ter instalado no seu sistema o módulo do kernel que permite manipular sistemas de arquivos F2FS — que é otimizado para cartões de memória flash.
O processo de formatar e criptografar o cartão ficará por conta do utilitário luksformat — ele simplesmente torna tudo mais fácil e rápido.
Clique nos links citados no texto e nas imagens para obter informações adicionais e maiores detalhes sobre algum assunto abordado neste texto.
Antes de prosseguir, faça backup de quaisquer arquivos que sejam importantes — os procedimentos de formatação e encriptação apagará todos os dados contidos na mídia de destino. Portanto, se você não sabe o que está fazendo, não faça.

Como formatar e criptografar uma mídia no Linux, com o luksformat

Como eu já disse, estes comandos podem ser aplicados a qualquer mídia — você só precisa adequá-los ao seu contexto.
Para formatar e criptografar um cartão de memória, localizando em /dev/sdc1, com o sistema de arquivos ext4, execute o seguinte comando:

sudo luksformat -t ext4 /dev/sdc1

Sim. Você precisa ter privilégios administrativos para rodar o luksformat.

captura de tela - comando luksformat formata e encripta uma midia flash
Clique para ver detalhes

Se você quiser usar qualquer um dos outros recursos do mkfs, basta acrescentar os parâmetros ao final da linha de comando. Por exemplo, se quiser rotular a mídia formatada com o nome Segredos, faça assim:

sudo luksformat -t ext4 /dev/sdc1 -L Segredos

* Sugiro usar nomes mais discretos que este.

Como criar uma partição f2fs criptografada

Com o comando abaixo, você pode criar um sistema de arquivos criptografado, na mesma mídia, com o nome de volume musicman

sudo luksformat -t f2fs /dev/sdc1 -l musicman

Fique atento: neste caso, o parâmetro -l fica em minúsculas.

Criando dispositivo criptografado em /dev/sdc1...

WARNING!
========
Isto irá sobrescrever os arquivos em /dev/sdc1 definitivamente.

Are you sure? (Type uppercase yes): YES
Informe a frase secreta: 
Verify passphrase: 
Digite sua senha novamente para verificação
Informe a frase secreta para /dev/sdc1: 

	F2FS-tools: mkfs.f2fs Ver: 1.2.0 (2013-10-25)

Info: Label = musicman
Info: sector size = 512
Info: total sectors = 3907583 (in 512bytes)
Info: zone aligned segment0 blkaddr: 512
Info: Discarding device
Info: This device doesn't support TRIM
Info: format successful

Se você tiver dificuldades com o sistema de arquivos F2FS, leia este artigo.
Você pode aplicar os mesmos princípios para criar sistemas de arquivos VFAT ou outros, que considerar mais interessantes.
Por fim, saiba mais sobre o assunto, clicando nos links contidos no artigo ou fazendo uma pesquisa — na caixa de busca, na seção direita deste site.

Como criptografar um pendrive no Linux, com luksformat

Neste post vou mostrar como criptografar fácil e rápido um pendrive fazendo uso do aplicativo luksformat, no Linux.
O luksformat, pode ser encontrado em diversas distribuições, como o Fedora, Ubuntu, Debian etc. — e oferece uma interface (na linha de comando) muito simplificada para cryptsetup e mkfs.
capa do tutorial como criptografar um pendrive
O mkfs é um programa de formatação de drives e aceita inúmeros tipos de sistemas de arquivos.
O cryptsetup é usado para configurar volumes com criptografia LUKS.
Ao fazer uso do luksformat, o usuário não precisa se preocupar com nada, basta informar o que deseja formatar (e encriptar) e o sistema de arquivos desejado.
O sistema de arquivos padrão do luksformat é o vfat — mas, se você deseja ter um sistema mais seguro, sugiro usar outro.

Como formatar e encriptar uma mídia com o luksformat

Abra um terminal e rode o luksformat, informando o sistema de arquivos desejado e a mídia a ser formatada.
No exemplo, abaixo, vou formatar a unidade presente em /dev/sdc1. Certifique-se de adequar o meu exemplo à sua situação, se você for copiar e colar no seu terminal.

Os comandos descritos neste tutorial removem todos os dados do seu dispositivo de armazenamento e não podem ser desfeitos.
Tenha em mente, também, que se você esquecer a senha usada para encriptar não será possível recuperar os seus dados.
Você foi avisado.

sudo umount /dev/sdc1
sudo luksformat -t ext3 /dev/sdc1

No exemplo, acima, a mídia em /dev/sdc1 foi desmontada.
Antes disto, indiquei o sistema de arquivos ext3, com a opção -t ext3.
No final do comando, configurei o nome do volume para kRypT0 — você deve escolher o nome que achar melhor.
O aplicativo pede uma confirmação em letras maiúsculas: YES.
Escolha uma senha forte e confirme.
Abaixo, segue a saída da execução do aplicativo no meu sistema:

Criando dispositivo criptografado em /dev/sdc1...

WARNING!
========
Isto irá sobrescrever os arquivos em /dev/sdc1 definitivamente.

Are you sure? (Type uppercase yes): YES
Informe a frase secreta: 
Verify passphrase: 
Digite sua senha novamente para verificação
Informe a frase secreta para /dev/sdc1: 
mke2fs 1.42.9 (4-Feb-2014)
Rótulo do sistema de arquivos=kRypT0
OS type: Linux
Tamanho do bloco=4096 (log=2)
Tamanho do fragmento=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
122160 inodes, 488447 blocks
24422 blocks (5.00%) reserved for the super user
Primeiro bloco de dados=0
Máximo de blocos de sistema de arquivos=503316480
15 grupos de blocos
32768 blocos por grupo, 32768 fragmentos por grupo
8144 inodes por grupo
Cópias de segurança de superblocos gravadas em blocos: 
	32768, 98304, 163840, 229376, 294912

Allocating group tables: pronto                            
Gravando tabelas inode: pronto                            
Creating journal (8192 blocks): concluído
Escrevendo superblocos e informações de contabilidade de sistema de arquivos: concluído

Como formatar e encriptar um drive em VFAT

O sistema de arquivos VFAT (menos seguro) é padrão do luksformat. Para formatar o mesmo drive, com mesmo nome de volume, faça assim:

sudo umount /dev/sdc1
sudo luksformat /dev/sdc1 -n kRypT0

Referências

Outras leituras, que podem contribuir:

Como montar um drive pelo nome do volume (label)

A cada vez que você monta um dispositivo de armazenamento externo, é comum ele ser referenciado, no Linux, em locais diferentes.
Um pendrive, hoje, pode estar em /dev/sdc e amanhã em /dev/sdb.
flash memory icon
Mas, e se você tem um script ou aplicativo que precisa saber exatamente onde encontrar os seus dados, sempre?
Se o nome deste dispositivo de armazenamento se mantiver sempre único e sem mudanças, é possível se referir a ele, no Linux.
O comando mount permite montar qualquer dispositivo a partir do seu nome de volume (disk volume label).



Se você ainda não configurou o nome do volume do seu dispositivo, pode usar o comando e2label, para isto.
Veja um exemplo de como mostrar o nome do volume atual:

e2label /dev/sdd3
musicas

Para alterar o nome do volume do seu dispositivo de armazenamento externo, use este exemplo:

e2label /dev/sdd3 novo_nome

Como montar um drive pelo seu nome de volume

No exemplo que segue, vou montar um drive externo, cujo nome de volume é “Fotos”, na minha pasta de usuário, com o nome de “Camera”.

mount -L fotos /home/Imagens/Camera

Vamos ver um outro exemplo.
Se quiser montar um HD externo, com o nome de volume “Documentos” em “/media/usb”, faça o seguinte:

mkdir -p /media/usb
mount -L Documentos /media/usb

Configure o fstab

Opcionalmente, você pode pode posicionar a requisição para montar o seu dispositivo dentro do arquivo /etc/fstab.
Ao fazer isto, você irá garantir que ele seja montado automaticamente a cada vez que o sistema for iniciado.
Adicione a seguinte linha ao arquivo /etc/fstab (com os devidos ajustes, para que se adequem à sua realidade):

LABEL=Documentos     /media/usb    ext4   defaults 0 0

Espero que isto resolva.

Referências

Como formatar um drive no Linux, com mkfs

O mkfs torna fácil formatar drives de vários tipos, no Linux, tais como pendrives, cartões de memória, HDs, SSDs etc.
O aplicativo permite várias opções e parâmetros de uso, que lhe conferem grande versatilidade para realizar a tarefa.
O mkfs pode criar uma variedade de sistemas de arquivos em um dispositivo — usualmente (mas não exclusivamente) um disco rígido.
sistema de arquivos - disco rígido - usb - pendrive

Como usar o mkfs

É importante ser cuidadoso.
— não é possível desfazer a formatação depois. Portanto tenha sempre a certeza de que está formatando o drive certo.
O nome (endereço) do drive vai ser algo parecido com “/dev/hda1” ou “/dev/sdc2”.
Você pode também formatar e criar um sistema de arquivos em um arquivo — semelhante a um disco rígido virtual.
Para formatar um pendrive, localizado em /dev/sdc1, comece por desmontar o dispositivo:

sudo umount /dev/sdc1

Agora já é possível criar um sistema de arquivos nele.
O comando, a seguir, formata e apaga todo o conteúdo do dispositivo — e cria um sistema de arquivos vfat nele:

sudo mkfs -t vfat -n pendrive -I /dev/sdc1

Sistemas de arquivo suportados pelo mkfs

Os sistemas de arquivos (filesystems) mais usados, são suportados pelo mkfs:

  • xfs,
  • ext2, ext3, ext4,
  • xia,
  • xfs
  • vfat, msdos, dos,
  • minix,
  • bfs etc.

O aplicativo tem opções apropriadas a cada sistema de arquivos em particular. Ele é um frontend para estes outros programas:

  • mkdosfs
  • mke2fs
  • mkfs.bfs
  • mkfs.ext2
  • mkfs.ext3
  • mkfs.ext4
  • mkfs.minix
  • mkfs.msdos
  • mkfs.vfat
  • mkfs.xfs
  • mkfs.xiafs

Cada um deles tem uma página de manual e um sistema de ajuda próprio — que vale a pena consultar sempre.
Você pode ver a relação deles no seu PC com o comando ls:

ls /sbin/mk*

Linux mkfs
Se você não especificar o sistema de arquivos a ser construído no dispositivo, o mkfs vai usar o ext2 como padrão.

Como verificar se há setores ruins no drive, antes de formatar

Alguns dos aplicativos, da lista acima, tem opções mais avançadas, que permitem verificar a saúde do dispositivo de armazenamento antes de formatar e criar um sistema de arquivos nele.
Para criar um sistema de arquivos VFAT em um pendrive que você pretenda usar para ver filmes, proceda da seguinte forma, para fazer uma checagem no sistema de arquivos do dispositivo após a formatação:

sudo mkfs -t vfat -c -v -n "meus_filmes" /dev/sdc1

O que produzirá uma saída semelhante a esta:

mkfs.fat 3.0.26 (2014-03-07)
mkfs.fat: warning - lowercase labels might not work properly with DOS or Windows
Auto-selecting FAT32 for large filesystem
/dev/sdc1 has 124 heads and 62 sectors per track,
hidden sectors 0x0002;
logical sector size is 512,
using 0xf8 media descriptor, with 7870462 sectors;
drive number 0x80;
filesystem has 2 32-bit FATs and 8 sectors per cluster.
FAT size is 7671 sectors, and provides 981886 clusters.
There are 32 reserved sectors.
Volume ID is aafb6b57, volume label meus_filmes.
Searching for bad blocks 106080... 212192... 318560... 424288... 530272... 636624... 743008... 849248... 955360... 1061472... 1167968... 1275104... 1381728... 1488096... 1594336... 1701200... 1808480... 1916256... 2022496... 2128864... 2234976... 2341344... 2448096... 2554720... 2661584... 2768864... 2875488... 2981984... 3087968... 3194208... 3300832... 3407456... 3514192... 3620576... 3727824... 3834080... 

Na linha de comando, acima:

  • a opção -c, pede para que o aplicativo faça uma checagem no drive, após a formatação.
  • a opção -v, liga a “verbosidade”.
  • a opção -n, nomeia o novo dispositivo (no máximo 11 letras)

Uma forma alternativa e equivalente de execução é a seguinte:

sudo mkfs.vfat -c -v -n "meus_filmes" /dev/sdc1

Os resultados são os mesmos.

Qual o sistema de arquivos mais recomendado

Se você tentar esta busca no Google, vai encontrar inúmeros fóruns, onde esta questão é debatida, às vezes intensamente e quase nunca com resultados 100% conclusivos.
O fato é que o tipo mais adequado de sistema de arquivos varia de acordo com o tipo de dispositivo — pendrive, HD, SSD etc —, de acordo com a aplicação — reproduzir filmes, guardar arquivos de backup etc —, entre tantos outros fatores.
Vou ser extremamente simplista na minha afirmação, a seguir, apenas para não te deixar sem resposta — mas você deve pesquisar antes de decidir, sempre.

Sistemas de arquivos mais indicados para pendrive

Se o seu dispositivo removível for para armazenar filmes em mp4, mkv etc., para assistir na TV, você vai precisar que ele use um sistema de arquivos reconhecido pelo aparelho: os mais comuns, portanto, são VFAT e NTFS.
Em pendrives maiores que 16 Gb, vá de NTFS.
Se não vai depender da compatibilidade com outros sistemas operacionais, pode usar o ext2 ou ext3 para pendrives ou cartões de memória de baixa capacidade e ext4 em dispositivos mais novos e com maior capacidade de armazenamento.
O ext4 é recomendado também para unidades SSD.

Como usar o ext4

Use a versão mais nova, ext4, sempre — a menos que você tenha motivos especiais para usar uma versão mais antiga.
As equipes de desenvolvimento do Fedora e do Red Hat têm optado pelo XFS — se uma destas é sua distro, mantenha a opção das equipes de desenvolvimento, por que você terá mais suporte.
O uso básico do mkfs, para formatar uma partição com o tipo ext4 é assim:

sudo mkfs -t ext4 /dev/sdd3

Tenha em mente que uma partição precisa estar desmontada sempre, antes de ser formatada — creio que o sistema irá lembrá-lo disto.

LEIA MAIS

Como desmontar um drive ocupado em 2 passos

Se você está tentando desconectar um dispositivo USB, um pendrive ou remover um DVD e ele demora muito (e, aparentemente, nada acontece) é por que algo errado pode estar acontecendo.
Há várias situações em que um dispositivo pode parar de responder às suas tentativas de remoção (desmontar, ejetar etc.) — a mais comum é que ele esteja sendo retido por algum programa (processo).
usb flash media pendriveSe um processo ainda estiver escrevendo/lendo dados, ele vai “tentar” impedir que você desconecte o dispositivo — seja um CD/DVD/Blu-Ray, um pendrive, um cartão de memória, um HD externo etc.
O ideal é esperar — se você estiver lidando com transferências volumosas entre dispositivos, boa parte destes dados pode estar armazenada no cache do sistema, aguardando disponibilidade para concluir a transação.
Ou seja, mesmo que você não perceba qualquer atividade de tráfego de dados no sistema, ela pode, sim, ainda estar ocorrendo — e desconectar um drive nestas condições é extremamente arriscado.
Neste post, vou mostrar como lidar, de forma segura, com esta situação.

Feche os programas relacionados ao dispositivo

Você está ouvindo música no pendrive ou no cartão de memória?
Está editando algum texto ou planilha armazenada no dispositivo?
Em casos assim, o dispositivo está em uso pelo programa em execução e impedir que ele seja retirado é uma medida de segurança do sistema — para evitar que você perca os seus dados e/ou danifique o sistema de arquivos do dispositivo.
Feche todos os programas abertos e aguarde uns instantes — e tente ejetar novamente.
Se isto ainda não resolveu, prossiga a leitura.

Como resolver o problema

A minha primeira opção é o comando sync. Sua função é escoar os dados retidos no buffer do sistema de arquivos, pro dispositivo de destino.
Na maioria das vezes, tudo se resolve com este comando.
Comece por abrir um terminal e execute o comando:

sudo sync

Aguarde alguns instantes.
Se isto não resolver, tente o que segue:
Localize o dispositivo, com o comando mount:

mount
/dev/sda2 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/pstore type pstore (rw)
/dev/sda1 on /home type ext4 (rw)
systemd on /sys/fs/cgroup/systemd type cgroup (rw, noexec, nosuid, nodev, none, name=systemd)
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw, nosuid, nodev, user=justincase)
/dev/sdc1 on /mnt type ext4 (rw)

Vou usar como exemplo o dispositivo destacado acima /dev/sdc1, que está montado na diretório /mnt.
Para tentar desmontá-lo, use o seguinte comando:

sudo umount /dev/sdc1

comandos mount umount linux ubuntu
comando mount retornou erro
Se este método não funcionou, você vai precisar descobrir qual(is) processo(s) está(ão) retendo o dispositivo — e decidir o que fazer com ele(s).

Como determinar qual processo está ocupando o dispositivo

A idéia é justamente esta: identificar quem está ocupando o drive e “pedir para ele parar”.
Neste artigo, vou abordar 3 métodos para identificar e resolver o problema:

  • pseste comando exibe um relatório instantâneo sobre os processos em execução.
  • lsof — este comando é usado para listar os arquivos em aberto. Ele pode apontar se há algum programa mantendo um arquivo aberto em seu pendrive.
  • fuser — identifica processos que estejam usando arquivos ou sockets.

O comando PS

O ps, em conjunto com o comando grep, pode resolver esta situação em um piscar de olhos.
Adéque a linha de comando, abaixo, à sua realidade:

ps aux | grep -i "/mnt"

No exemplo acima, eu inquiri o sistema sobre os processos em execução com ps aux e filtrei o resultado, para ver apenas o que se referia à pasta em que o dispositivo /dev/sdc1 está montado: /mnt. Veja o resultado:

justinc+  8233  2.8  0.1  83016  3012 pts/30   Sl   20:06   0:04 mpg123 /mnt/Música/REO Speedwagon - discography/1971 R.E.O. Speedwagon/01 Gypsy Woman's Passion.mp3
justinc+  8264  0.0  0.0   4956   848 pts/30   S+   20:09   0:00 grep --color=auto -i /mnt

Quem está mantendo o meu dispositivo ocupado é o player mpg123 — e a identificação do processo 8233.
Para interromper este aplicativo, use o comando kill:

kill -9 8233

Use lsof para listar os arquivos abertos (opened files)

Vou usar um método semelhante ao que usei antes com o comando ps, combinando-o com um filtro grep:

lsof | grep -i "/mnt/"

Tenha um pouco de paciência — este comando pode demorar um pouco para apresentar os seus resultados.
Novamente, o player de músicas mpg123 aparece na lista, com o seu PID. Veja:

mpg123    13424       justincase    8r      REG       8,33    9695544  5505285 /mnt/Música/REO Speedwagon - discography/1971 R.E.O. Speedwagon/02 157 Riverside Avenue.mp3
threaded- 13424 13427 justincase    8r      REG       8,33    9695544  5505285 /mnt/Música/REO Speedwagon - discography/1971 R.E.O. Speedwagon/02 157 Riverside Avenue.mp3

Use o comando kill para terminar o processo (note que o PID – Process IDentification – mudou):

kill -9 13424

Use o fuser para encontrar o processo que está usando o seu dispositivo

O último método é o meu preferido.
O comando fuser pode ser usado para identificar processos que estejam mantendo arquivos abertos ou ocupando sockets. Veja como usar:

fuser -m /dev/sdc1

O resultado, no meu sistema foi o seguinte:

/dev/sdc1:            6740c 13702

O último número, é o do PID — que vamos informar ao comando kill:

kill -9 13702

como usar o comando fuser
Se necessário, preceda o comando kill com o sudo — para ter privilégios administrativos:

sudo kill -9 13702

Outras soluções com umount

Se o problema persistir, você pode tentar “remontar” um dispositivo em modo “somente leitura” (read-only) – o que causará menos danos ao seu sistema de arquivos, se for removido arbitrariamente (use o sudo, se necessário):

sudo umount -rv /dev/sdc1
[sudo] password for justincase: 
umount: /dev/sdc1 está ocupado - remontado somente para leitura

Se você obtiver sucesso nisto, já pode desconectar o drive ou a mídia.
As soluções que seguem são variantes do comando umount e você combinar os parâmetros e as opções para obter o melhor resultado.
Elas não funcionam não funcionam em kernels anteriores ao 2.4:
Para forçar a remoção:

sudo umount -vf /dev/sdc1

Remover imediatamente o sistema de arquivos do dispositivo junto a todas as referências, tão logo ele se desocupe:

sudo umount -l /dev/sdc1

Combinando as duas:

sudo umount -lf /dev/sdc1

Espero que uma destas soluções funcione para você. 😉