Введение
Сервис – это единица в утилите SystemD, которая представляет собой любой ресурс, который наша операционная система может распознать и управлять им.
Это могут быть программные компоненты, устройства и т.д.
⚙️ Как запустить сервис на привилегированном порту от обычного пользователя
В связи с широким распространением SystemD в качестве системы инициализации и системного менеджера в дистрибутивах Linux, мы все чаще видим ее использование в управлении сервисами.
Хотя это делает запуск служб более плавным, возникает много вопросов, касающихся безопасности системы и контроля доступа.
В этой статье мы рассмотрим командный инструмент systemctl, который мы используем для управления этой системой инициализации.
Мы рассмотрим, как использовать этот инструмент для управления запущенной службой, а также для определения ее пользователя.
Понимание systemctl
Как уже говорилось, systemctl – это инструмент командной строки, который позволяет нам управлять и взаимодействовать с SystemD.
Он призван заменить устаревшую систему инициализации System V (SysVInit).
Он состоит из ряда утилит и библиотек для управления системой, которые помогают нам контролировать диспетчер служб.
Давайте рассмотрим основной синтаксис использования systemctl:
Если запустить эту команду без аргументов, она отобразит все загруженные устройства в нашей системе:
Давайте разберемся, что это значит:
- UNIT: название устройств, которые SystemD в настоящее время имеет в памяти.
- LOAD: показывает, правильно ли загружена конфигурация блока
- ACTIVE: отображает статус устройства, если оно активно или нет
- SUB: предоставляет более подробную информацию о блоке в зависимости от его типа или состояния
- DESCRIPTION: отображает краткое описание того, чем является или занимается устройство.
В этой статье мы будем использовать службу mysql, чтобы проиллюстрировать команды.
Основные команды systemctl
Наиболее распространенными командами, которые помогают нам управлять запущенными службами в нашей системе, являются команды start, stop, restart и reload.
Кроме того, мы можем использовать этот инструмент для проверки статуса службы, чтобы узнать, загружена ли она и работает ли в нашей системе.
Чтобы проверить статус нашей службы MySQL, мы используем команду systemctl status:
Это дает нам ценные сведения о состоянии сервиса и другую информацию.
Мы можем разделить вывод на:
- Loaded: показывает, загружено ли устройство в память.
- Active: показывает активное состояние устройства
- PID: идентификатор процесса
- CGroup: cgroup службы
Этот вывод показывает, что наша служба mysql была загружена и запущена в нашей системе.
Теперь мы можем перейти к извлечению дополнительной информации об этой службе.
systemctl show
Хотя команда systemctl status отображает состояние службы, а также другую информацию в удобочитаемом формате, она инкапсулирует некоторые необходимые сведения.
Для получения более подробного, разбираемого компьютером вывода мы используем команду systemctl show.
systemctl show отображает свойства указанного устройства или службы.
Она получает и отображает подробную информацию о службе, включая пользователя, группу и т. д.
Давайте рассмотрим общий синтаксис этой команды:
По умолчанию при выполнении этой команды без аргументов отображаются свойства менеджера служб.
Практические примеры
Давайте для примера воспользуемся сервисом mysql.
Предполагая, что мы хотим узнать больше об этой службе, мы используем:
Как видите, здесь отображается информация о свойствах службы mysql в виде пары ключ-значение, запущенной в нашей системе.
Мы видим, что информация о пользователе, группе и UID также присутствует в этом выводе.
Как правило, пустые свойства в этом выводе игнорируются.
Чтобы вывести информацию о службе с указанными свойствами, мы используем флаг -all.
Дополнительные параметры и флаги
Очевидно, что вывод этой команды довольно обширен, так как она предоставляет нам все свойства запущенной службы.
Но нас интересуют только некоторые свойства.
В качестве альтернативы можно использовать флаг -property или -p, чтобы получить и отобразить только те свойства, которые нам нужны.
В данном случае мы хотим увидеть сведения о пользователе, стоящем за запущенной службой:
Используя этот флаг, мы можем извлечь нужные нам свойства запущенной службы.
Как показано в нашем примере, мы используем запятую для разделения нескольких свойств, которые мы хотим извлечь.
В результате мы можем определить пользователя, группу и MainPID для службы mysql
Использование
Знание того, как определить пользователя запущенной службы, очень важно для контроля доступа, устранения неполадок и обеспечения безопасности системы или сервера.
Ранее мы рассматривали службу mysql, которая может работать в масштабах всей системы.
Но давайте рассмотрим некоторые службы, которые зависят от пользователя. Для этого нового примера мы используем службу syncthing.
Syncthing – это одноранговое приложение синхронизации с открытым исходным кодом, используемое для синхронизации файлов между устройствами по сети.
Давайте установим его на наше устройство:
Далее давайте проверим состояние нашей службы без указания пользователя:
Мы видим, что эта служба не может работать в масштабах всей системы или сервера.
Далее давайте включим ее запуск только для определенного пользователя:
Таким образом, создается символическая ссылка, которая позволяет нашей службе запускаться при каждой загрузке системы.
Давайте проверим состояние запущенной службы с указанным пользователем:
Теперь мы видим, что служба работает под пользователем itsecforu
.
Мы также можем попробовать проверить состояние службы, указав другого пользователя, в данном случае root:
Здесь мы видим, что все предыдущие настройки, которые мы делали для службы syncthing, запущенной от имени itsecforu
, не отражаются для root.
Это важно, поскольку теперь мы можем запускать, останавливать, перезагружать и выполнять другие действия с запущенными службами, принадлежащими одному пользователю, не влияя на действия другого пользователя с той же службой на нашем сервере или системе.
Заключение
В этой статье мы обсудили, как использовать systemctl для управления запущенными службами на нашей системе или сервере.
Мы рассмотрели различные команды, такие как start, stop, reload и status.
Кроме того, мы рассмотрели способы определения пользователя запущенной службы с помощью systemctl show.
И наконец, мы увидели практические примеры того, как эти знания необходимы для эффективного системного администрирования.
см. также:
- 🐧 Различия между службой и процессом на Linux
- 🐧 Как сохранить процесс Linux запущенным после сбоя или перезагрузки
- 🐧 Как следить за каталогом на предмет создания новых файлов в Linux