Carregue dm-crypt no Ubuntu Server 18.04 LTS no subsistema Windows para Linux 1 ou 2

Carregue dm-crypt no Ubuntu Server 18.04 LTS no subsistema Windows para Linux 1 ou 2

Estou usando o Windows Subsystem for Linux (WSL1) em meu sistema Windows 10 e tentei excluirtodosdados de um dispositivo USB e substituí-los por números pseudoaleatórios seguindoeste tutorial(encontrei apenas em alemão, mas não é realmente importante para esta questão), mas não foi possível carregar um módulo de kernel necessário.

Ao tentar carregar o dm-crypt eu recebo

$ sudo modprobe dm-crypt
modprobe: ERROR: ../libkmod/libkmod.c:586 kmod_search_moddep() could not open moddep file '/lib/modules/4.4.0-18362-Microsoft/modules.dep.bin'
modprobe: FATAL: Module dm-crypt not found in directory /lib/modules/4.4.0-18362-Microsoft

Presumo que minha versão do Ubuntu simplesmente esteja faltando o módulo dm-crypt.

Agora minha pergunta:O WSL oferece suporte ao subsistema do kernel dm-crypt em geral?

Estou usando WSL1 com Ubuntu 18.04 LTS de 64 bits.

Atualizar:
Tentei novamente com WSL2 e Ubuntu 18.04 LTS, mas recebi a mesma mensagem de erro:

$ sudo modprobe dm-crypt
modprobe: ERROR: ../libkmod/libkmod.c:586 kmod_search_moddep() could not open moddep file '/lib/modules/4.4.0-19013-Microsoft/modules.dep.bin'
modprobe: FATAL: Module dm-crypt not found in directory /lib/modules/4.4.0-19013-Microsoft

Responder1

Não posso garantir o WSL1, mas parece que o WSL2 o suporta, pois está executando o kernel Linux completo. Na verdade, tentei carregar o módulo dm-crypt e consegui.

Módulo dm-crypt carregado

Você terá que habilitar o WSL2 primeiro. No momento em que este livro foi escrito, ele estava disponível apenas para Windows Insiders:https://docs.microsoft.com/en-us/windows/wsl/wsl2-install

Então você terá que compilar seu próprio kernel personalizado para obter suporte ao dm-crypt:https://github.com/microsoft/WSL2-Linux-Kernel/blob/master/README-Microsoft.WSL2

Instale o git e alguns compiladores:

$ sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses5-dev git

Clone o kernel do Microsoft WSL2:

$ git clone https://github.com/microsoft/WSL2-Linux-Kernel.git
$ cd WSL2-Linux-Kernel

Você terá que selecionar os recursos criptográficos. Usei o cardápio:

$ export KCONFIG_CONFIG=Microsoft/config-wsl
$ make menuconfig
[*] Enable loadable module support

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

General setup  --->
    [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support

Device Drivers --->
    [*] Block Devices ---> 
        <*> Loopback device support 

File systems ---> 
     <*> FUSE (Filesystem in Userspace) support 

E quaisquer algoritmos que você quiser ...

[*] Cryptographic API ---> 
    <*> XTS support
    <*> SHA224 and SHA256 digest algorithm
    <*> AES cipher algorithms
    <*> AES cipher algorithms (x86_64)
    <*> User-space interface for hash algorithms
    <*> User-space interface for symmetric key cipher algorithms
    <*> RIPEMD-160 digest algorithm 
    <*> SHA384 and SHA512 digest algorithms 
    <*> Whirlpool digest algorithms 
    <*> LRW support 
    <*> Serpent cipher algorithm 
    <*> Twofish cipher algorithm

Para o que você deseja fazer, você terá que selecionar "Suporte XTS" sob "API criptográfica".

Salve sua configuração e compile o kernel:

$ sudo make && make modules_install

Em seguida, copie a nova imagem para o host do Windows. Meu arquivo de imagem foi chamado bzImage:

$ cp arch/x86_64/boot/bzImage /mnt/c/Users/your-user-name/

Crie um arquivo na pasta "Usuários \ seu nome de usuário" do host Windows chamado ".wslconfig" (observe o ponto . na frente). Usei o Notepad++. Coloque as seguintes linhas nele:

[wsl2]
kernel=C:\\Users\\your-user-name\\bzImage
swap=0
localhostForwarding=true

Saia da sua instância WSL2 e reinicie-a (use o Powershell):

> wsl --shutdown

Abra sua sessão bash WSL2 novamente e tente carregar o módulo dm-crypt:

$ sudo modprobe -v dm_crypt

insmod /lib/modules/4.19.81-microsoft-standard/kernel/drivers/md/dm-crypt.ko

ATUALIZAÇÃO 1:

Em relação ao acesso a dispositivos de bloqueio, bem... no momento em que este livro foi escrito, parece que a Microsoft ainda está trabalhando nisso:https://github.com/Microsoft/WSL/issues/689

Espero que ajude :)

ATUALIZAÇÃO 2:

Você pode contornar a limitação do dispositivo de bloco no WSL2 servindo a unidade USB do seu host ao WSL2 por meio do protocolo USB/IP ou iSCSI. Tentei USP/IP, mas tive muitos problemas porque meu dispositivo USB foi classificado como "hub". Então, tentei o método iSCSI criando um destino iSCSI em meu host Windows e, em seguida, conectei-me a ele a partir de minha instância WSL2.

Usei o aplicativo "iSCSIConsole" no repositório github do TalAloni:https://github.com/TalAloni/iSCSIConsolepara criar o destino.

Você terá que executá-lo com privilégios de administrador para anexar um disco físico, como uma unidade USB. Você também pode precisar permitir o firewall do host do Windows para que ele se comunique com a instância WSL2. Anexei meu pen drive USB com o nome de destino iSCSI padrão "iqn.1991-05.com.microsoft:target1".

Adicionando um destino iSCSI

Selecionando um disco físico

Depois de executá-lo, você pode se conectar a ele a partir de sua instância WSL2.

Primeiro, você deve certificar-se de ter os módulos do driver iSCSI carregados para seu kernel WSL2 personalizado. Eu ativei no menu de configuração do kernel e recompilei:

$ KCONFIG_CONFIG=Microsoft/config-wsl make menuconfig
[*] Networking support  --->
   Networking options  --->
      [*] TCP/IP networking 

Device Drivers  --->
  SCSI device support  --->
     <*> SCSI device support --->
     <*> SCSI disk support
     <*> SCSI generic support
     SCSI Transports --->
       <M> iSCSI Transport Attributes
     [*] SCSI low-level drivers  --->
       <M> iSCSI Initiator over TCP/IP     
$ sudo make && make modules_install

Depois de instalar o novo kernel e módulos, carregue os módulos iscsi:

$ sudo modprobe libiscsi
$ sudo modprobe scsi_transport_iscsi
$ sudo modprobe iscsi_tcp
$ sudo modprobe libiscsi_tcp

Então configurei um cliente/iniciador em minha instância WSL2. Usaremos open-iscsi, mas requer systemd, e o systemd não está habilitado no WSL2 por padrão. Mas é muito fácil de fazer. Aqui está um breve guia sobre como fazer isso:https://forum.snapcraft.io/t/running-snaps-on-wsl2-insiders-only-for-now/13033. Você pode pular as partes instantâneas.

Em seguida, instale o open-iscsi:

$ sudo apt install open-iscsi

Edite "/etc/iscsi/iscsid.conf" e altere "node.startup" para "automático". Configurá-lo como automático fará com que suas sessões WSL sejam iniciadas muito lentamente na próxima vez que você reiniciar, pois o IP do seu "host" muda e ele não será capaz de se reconectar.

Inicie o iniciador iscsi:

$ sudo /etc/init.d/open-iscsi start

Em seguida, conecte-se ao destino e liste os dispositivos de armazenamento:

$ export WSLHOSTIP=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}')
$ sudo iscsiadm -m discovery -t st -p $WSLHOSTIP

172.26.240.1:3260,-1 iqn.1991-05.com.microsoft:target1

$ sudo iscsiadm -m node

172.26.240.1:3260,-1 iqn.1991-05.com.microsoft:target1

Agora podemos conectar:

$ sudo iscsiadm -m node --targetname "iqn.1991-05.com.microsoft:target1" --portal "$WSLHOSTIP:3260" --login

Logging in to [iface: default, target: iqn.1991-05.com.microsoft:target1, portal: 172.26.240.1,3260] (multiple)
Login to [iface: default, target: iqn.1991-05.com.microsoft:target1, portal: 172.26.240.1,3260] successful.

Minha unidade USB foi então listada como/dev/sdb.

$ ls /dev/sd*

/dev/sda  /dev/sdb

$ sudo fdisk -l /dev/sdb

Disk /dev/sdb: 30 GiB, 32212254720 bytes, 62914560 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x3958509f

Device     Boot Start      End  Sectors Size Id Type
/dev/sdb1  *     2048 62914559 62912512  30G  b W95 FAT32

Agora você pode fazer a criptografia da sua unidade...

$ sudo modprobe dm_crypt
$ sudo cryptsetup -d /dev/urandom -c aes-xts-plain create delete /dev/sdb  && shred -vzn 0 /dev/mapper/delete && sync && sleep 4 && cryptsetup remove delete

shred: /dev/mapper/delete: pass 1/1 (000000)...
shred: /dev/mapper/delete: pass 1/1 (000000)...32MiB/30GiB 0%
shred: /dev/mapper/delete: pass 1/1 (000000)...62MiB/30GiB 0%
shred: /dev/mapper/delete: pass 1/1 (000000)...90MiB/30GiB 0%
shred: /dev/mapper/delete: pass 1/1 (000000)...108MiB/30GiB 0%
shred: /dev/mapper/delete: pass 1/1 (000000)...137MiB/30GiB 0%
shred: /dev/mapper/delete: pass 1/1 (000000)...149MiB/30GiB 0%
...

informação relacionada