
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 모듈을 로드하려고 시도했고 성공했습니다.
먼저 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 썸 드라이브를 연결했습니다.
실행한 후 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%
...