Laden Sie dm-crypt auf Ubuntu Server 18.04 LTS im Windows-Subsystem für Linux 1 oder 2

Laden Sie dm-crypt auf Ubuntu Server 18.04 LTS im Windows-Subsystem für Linux 1 oder 2

Ich verwende Windows Subsystem for Linux (WSL1) auf meinem Windows 10-System und habe versucht,alleDaten von einem USB-Gerät und überschreiben Sie diese mit pseudozufälligen Zahlen nachdieses Tutorial(fand es nur auf Deutsch, ist aber für diese Frage nicht wirklich wichtig), konnte jedoch ein benötigtes Kernelmodul nicht laden.

Beim Versuch, dm-crypt zu laden, erhalte ich

$ 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

Ich gehe davon aus, dass in meiner Ubuntu-Version einfach das Modul dm-crypt fehlt.

Nun meine Frage:Unterstützt WSL generell das Kernel-Subsystem dm-crypt?

Ich verwende WSL1 mit 64-Bit-Ubuntu 18.04 LTS.

Aktualisieren:
Ich habe es erneut mit WSL2 und Ubuntu 18.04 LTS versucht, aber die gleiche Fehlermeldung erhalten:

$ 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

Antwort1

Ich kann nicht für WSL1 bürgen, aber es scheint, dass WSL2 es unterstützt, da es den vollständigen Linux-Kernel ausführt. Tatsächlich habe ich gerade versucht, das dm-crypt-Modul zu laden, und es ist mir gelungen.

dm-crypt-Modul geladen

Sie müssen zuerst WSL2 aktivieren. Zum Zeitpunkt des Schreibens dieses Artikels ist es nur für Windows Insider verfügbar:https://docs.microsoft.com/en-us/windows/wsl/wsl2-install

Dann müssen Sie Ihren eigenen benutzerdefinierten Kernel kompilieren, um dm-crypt-Unterstützung zu erhalten:https://github.com/microsoft/WSL2-Linux-Kernel/blob/master/README-Microsoft.WSL2

Installieren Sie Git und einige Compiler:

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

Klonen Sie den Microsoft WSL2-Kernel:

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

Sie müssen die kryptografischen Funktionen auswählen. Ich habe das Menü verwendet:

$ 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 

Und welche Algorithmen Sie auch immer möchten ...

[*] 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

Für das, was Sie tun möchten, müssen Sie "XTS-Unterstützung" unter "Kryptografische API".

Speichern Sie Ihre Konfiguration und kompilieren Sie dann den Kernel:

$ sudo make && make modules_install

Kopieren Sie dann das neue Image auf Ihren Windows-Host. Meine Image-Datei hieß bzImage:

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

Erstellen Sie im Ordner „Benutzer\Ihr Benutzername“ Ihres Windows-Hosts eine Datei mit dem Namen „.wslconfig“ (beachten Sie den Punkt . davor). Ich habe Notepad++ verwendet. Fügen Sie die folgenden Zeilen ein:

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

Beenden Sie Ihre WSL2-Instanz und starten Sie sie neu (verwenden Sie Powershell):

> wsl --shutdown

Öffnen Sie Ihre WSL2-Bash-Sitzung erneut und versuchen Sie, das dm-crypt-Modul zu laden:

$ sudo modprobe -v dm_crypt

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

UPDATE 1:

Was den Zugriff auf Blockgeräte betrifft, nun ja... zum Zeitpunkt des Schreibens dieses Artikels scheint Microsoft noch daran zu arbeiten:https://github.com/Microsoft/WSL/issues/689

Hoffentlich hilft das :)

UPDATE 2:

Sie können die Blockgerätebeschränkung bei WSL2 umgehen, indem Sie das USB-Laufwerk Ihres Hosts über das USB/IP- oder iSCSI-Protokoll an WSL2 senden. Ich habe es mit USP/IP versucht, hatte damit aber zu viele Probleme, da mein USB-Gerät als „Hub“ klassifiziert war. Also habe ich die iSCSI-Methode ausprobiert, indem ich auf meinem Windows-Host ein iSCSI-Ziel erstellt und dann von meiner WSL2-Instanz aus eine Verbindung damit hergestellt habe.

Ich habe die Anwendung „iSCSIConsole“ im GitHub-Repository von TalAloni verwendet:https://github.com/TalAloni/iSCSIConsoleum das Ziel zu erstellen.

Sie müssen es mit Administratorrechten ausführen, um eine physische Festplatte wie ein USB-Laufwerk anzuschließen. Möglicherweise müssen Sie es auch durch die Windows-Host-Firewall lassen, damit es mit der WSL2-Instanz kommunizieren kann. Ich habe mein USB-Stick mit dem standardmäßigen iSCSI-Zielnamen „iqn.1991-05.com.microsoft:target1“ angeschlossen.

Hinzufügen eines iSCSI-Ziels

Auswählen einer physischen Festplatte

Nachdem Sie es zum Laufen gebracht haben, können Sie von Ihrer WSL2-Instanz aus eine Verbindung dazu herstellen.

Zuerst müssen Sie sicherstellen, dass Sie die iSCSI-Treibermodule für Ihren benutzerdefinierten WSL2-Kernel geladen haben. Ich habe sie im Kernel-Konfigurationsmenü aktiviert und dann neu kompiliert:

$ 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

Sobald Sie Ihren neuen Kernel und die neuen Module installiert haben, laden Sie die iscsi-Module:

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

Dann richte ich einen Client/Initiator auf meiner WSL2-Instanz ein. Wir werden open-iSCSI verwenden, aber es erfordert systemd, und systemd ist auf WSL2 standardmäßig nicht aktiviert. Aber es ist sehr einfach zu machen. Hier ist eine sehr kurze Anleitung dazu:https://forum.snapcraft.io/t/running-snaps-on-wsl2-insiders-only-for-now/13033. Sie können die Snap-Teile überspringen.

Installieren Sie dann open-iSCSI:

$ sudo apt install open-iscsi

Bearbeiten Sie „/etc/iscsi/iscsid.conf“ und ändern Sie „node.startup“ in „automatisch“. Wenn Sie die Einstellung auf „Automatisch“ setzen, werden Ihre WSL-Sitzungen beim nächsten Neustart sehr langsam gestartet, da sich die IP-Adresse Ihres „Hosts“ ändert und keine erneute Verbindung möglich ist.

Starten Sie den iscsi-Initiator:

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

Stellen Sie dann eine Verbindung zum Ziel her und listen Sie die Speichergeräte auf:

$ 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

Jetzt können wir eine Verbindung herstellen:

$ 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.

Mein USB-Laufwerk wurde dann aufgeführt als/Entwickler/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

Jetzt können Sie Ihr Laufwerk verschlüsseln...

$ 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%
...

verwandte Informationen