Como fazer o sistema montar automaticamente o dispositivo criptografado no Linux

2

Quando eu conecto meu armazenamento externo, preciso montá-lo automaticamente como um dispositivo criptografado.

Como faço isso acontecer?

    
por Gilles 26.02.2011 / 18:12

1 resposta

4

O problema é que, para o sistema montar automaticamente o dispositivo criptografado, a chave desse dispositivo deve ser armazenada no mesmo sistema em algum lugar. Então, se o seu sistema for roubado, a chave pode ficar comprometida. Se estiver tudo bem para você, continue lendo.

udev é o gerenciador plug-and-play do Linux; sempre que o hardware estiver (des) conectado, ele passará por udev e udev é responsável por colocá-lo no diretório /dev em algum lugar ou fazer o que for necessário para torná-lo reconhecido pelo restante do Linux. Ao pesquisar as profundezas de como udev funciona, você descobrirá que é possível executar um script quando um dispositivo de armazenamento em massa USB estiver conectado.

Basicamente, você precisará ir para /etc/udev/rules.d. Todos os arquivos aqui são analisados por udev quando ele (re) é iniciado e esses arquivos podem ser usados para disparar scripts quando determinados dispositivos são conectados. Não altere nada que você vê aqui, mas adicionei um z60_usbmount.rules com o seguinte conteúdo:

KERNEL=="sd*", BUS=="usb", ACTION=="add", RUN+="/etc/local/usbmountcheck udev add $kernel $parent"

KERNEL=="sd*", ACTION=="remove", RUN+="/etc/local/usbmountcheck udev remove $kernel $parent"

Assim, quando qualquer unidade externa é conectada via usb, esse script usbmountcheck será executado, com todas as informações udev desiste sobre o dispositivo.

O script usbmountcheck é um pouco complicado, porque você deseja identificar exclusivamente a unidade, e o nome sda , sdb , etc., o nome $kernel , não fará isso. Aqui está o pouco de lógica que incluí no meu script para fazer isso:

ACTION=$2
KVOL=$3
KVROOT=$4
# correlate volume name in /dev/disk/by-id with $KVOL, if we can
VNAME="'/bin/ls -l /dev/disk/by-id | /bin/grep $KVOL | /usr/bin/tr -s [[:space:]] ' ' | /usr/bin/cut -f 9 -d ' ''"
if [ "$?" != 0 ]; then
 die "error in pipeline that tries to get volume name, return code $?"
 fi

Neste ponto, $VNAME terá o nome do dispositivo conforme identificado por USB. Você pode então testar se é um volume criptografado conhecido e roteirizar os comandos apropriados para montá-lo. Você também terá que criar um script para um manipulador de umount para limpeza automática após uma desconexão.

Há muitos perigos ao escrever scripts do udev, porque se eles falharem, pode impedir que o udev funcione e reconhecer novas alterações de hardware. Pise com cuidado.

    
por 26.02.2011 / 19:07