🖧 Как определить пользователя запущенной службы с помощью systemctl |

🖧 Как определить пользователя запущенной службы с помощью systemctl

Мануал

Введение

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

Это могут быть программные компоненты, устройства и т.д.

⚙️ Как запустить сервис на привилегированном порту от обычного пользователя

В связи с широким распространением SystemD в качестве системы инициализации и системного менеджера в дистрибутивах Linux, мы все чаще видим ее использование в управлении сервисами.

Хотя это делает запуск служб более плавным, возникает много вопросов, касающихся безопасности системы и контроля доступа.

В этой статье мы рассмотрим командный инструмент systemctl, который мы используем для управления этой системой инициализации.

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

Понимание systemctl

Как уже говорилось, systemctl – это инструмент командной строки, который позволяет нам управлять и взаимодействовать с SystemD.

Он призван заменить устаревшую систему инициализации System V (SysVInit).

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

Давайте рассмотрим основной синтаксис использования systemctl:

systemctl [OPTIONS...] COMMAND [UNIT...]

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

systemctl
UNIT                                                                                     LOAD   ACTIVE     SUB       DESCRIPTION
proc-sys-fs-binfmt_misc.automount                                                        loaded active     running   Arbitrary Executable File...
dev-fuse.device                                                                          loaded activating tentative /dev/fuse
sys-devices-pci0000:00-0000:00:01.1-ata2-host1-target1:0:0-1:0:0:0-block-sr0.device      loaded active     plugged   VBOX_CD-ROM VBox_GAs_7.0.8
sys-devices-pci0000:00-0000:00:03.0-net-enp0s3.device                                    loaded active     plugged   82540EM Gigabit Ethernet...
sys-devices-pci0000:00-0000:00:05.0-sound-card0.device                                   loaded active     plugged   82801AA AC97 Audio...
sys-devices-pci0000:00-0000:00:0d.0-ata3-host2-target2:0:0-2:0:0:0-block-sda-sda1.device loaded active     plugged   VBOX_HARDDISK 1
sys-devices-pci0000:00-0000:00:0d.0-ata3-host2-target2:0:0-2:0:0:0-block-sda-sda2.device loaded active     plugged   VBOX_HARDDISK 2
sys-devices-pci0000:00-0000:00:0d.0-ata3-host2-target2:0:0-2:0:0:0-block-sda-sda5.device loaded active     plugged   VBOX_HARDDISK 5
sys-devices-pci0000:00-0000:00:0d.0-ata3-host2-target2:0:0-2:0:0:0-block-sda.device      loaded active     plugged   VBOX_HARDDISK
sys-devices-platform-serial8250-tty-ttyS0.device                                         loaded active     plugged   /sys/devices/platform/...
sys-devices-platform-serial8250-tty-ttyS1.device                                         loaded active     plugged   /sys/devices/platform/...
...

Давайте разберемся, что это значит:

  • UNIT: название устройств, которые SystemD в настоящее время имеет в памяти.
  • LOAD: показывает, правильно ли загружена конфигурация блока
  • ACTIVE: отображает статус устройства, если оно активно или нет
  • SUB: предоставляет более подробную информацию о блоке в зависимости от его типа или состояния
  • DESCRIPTION: отображает краткое описание того, чем является или занимается устройство.

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

Основные команды systemctl

Наиболее распространенными командами, которые помогают нам управлять запущенными службами в нашей системе, являются команды start, stop, restart и reload.

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

Чтобы проверить статус нашей службы MySQL, мы используем команду systemctl status:

systemctl status mysql
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2024-02-07 19:26:16 WAT; 2 weeks 3 days ago
Process: 846 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
Main PID: 1012 (mysqld)
Status: "Server is operational"
Tasks: 39 (limit: 4614)
Memory: 443.0M
CGroup: /system.slice/mysql.service
└─1012 /usr/sbin/mysqld
Feb 07 19:25:08 user systemd[1]: Starting MySQL Community Server...
Feb 07 19:26:16 user systemd[1]: Started MySQL Community Server.

Это дает нам ценные сведения о состоянии сервиса и другую информацию.

Мы можем разделить вывод на:

  • Loaded: показывает, загружено ли устройство в память.
  • Active: показывает активное состояние устройства
  • PID: идентификатор процесса
  • CGroup: cgroup службы

Этот вывод показывает, что наша служба mysql была загружена и запущена в нашей системе.

Теперь мы можем перейти к извлечению дополнительной информации об этой службе.

systemctl show

Хотя команда systemctl status отображает состояние службы, а также другую информацию в удобочитаемом формате, она инкапсулирует некоторые необходимые сведения.

Для получения более подробного, разбираемого компьютером вывода мы используем команду systemctl show.

systemctl show отображает свойства указанного устройства или службы.

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

Давайте рассмотрим общий синтаксис этой команды:

systemctl show [PATTERN...|JOB...]

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

Практические примеры

Давайте для примера воспользуемся сервисом mysql.

Предполагая, что мы хотим узнать больше об этой службе, мы используем:

systemctl show mysql
Type=notify
Type=notify
Restart=on-failure
PIDFile=/run/mysqld/mysqld.pid
...
UID=127
GID=134
...
AmbientCapabilities=
User=mysql
Group=mysql
DynamicUser=no
...

Как видите, здесь отображается информация о свойствах службы mysql в виде пары ключ-значение, запущенной в нашей системе.

Мы видим, что информация о пользователе, группе и UID также присутствует в этом выводе.

Как правило, пустые свойства в этом выводе игнорируются.

Чтобы вывести информацию о службе с указанными свойствами, мы используем флаг -all.

Дополнительные параметры и флаги

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

Но нас интересуют только некоторые свойства.

В качестве альтернативы можно использовать флаг -property или -p, чтобы получить и отобразить только те свойства, которые нам нужны.

В данном случае мы хотим увидеть сведения о пользователе, стоящем за запущенной службой:

systemctl show --property=User,DynamicUser,MainPID,Group mysql
MainPID=5284
User=mysql
Group=mysql
DynamicUser=no

Используя этот флаг, мы можем извлечь нужные нам свойства запущенной службы.

Как показано в нашем примере, мы используем запятую для разделения нескольких свойств, которые мы хотим извлечь.

В результате мы можем определить пользователя, группу и MainPID для службы mysql

Использование

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

Ранее мы рассматривали службу mysql, которая может работать в масштабах всей системы.

Но давайте рассмотрим некоторые службы, которые зависят от пользователя. Для этого нового примера мы используем службу syncthing.

Syncthing – это одноранговое приложение синхронизации с открытым исходным кодом, используемое для синхронизации файлов между устройствами по сети.

Давайте установим его на наше устройство:

sudo apt-get install syncthing
Reading package lists... Done
Building dependency tree
Reading state information... Done
...
Preparing to unpack .../syncthing_1.1.4~ds1-4ubuntu1.2_amd64.deb ...
Unpacking syncthing (1.1.4~ds1-4ubuntu1.2) ...
Setting up syncthing (1.1.4~ds1-4ubuntu1.2) ...
Created symlink /etc/systemd/system/sleep.target.wants/syncthing-resume.service → /lib/systemd/system/syncthing-resume.service.
Processing triggers for mime-support (3.64ubuntu1) ...
...
Rules updated for profile 'Apache'
Firewall reloaded

Далее давайте проверим состояние нашей службы без указания пользователя:

sudo systemctl status syncthing
Unit syncthing.service could not be found.

Мы видим, что эта служба не может работать в масштабах всей системы или сервера.

Далее давайте включим ее запуск только для определенного пользователя:

sudo systemctl enable --now syncthing@itsecforu
Created symlink /etc/systemd/system/multi-user.target.wants/syncthing@itsecforu.service → /lib/systemd/system/syncthing@.service.

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

Давайте проверим состояние запущенной службы с указанным пользователем:

sudo systemctl status syncthing@itsecforu
● syncthing@itsecforu.service - Syncthing - Open Source Continuous File Synchronization for baledung
Loaded: loaded (/lib/systemd/system/syncthing@.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2024-02-26 10:53:36 WAT; 7s ago
Docs: man:syncthing(1)
Main PID: 9442 (syncthing)
Tasks: 11 (limit: 4614)
Memory: 22.1M
CGroup: /system.slice/system-syncthing.slice/syncthing@itsecforu.service
└─9442 /usr/bin/syncthing -no-browser -no-restart -logflags=0
...
Feb 26 10:53:38 itsecforu syncthing[9442]: [INFPV] INFO: TCP listener ([::]:22000) starting

Теперь мы видим, что служба работает под пользователем itsecforu.

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

systemctl status syncthing@root
● syncthing@root.service - Syncthing - Open Source Continuous File Synchronization for root
Loaded: loaded (/lib/systemd/system/syncthing@.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:syncthing(1)

Здесь мы видим, что все предыдущие настройки, которые мы делали для службы syncthing, запущенной от имени itsecforu , не отражаются для root.

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

Заключение

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

Мы рассмотрели различные команды, такие как start, stop, reload и status.

Кроме того, мы рассмотрели способы определения пользователя запущенной службы с помощью systemctl show.

И наконец, мы увидели практические примеры того, как эти знания необходимы для эффективного системного администрирования.

см. также:

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий