Linux 1 또는 2용 Windows 하위 시스템의 Ubuntu Server 18.04 LTS에 dm-crypt 로드

Linux 1 또는 2용 Windows 하위 시스템의 Ubuntu Server 18.04 LTS에 dm-crypt 로드

Windows 10 시스템에서 WSL1(Linux용 Windows 하위 시스템)을 사용하고 있으며 삭제하려고 했습니다.모두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를 지원합니까?

저는 64비트 Ubuntu 18.04 LTS와 함께 WSL1을 사용하고 있습니다.

업데이트:
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 참가자만 사용할 수 있습니다.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/

Windows 호스트의 "Users\your-user-name" 폴더에 ".wslconfig"라는 파일을 만듭니다(앞에 점 . 이 있음). 저는 Notepad++를 사용했습니다. 그 안에 다음 줄을 넣으세요:

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

WSL2 인스턴스를 종료하고 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:

USB/IP 또는 iSCSI 프로토콜을 통해 호스트의 USB 드라이브를 WSL2에 제공하면 WSL2의 블록 장치 제한을 해결할 수 있습니다. USP/IP를 시도했지만 USB 장치가 "허브"로 분류되었기 때문에 문제가 너무 많았습니다. 그래서 Windows 호스트에서 iSCSI 대상을 생성한 다음 WSL2 인스턴스에서 연결하여 iSCSI 방법을 시도했습니다.

TalAloni의 github 저장소에서 "iSCSIConsole" 애플리케이션을 사용했습니다.https://github.com/TalAloni/iSCSIConsole대상을 생성합니다.

USB 드라이브와 같은 물리적 디스크를 연결하려면 관리자 권한으로 실행해야 합니다. 또한 WSL2 인스턴스와 통신하려면 Windows 호스트 방화벽을 통과하도록 허용해야 할 수도 있습니다. 기본 iSCSI 대상 이름 "iqn.1991-05.com.microsoft:target1"을 사용하여 USB 썸 드라이브를 연결했습니다.

iSCSI 대상 추가

물리 디스크 선택

실행한 후 WSL2 인스턴스에서 연결할 수 있습니다.

먼저 사용자 지정 WSL2 커널에 대해 iSCSI 드라이버 모듈이 로드되어 있는지 확인해야 합니다. 커널 구성 메뉴에서 이를 활성화한 다음 다시 컴파일했습니다.

$ 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가 필요하며 WSL2에서는 기본적으로 systemd가 활성화되어 있지 않습니다. 그러나 그것은 매우 쉽습니다. 이를 수행하는 방법에 대한 매우 짧은 가이드는 다음과 같습니다.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"으로 변경합니다. 자동으로 설정하면 "호스트" IP가 변경되어 다시 연결할 수 없기 때문에 다음에 재부팅할 때 WSL 세션이 매우 느리게 시작됩니다.

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

관련 정보