Как только я получил 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.