Systemd отстой, да здравствует systemd

6 ответы

Известная проблема в системных дистрибутивах (Arch Linux,
OpenSUSE, Fedora).

Systemd заменяет sysvinit и обеспечивает одно большое
преимущество над этим. В sysvinit, когда вы запрашиваете запуск
службы, она наследует контекст выполнения лица, вызывающего скрипт,
который включает переменные среды, ulimits и т. Д. Systemd улучшает
это, наоборот, уведомляя демона, который запустит службу в четко
определенной, здоровой, постоянной среде, где, конечно,
характеристики услуг намного проще предсказать, так как среда
всегда одна и та же.

Это означает, что, когда я вызываю systemctl изнутри chroot, не
имеет значения, что я внутри chroot, среда, которая будет
унаследована, по-прежнему относится к PID 1, а не к моей текущей.
Но это становится хуже, чем это: поскольку сокеты связи размещены
внутри/run/systemd, процесс в chroot даже не сможет поговорить с
системой init!

Итак, как вы идете chroot’ing в systemd distros?

  1. Если все, что вы хотите сделать, это контейнер Linux, эта страница Arch Wiki расскажет вам, как
    настроить контейнер Linux менее чем за 30 секунд, благодаря
    .

  2. Если вам действительно нужна среда chroot, эта красивая и кристально чистая
    веб-страница предоставит вам два рабочих решения (второй
    вариант — это модифицированная версия, предложенная в пункте № 1).
    </Р>

23

only ignores «services», so I just run the
daemon commands manually.

Поэтому вместо

я использую

3

Нет. Службы выполняются systemd (pid 1), а не напрямую systemctl
(который отправляет только запрос на запуск), а так как systemd
запускается за пределами chroot, то будет и сервис.

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

2

Вы можете использовать команду для запуска
служб в chroot. Например, для запуска службы я
делаю это так.

to stop it

1

Столкнувшись с этой проблемой, однажды попытался открыть сеть в
режиме спасения, используя конфигурацию сети из chroot. Наконец,
это работает для меня:

или:

1

Если вы запускаете службу типа inetd с активацией сокета,
рассмотрите возможность запуска stunnel вместо файла конфигурации,
который указывает как chroot, так и ваш двоичный файл как цель
запуска inetd.

Обратите внимание, что вы можете иметь проблемы SELINUX. В
системе Oracle Linux 7.1 мне приходилось «chcon -v —type =
stunnel_etc_t» во всех файлах, которые нужно было читать. Вам нужно будет использовать TLS-шифрование на стороне клиента
сокета (т

Е. Еще один stunnel с «client = yes» в config). Дайте
мне знать, если вы хотите получить более подробную информацию об
этом

Вам нужно будет использовать TLS-шифрование на стороне клиента
сокета (т. Е. Еще один stunnel с «client = yes» в config). Дайте
мне знать, если вы хотите получить более подробную информацию об
этом.

Как пользоваться Linux в WSL

Чтобы открыть установленную вами среду Linux, просто откройте меню «Пуск» и найдите установленный вами дистрибутив. Например, если вы установили Kali Linux, запустите ярлык Kali Linux.

Вы можете закрепить этот ярлык приложения в меню «Пуск», на панели задач или на рабочем столе для облегчения доступа.

При первом запуске среды Linux вам будет предложено ввести имя пользователя и пароль UNIX. Они необязательно должны совпадать с вашим именем пользователя и паролем Windows, но будут использоваться в среде Linux.

Например, если вы введёте «alex» и «hackware» в качестве учётных данных, ваше имя пользователя в среде Linux будет «alex», а пароль, который вы используете в среде Linux, будет «hackware» — независимо от вашего имени пользователя Windows и его пароля.

Вы можете запустить установленную среду Linux, выполнив команду wsl. Если у вас установлено несколько дистрибутивов Linux, вы можете выбрать среду Linux по умолчанию, запускаемую этой командой.

Если у вас установлена Kali Linux, вы также можете запустить команду kali, чтобы установить её. Для openSUSE Leap 15 SP1 используйте opensuse-15-sp1. Для SUSE Linux Enterprise Server 15 SP1 используйте SLES-15-SP1. Эти команды перечислены на странице каждого дистрибутива Linux в Магазине Windows.

Вы по-прежнему можете запустить среду Linux по умолчанию, выполнив команду bash, но Microsoft утверждает, что это устарело. Это означает, что команда bash может перестать работать в будущем.

Если у вас есть опыт использования оболочки Bash в Linux, Mac OS X или других платформах, вы будете как дома.

В Kali Linux и Ubuntu вам нужно добавить к команде префикс sudo, чтобы запустить её с правами root. Пользователь «root» на платформах UNIX имеет полный доступ к системе, как пользователь «Администратор» в Windows. Ваша файловая система Windows в среде оболочки Bash находится в /mnt/c.

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

Связанная статья: Что такое sudo

Используйте те же команды терминала Linux, которые вы используете в этой операционной системе. Если вы привыкли к стандартной командной строке Windows с её командами DOS, вот несколько основных команд, общих для Bash и Windows:

  • Изменить каталог: cd в Bash, cd или chdir в DOS
  • Список содержимого каталога: ls в Bash, dir в DOS
  • Перемещение или переименование файла: mv в Bash, move и rename в DOS
  • Скопировать файл: cp в Bash, copy в DOS
  • Удалить файл: rm в Bash, del или erase в DOS
  • Создайте каталог: mkdir в Bash, mkdir в DOS
  • Используйте текстовый редактор: vi или nano в Bash, edit в DOS

Связанная статья: Азы работы в командной строке Linux (часть 1), а также последующе части

Важно помнить, что, в отличие от Windows, оболочка Bash и её среда, имитирующая Linux, чувствительны к регистру. Другими словами, «File.txt» с большой буквы отличается от «file.txt» без заглавной буквы.. Дополнительные инструкции смотрите в серии наших руководств Азы работы в командной строке Linux для начинающих.

Дополнительные инструкции смотрите в серии наших руководств Азы работы в командной строке Linux для начинающих.

Вам нужно будет использовать команду apt для установки и обновления программного обеспечения среды Debian, Kali Linux, Ubuntu. Не забудьте указать перед этими командами префикс sudo, чтобы они запускались от имени пользователя root — Linux-эквивалента Администратора. Вот команды apt, которые вам нужно знать:

Загрузить обновлённую информацию о доступных пакетах:

sudo apt update

Установить пакет приложения (замените «ИМЯ-ПАКЕТА» на имя пакета):

sudo apt install ИМЯ-ПАКЕТА

Удаление пакета приложения (замените «ИМЯ-ПАКЕТА» на имя пакета):

sudo apt remove ИМЯ-ПАКЕТА

Поиск доступных пакетов (замените СЛОВО словом, по которому нужно искать пакеты в именах и описаниях):

sudo apt search СЛОВО

Загрузите и установите последние версии установленных пакетов:

sudo apt full-upgrade

Если вы установили дистрибутив SUSE Linux, вместо этого вы можете использовать команду zypper для установки программного обеспечения.

После того, как вы загрузили и установили приложение, вы можете ввести его имя в запросе, а затем нажать Enter, чтобы запустить его. Дополнительную информацию смотрите в документации к конкретному приложению.

Программное обеспечение, устанавливаемое в оболочке Bash, ограничено оболочкой Bash. Вы можете получить доступ к этим программам из командной строки, PowerShell или где-либо ещё в Windows, но только если вы запустите команду вида

bash -c КОМАНДА

Характеристика дистрибутивов Linux в WSL

Debian

Debian — популярен как дистрибутив, например, для серверов, так и как основа для других дистрибутивов. Например, на Debian основываются Ubuntu, Kali Linux, Linux Mint (есть версия LMDE, которая основывается непосредственно на Debian, а также «классическая» версия, которая основывается на Ubuntu, которая, в свою очередь, также основывается на Debian).

То есть Debian и производные очень популярна.

Вы сможете использовать полную среду командной строки Debian, содержащую среду полной текущей стабильной версии.

Kali Linux

Kali Linux — это популярнейший дистрибутив для специалистов в информационной безопасности, цифровой криминалистике, хакеров и продвинутых пользователей. Вы можете установить и использовать в родной среде Linux множество специализированных инструментов. Для Kali Linux разработано ПО для упрощённого запуска графического интерфейса (смотрите статью «Как установить Kali Linux с Win-KeX (графический интерфейс) в WSL2 (подсистему Windows для Linux)», а также для инструкций на HackWare.ru взят именно этот дистрибутив, поэтому для него вы найдёте много детаьлных инструкций. По этой причине рекомендуется Kali Linux.

SUSE Linux Enterprise Server

SUSE Linux Enterprise Server — это мультимодальная операционная система, которая открывает путь к трансформации ИТ в эпоху программного обеспечения. Современная модульная ОС помогает упростить мультимодальные ИТ, делает традиционную ИТ-инфраструктуру эффективной и обеспечивает привлекательную платформу для разработчиков. В результате вы можете легко развертывать и переносить критически важные для бизнеса рабочие нагрузки в локальную и общедоступную облачные среды. SUSE Linux Enterprise Server 15 SP1 с его мультимодальным дизайном помогает организациям трансформировать свой ИТ-ландшафт за счет объединения традиционной и программно определяемой инфраструктуры.

Ubuntu

В WSL у дистрибутива Ubuntu также отсутствует графический интерфейс (как по умолчанию у всех других дистрибутивов), поэтому её нельзя назвать более «дружественной» к пользователю. Основана на Debian.

Fedora

Обещают добавить, но пока отсутствует.

Интерфейс для systemd (опционально)

Chkservice — удобная утилита для управления юнитами systemd. В Debian 10 она доступна прямо из репозитория:

root@dedicated:~ apt install chkservice

Если в репозиториях вашего дистрибутива она отсутствует, установку можно выполнить с доступного PPA разработчиков:

root@dedicated:~ add-apt-repository ppa:linuxenko/chkservice
root@dedicated:~ apt-get update
root@dedicated:~ apt-get install chkservice

Запустить интерфейс:

root@dedicated:~ chkservice

Управление выполняется следующим образом, стрелками «вверх» и «вниз». Запустить юнит — клавиша «r», остановить — клавиша «s». Будьте осторожны, после нажатия клавиши, сигнал немедленно отправляет команду на выполнения без предупреждений.

Run graphical applications from chroot

If you have an X server running on your system, you can start graphical applications from the chroot environment.

To allow the chroot environment to connect to an X server, open a virtual terminal inside the X server (i.e. inside the desktop of the user that is currently logged in), then run the xhost command, which gives permission to anyone to connect to the user’s X server (see also Xhost):

$ xhost +local:

Then, to direct the applications to the X server from chroot, set the DISPLAY environment variable inside the chroot to match the DISPLAY variable of the user that owns the X server. So for example, run:

$ echo $DISPLAY

as the user that owns the X server to see the value of DISPLAY. If the value is «:0» (for example), then in the chroot environment run:

# export DISPLAY=:0

Как это работает

В соответствии с конфигурацией по умолчанию в , модуль автоматически запускает в случае, когда пользователь в первый раз входит в систему . Этот процесс будет работать до тех пор, пока существует сессия этого пользователя, и будет убит, как только последний сеанс для пользователя будет закрыт. Когда включен , то процесс запускается при загрузке и убит не будет. Пользовательский процесс systemd отвечает за управление службами пользователей, которые могут быть использованы для запуска демонов или автоматизированных задач, со всеми преимуществами systemd, таких как активация сокета, таймеры, системы зависимостей или строгий контроль процесса через контрольные группы.

Аналогично системным службам, пользовательские службы расположены в следующих каталогах (отсортированы по возрастанию приоритета):

  • где находятся службы, относящиеся к установленным пакетам.
  • где находятся службы, относящиеся к пакетам, установленным в домашний каталог.
  • где находятся общесистемные пользовательские службы, созданные системным администратором.
  • где пользователь размещает свои собственные службы.

При запуске пользовательского процесса systemd он привязывается к пользовательской же (то есть отдельной для каждого пользователя) цели . Другие службы могут управляться вручную с помощью команды . См. .

Примечание:

  • выполняется как процесс, отдельный от родительского процесса . Службы пользователей не могут ссылаться или зависеть от системных юнитов или юнитов других пользователей.

Спор вокруг систем инициализации в Linux

System V init (или просто «SysV») — это система инициализации, которая существует со времен операционной системы System V, которая была выпущена в 1983 году. SysV оставалась системой инициализации в течение почти трех десятилетий (за некоторыми исключениями). Многие IT-специалисты и программисты в силу своей привычки не хотели отказываться от SysV, да и к тому же она была очень простой для понимания.

Проблема с SysV заключалась в том, что в её основе лежали концепции, существовавшие много лет назад. SysV не хватало возможности нативно обрабатывать многие вещи, такие как: обнаружение съемных носителей, корректное обнаружение аппаратного обеспечения и загрузка встроенного ПО, загрузка различных модулей и пр. Кроме того, при использовании данной системы, инициализация процессов происходит последовательно, т.е. одна задача запускается только после успешного завершения предыдущей. Часто это приводило к задержке и длительному времени загрузки. Задачи, подобные монтированию файловых систем, выполняются один раз во время загрузки, после чего «забываются». Но такого подхода недостаточно для автоматизированного управления сервисами, требующими к себе постоянного внимания.

В попытке привнести больше возможностей в процесс инициализации Linux-систем, компания Canonical в 2006 году вместе с релизом Ubuntu 6.10 (Edgy Eft) выпускает систему инициализации Upstart, которая с самого начала разрабатывалась с учетом обратной совместимости. Она может запускать демоны без каких-либо изменений в их скриптах запуска.

Другой системой инициализации, восходящей своими корнями к операционной системе 4.4BSD, является rc.init. Она применяется в таких дистрибутивах, как: FreeBSD, NetBSD и Slackware. В 2007 году разработчики Gentoo выпустили улучшенный вариант данной системы инициализации, сделав её модульной и назвав OpenRC. Большинство других дистрибутивов Linux исторически продолжало использовать SysV.

В 2010 году инженеры компании Red Hat Леннарт Пёттеринг и Кей Сиверс приступили к разработке новой системы инициализации — systemd, которая разрабатывалась с учетом недостатков, имеющихся в SysV. В состав systemd, помимо прочего, также входят и различные пакеты, утилиты и библиотеки, позволяющие производить параллельный запуск процессов, сокращая тем самым время загрузки системы и количество необходимых вычислений. Весной того же года Fedora 15 стала первым дистрибутивом, в котором по умолчанию использовалась система инициализации systemd. После чего, на протяжении следующих трех лет, большинство дистрибутивов массово перешли на systemd.

Но, если все остальные дистрибутивы отдают предпочтение systemd и считают её лучшей системой инициализации, как для предприятий, так и для любителей, почему так много споров вокруг нее?

systemd, по сравнению с SysV и Upstart, содержит большое количество различных улучшений, а также предлагает и другие компоненты, имеющие более тесную интеграцию с системой, с помощью которых разработчики могут уменьшить объем выполняемой работы. Что в этом плохого? Ну, поскольку разработчики создают программное обеспечение, которое зависит от systemd и/или от любой из её многочисленных служб (journald, udevd, consoled, logind или networkd), то такое ПО становится менее совместимым с системами, в которых systemd не применяется. По мере того, как количество служб, предоставляемых проектом systemd, продолжает расти, systemd сама становится все более зависимой от них.

В результате systemd становится самостоятельной платформой, и её повсеместное распространение непреднамеренно препятствует разработке программного обеспечения, которое является переносимым и совместимым с операционными системами, не поддерживающими systemd. Но действительно ли всё так печально? Конечно, нет. Прежде всего, это проект с открытым исходным кодом, и у людей есть выбор: использовать его или нет. Пользователи и разработчики могут извлечь выгоду из наличия нескольких конкурирующих систем инициализации, и нет вины systemd в том, что основные дистрибутивы переключились на нее из-за её плюсов.

Процессы, cgroups и уничтожение процессов

systemd осуществляет организацию процессов при помощи групп управления cgroups, и вы можете это видеть с помощью команды ps, которая была обновлена для того, чтобы могла показывать cgroups. Для того, чтобы посмотреть, каким сервисам принадлежат какие процессы, выполните следующую команду:

$ ps xawf -eo pid,user,cgroup,args 
  PID USER     CGROUP                      COMMAND
 1338 root     name=systemd:/user/carla/2       \_ gdm-session-worker [pam/gdm-password]
 1358 carla    name=systemd:/user/carla/2           \_ /bin/sh /etc/xdg/xfce4/xinitrc
 1487 carla    name=systemd:/user/carla/2               \_ /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "startxfce4"
 1515 carla    name=systemd:/user/carla/2               \_ xscreensaver -no-splash
 1517 carla    name=systemd:/user/carla/2               \_ xfce4-session

Механизм cgroups был внедрен в ядро Linux несколько лет назад, и это интересное средство распределения и ограничения ресурсов ядра. В systemd механизм cgroups используется для запуска и управления процессами. Когда создаются новые процессы, они становятся членами родительской группы управления cgroup. Группа cgroup называется именем сервиса, к которому она принадлежит, и сервисы не могут покинуть свои группы, так что вы всегда знаете, какой сервис принадлежит к какой группе. Когда вам нужно уничтожить сервис, вы можете уничтожить его группу cgroup и одним махом добраться до всех его процессов, а не играть в игру «найди и переименуй подпроцесс». Еще один способ просмотреть иерархию процессов с помощью команды system-cgls. Это показано на рис.2.

Рис.2: Фрагмент данных, выдаваемый командой system-cgls и показывающий процессы групп управления

У меня есть мой старый друг — демон Avahi. Поэтому вместо того, чтобы по-старинке искать и уничтожать два процесса Avahi, systemd позволит мне сделать это в одной команде:

# systemctl kill avahi-daemon.service

Леннарт Поттеринг (Lennart Poettering), главный автор systemd написал для системных администраторов ряд статей. Ссылки на них приведены здесь для вашего удобства. В них описывается настройка сервисов, уровней запуска и всего, что нужно знать для того, чтобы управлять демоном systemd

Прим. ред. Поттеринг написал уже 21-ую часть своих заметок о systemd, вы найдете их все по приведенным выше ссылкам.

Большой опыт в поиске многолетних уязвимостей

Компания Qualys была основана в 1999 г. За 22 года своего существования она многократно находила в Linux и других системах уязвимости, существовавшие годами.

Например, в начале 2013 г. ее эксперты выловили брешь, позволявшую исполнять любой нужный хакерам код на веб-серверах, почтовых серверах и других серверных системах. Они обнаружили ее в библиотеке GNU C (glibc), в которой содержатся стандартные функции, используемые программами, написанными на языках C и C++.

Рассказать миру об уязвимости, промаркированной как CVE-2015-0235, Qualys решила лишь в конце января 2015 г., то есть спустя два года с момента ее обнаружения. Разработчикам Qualys поведала о ней без промедления, однако далее через два года большинство версий Linux, используемых в сервером оборудовании, так и не были обновлены.

По утверждению специалистов Qualys, CVE-2015-0235 появилась в Linux еще в 2000 г., когда вышла библиотека glibc версии 2.2. В список «дырявых» дистрибутивов Linux вошли Debian 7, CentOS 6 и 7? RHEL 6 и 7, а также Ubuntu 12.04.

Дистрибутивы Linux для программистов и продвинутых пользователей

Хотя Windows и macOS доминируют на рынке операционных систем, IT-специалисты отдают предпочтение именно опенсорсным продуктам семейства Linux. Неслучайно, большинство серверов и суперкомпьютеров в мире работают именно на этих ОС. Ведь у них есть все преимущества Linux — такие операционные системы бесплатны, более безопасны и стабильны, к тому же дают огромную свободу выбора при установке ПО.

Разработчики часто выбирают дистрибутивы Linux из-за высокой совместимости с языками и инструментами программирования. Сисадмины предпочитают их за возможность гибкого управления системой с помощью команд в терминале, а также за богатство встроенных инструментов удалённой настройки веб-сервера.

Arch Linux

Основа Linux kernel.Архитектура: x86_64.Преимущества:

  • модель обновлений rolling release;
  • возможность установки несвободного ПО;
  • контроль зависимостей пакетов;
  • гибкость настройки.

Независимый дистрибутив Linux, оптимизированный под нужды продвинутых пользователей. Установочная версия Arch Linux минималистична. Она предоставляет стабильную базу, на основе которой пользователи сами создают выборочную конфигурацию, устанавливая нужные пакеты при помощи инструмента Arch Build System (ABS).

Arch Linux основан на модели непрерывного развёртывания обновлений, что позволяет обеспечить высокую актуальность версий приложений. Он использует свой собственный менеджер пакетов Pacman для установки обновлений с полным отслеживанием зависимостей.

Gentoo

Основа Linux kernel, FreeBSD.Архитектура i486, i586, i686, x86_64, alpha, arm, hppa, ia64, mips, powerpc, ppc64, sparc64.Преимущества:

  • много альтернативных способов установки;
  • продвинутое управление пакетами;
  • аппаратная многоплатформенность;
  • низкое потребление оперативной памяти;
  • гибкость настройки модулей.

Дистрибутив на базе исходного ядра Linux считается оптимальным инструментом для специалистов по настройке сетей и профессиональных разработчиков. Gentoo устанавливается не из готовых двоичных пакетов, а собирает каждый пакет из исходного кода и компилирует их для целевой ОС. Это дает широчайшие возможности для точной оптимизации системы под конкретные задачи.

Gentoo обладает собственной системой управления пакетами Portage, работающей по типу «портов» FreeBSD, но на основе Python. Её продвинутый инструментарий позволяет осуществлять точную сборку пакетов «под себя», а также автоматизировать их работу в целевой системе. С помощью Portage Gentoo с одинаковой лёгкостью может служить основой для защищенного сервера, платформы программной разработки или мощного игрового ПК.

Slackware Linux

Основа Linux kernel.Архитектура arm, i586, s390, x86_64.Преимущества:

  • простота устройства;
  • стабильность работы;
  • развитое сообщество;
  • есть коммерческая поддержка.

Slackware — один из первых дистрибутивов Linux для сервера, появившихся в широком доступе. С момента дебютного релиза в 1993 году он успел накопить обширную и преданную базу поклонников, которая занимается развитием ОС и по сей день.

Хотя название Slackware происходит от английского слова slack («ленивый», «слабый»), пользоваться им вовсе не просто. Всё дело в консервативности, которая даёт дистрибутиву главное преимущество — стабильность, но лишает его возможности идти «в ногу» со стремительно развивающимися технологиями. По этой причине он пользуется популярностью в основном в среде тех, кто изучает развитие систем семейства Unix / Linux, а также среди профессиональных айтишников.

Slackware не входит в число коммерческих дистрибутивов Linux, но он поддерживает отношения с несколькими компаниями, которые предоставляют платную поддержку.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: