Загрузите dm-crypt на Ubuntu Server 18.04 LTS в подсистеме Windows для Linux 1 или 2

Загрузите dm-crypt на Ubuntu Server 18.04 LTS в подсистеме Windows для Linux 1 или 2

Я использую подсистему Windows для Linux (WSL1) в своей системе Windows 10 и попытался удалитьвседанные с USB-устройства и перезаписать их псевдослучайными числами, следующимиэтот урок(нашел только на немецком языке, но это не так уж и важно для данного вопроса), но не смог загрузить нужный модуль ядра.

При попытке загрузить dm-crypt получаю

$ 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

Я предполагаю, что в моей версии Ubuntu просто отсутствует модуль dm-crypt.

Теперь мой вопрос:Поддерживает ли WSL подсистему ядра dm-crypt в целом?

Я использую WSL1 с 64-битной Ubuntu 18.04 LTS.

Обновлять:
Я попробовал еще раз с WSL2 и Ubuntu 18.04 LTS, но получил то же самое сообщение об ошибке:

$ 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

решение1

Я не могу ручаться за WSL1, но, похоже, WSL2 его поддерживает, поскольку он работает на полном ядре Linux. На самом деле, я только что попытался загрузить модуль dm-crypt и мне это удалось.

загружен модуль dm-crypt

Сначала вам придется включить WSL2. На момент написания статьи он доступен только для участников программы Windows Insiders:https://docs.microsoft.com/en-us/windows/wsl/wsl2-install

Затем вам придется скомпилировать собственное ядро, чтобы получить поддержку dm-crypt:https://github.com/microsoft/WSL2-Linux-Kernel/blob/master/README-Microsoft.WSL2

Установите git и несколько компиляторов:

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

Клонируйте ядро ​​Microsoft WSL2:

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

Вам придется выбрать криптографические функции. Я использовал меню:

$ 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 

И любые алгоритмы, которые вы захотите...

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

Для того, что вы хотите сделать, вам придется выбрать "Поддержка XTS" под "Криптографический API".

Сохраните конфигурацию и скомпилируйте ядро:

$ sudo make && make modules_install

Затем скопируйте новый образ на ваш хост Windows. Мой файл образа назывался bzImage:

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

Создайте файл в папке "Users\your-user-name" вашего хоста Windows с именем ".wslconfig" (обратите внимание на точку . в начале). Я использовал Notepad++. Вставьте в него следующие строки:

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

Выйдите из экземпляра WSL2 и перезагрузите его (используйте Powershell):

> wsl --shutdown

Откройте сеанс WSL2 bash еще раз и попробуйте загрузить модуль dm-crypt:

$ sudo modprobe -v dm_crypt

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

ОБНОВЛЕНИЕ 1:

Что касается доступа к блочным устройствам, ну... на момент написания этой статьи Microsoft, похоже, все еще работает над этим:https://github.com/Microsoft/WSL/issues/689

Надеюсь, это поможет :)

ОБНОВЛЕНИЕ 2:

Вы могли обойти ограничение блочных устройств на WSL2, обслуживая USB-накопитель вашего хоста в WSL2 через протокол USB/IP или iSCSI. Я попробовал USP/IP, но у меня было слишком много проблем с ним, поскольку мое USB-устройство было классифицировано как «концентратор». Поэтому я попробовал метод iSCSI, создав цель iSCSI на моем хосте Windows, а затем подключившись к ней из моего экземпляра WSL2.

Я использовал приложение «iSCSIConsole» из репозитория TalAloni на github:https://github.com/TalAloni/iSCSIConsoleдля создания цели.

Вам придется запустить его с правами администратора, чтобы подключить физический диск, например USB-накопитель. Вам также может потребоваться разрешить ему доступ через брандмауэр хоста Windows, чтобы он мог взаимодействовать с экземпляром WSL2. Я подключил свой USB-накопитель с именем цели iSCSI по умолчанию "iqn.1991-05.com.microsoft:target1".

Добавление цели iSCSI

Выбор физического диска

После того, как вы его запустите, вы сможете подключиться к нему из своего экземпляра WSL2.

Во-первых, вы должны убедиться, что у вас загружены модули драйвера iSCSI для вашего пользовательского ядра WSL2. Я включил его в меню конфигурации ядра, затем перекомпилировал:

$ 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

После установки нового ядра и модулей загрузите модули iscsi:

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

Затем я настраиваю клиент/инициатор на моем экземпляре WSL2. Мы собираемся использовать open-iscsi, но для этого требуется systemd, а systemd по умолчанию не включен на WSL2. Но это очень легко сделать. Вот очень краткое руководство о том, как это сделать:https://forum.snapcraft.io/t/running-snaps-on-wsl2-insiders-only-for-now/13033. Вы можете пропустить части с защелками.

Затем установите open-iscsi:

$ sudo apt install open-iscsi

Отредактируйте «/etc/iscsi/iscsid.conf» и измените «node.startup» на «automatic». Если вы установите автоматический режим, сеансы WSL будут запускаться очень медленно при следующей перезагрузке, поскольку IP-адрес вашего «хоста» изменится, и он не сможет подключиться повторно.

Запустите инициатор iscsi:

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

Затем подключитесь к цели и выведите список устройств хранения данных:

$ 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

Теперь мы можем подключить:

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

Мой USB-накопитель был указан как/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

Теперь вы можете выполнить шифрование своего диска...

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

Связанный контент