Какие ограничения накладывает WSL[2] на гостевую систему Linux?

Какие ограничения накладывает WSL[2] на гостевую систему Linux?

Как только я получил WSL2 на свой ПК с Windows, я установиладаптированный CentOS 8.2версия. Когда я исследовал его, я обнаружил, что могу читать и писать в файловой системе NTFS хоста из коробки. Он также был подключен к Интернету, но я не мог понять, как управлять соединением; я мог установить Network Manager, но тогда я получал бы всякий Could not create NMClient objectраз, когда я запускал nmcliкоманду. Я не нашел SELinux ( getenforce). Я установил firewalld, но затем firewall-cmdвыдавал Failed to connect to socket /run/dbus/system_bus_socket. systemctlвыдает ошибку System has not been booted with systemd...Затем я узнал, что«Fedora Remix для WSL»предлагалось за 9,99 долларов в магазине приложений Windows с примечанием:

Из стандартной установки Fedora Remix для WSL были удалены следующие пакеты: grub, plymouth, kernel, sssd, linux-firmware, dracut, parted, e2fsprogs, iprutils, ppc64-utils, selinux-policy, policycoreutils, sendmail, firewalld, fedora-release, fedora-logos и fedora-release-notes.

Итак, главный вопрос: как WSL ограничивает функциональность Linux?

Затем, очевидно, нас интересует, как их обойти: Первое, что меня беспокоит: безопасно ли подключение к Интернету? Мне кажется, что нет брандмауэра, который бы мешал людям попасть на мой хост-компьютер, если они могут подключиться к моему WSL Linux через какую-то службу. Относительно того, что я написал выше: Почему я получаю эту ошибку с nmcli? Возможно ли как-то запустить SELinux? Возможно ли как-то управлять устройствами так же, как с systemctl?

решение1

WSL2 по сути является виртуальной машиной Linux, использующей настоящее ядро ​​Linux и пользовательскую систему инициализации. Это пользовательское ядро ​​знает, как получить доступ к файловой системе Windows с помощью специальных драйверов, и оно получает доступ к Интернету через виртуальный сетевой адаптер.

Поскольку вы не используете стандартную систему init (которая является либо , sysvinitлибо systemd), вы не запускаете все службы, которые система обычно запускает, например dbus. Поэтому запуск systemctlне будет работать для запуска или остановки служб, а программы, которые требуют dbusзапуска, потребуют от вас запуска вручную или с помощью подходящего скрипта в стиле sysvinit. Последний вариант должен работать практически на любой системе init.

WSL2 использует эту пользовательскую систему инициализации, поскольку она делает загрузку практически мгновенной; в противном случае вам пришлось бы ждать полной загрузки системы Linux, чтобы все заработало. Следовательно, пакеты, которые настраивают полную систему Linux или требуются только для загрузки, не понадобятся.

Используемый вами брандмауэр, если таковой имеется, должен быть настроен на вашей системе Windows, а не на вашей системе Linux. Вероятно, вы можете использовать nftablesили iptablesнапрямую, если хотите, но все, на что вы полагаетесь, systemdотпадает. По тем же причинам вы не будете использовать Network Manager, поскольку ваш сетевой доступ контролируется Windows и будет отражать все, что делает сетевой стек Windows.

Мне неясно, почему SELinux не работает в WSL. Возможно, это связано с тем, что ядро ​​Microsoft Linux не собирается с ним или не включает его, возможно, это связано с тем, что другие операционные системы не хотят SELinux (например, Debian и Ubuntu предпочитают AppArmor) и не хотят иметь дело с несколькими модулями, или, возможно, drvfs (файловая система WSL) не поддерживает требуемые функции.

Если вам нужен полнофункциональный Linux, вам следует установить настоящий дистрибутив Linux. WSL2 отлично подходит, если вы хотите использовать систему Windows и разрабатывать или запускать приложения для Linux без необходимости двойной загрузки, или если вы должны использовать Windows, но предпочитаете Linux, но он не является заменой полноценной системы Linux.

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