Включить службу только для конкретного пользователя (UBUNTU)

Вопрос или проблема

  1. В настоящее время я пишу файл юнита сервиса в Ubuntu, и я хочу, чтобы сервис был включен только для одного пользователя UserA. Сервис будет запускаться автоматически, когда UserA входит в систему, но не для других пользователей. Как я могу это сделать?

Ниже приведен мой юнит-файл, размещенный в /etc/system

[Unit]
Description=Тестовый юнит

[Service]
ExecStart=/bin/sh -c 'echo test > /home/UserA/sysdworking'

[Install]
WantedBy=multi-user.target
  1. Является ли это общепринятой практикой? Или все сервисы должны быть системными?

То, что вы ищете, это юниты systemd для пользователей. Когда вы помещаете ваш юнит-файл в ~/.config/systemd/user, systemd автоматически запустит ваш сервис, когда вы войдете в систему.

Из приведенной ссылки:

Согласно настройкам по умолчанию в /etc/pam.d/system-login, модуль pam_systemd автоматически запускает экземпляр systemd –user, когда пользователь входит в систему в первый раз. Этот процесс будет существовать до тех пор, пока есть сессия для этого пользователя, и будет завершен, как только последняя сессия пользователя будет закрыта. Когда #Автоматический запуск экземпляров systemd для пользователей включен, экземпляр запускается при загрузке и не будет завершен. Экземпляр systemd для пользователя отвечает за управление пользовательскими сервисами, которые могут использоваться для запуска демонов или автоматизированных задач, со всеми преимуществами systemd, такими как активация по сокету, таймеры, система зависимостей или строгий контроль процессов через cgroups.

.

Ответ или решение

Для того чтобы включить систему службы (service) в Ubuntu только для конкретного пользователя, вам необходимо воспользоваться механикой, предоставляемой системой systemd. В вашем случае вы хотите, чтобы служба автоматически запускалась при входе пользователя UserA, а не для всех пользователей системы. Это достигается путем использования пользовательских (user) юнитов systemd.

Шаги для настройки службы только для пользователя UserA

  1. Создание файла юнита в домашней директории пользователя:
    Вам нужно создать файл юнита для systemd в директории ~/.config/systemd/user/. Это позволит системе запускать службу только для UserA.

    Выполните следующие команды:

    mkdir -p /home/UserA/.config/systemd/user/
    nano /home/UserA/.config/systemd/user/test.service
  2. Наполнение файла юнита:
    Внутри файла test.service добавьте следующее содержание:

    [Unit]
    Description=Тестовая служба для UserA
    
    [Service]
    ExecStart=/bin/sh -c 'echo test > /home/UserA/sysdworking'
    
    [Install]
    WantedBy=default.target

    Здесь:

    • Description — это описание, которое будет отражать суть службы.
    • ExecStart — команда, которая будет выполняться при запуске службы.
    • WantedBy=default.target указывает, что служба будет запускаться в контексте сеанса пользователя.
  3. Активация и запуск службы:
    После создания файла юнита нужно активировать и запустить службу. Это можно сделать с помощью следующей команды:

    systemctl --user enable test.service
    systemctl --user start test.service

    Обратите внимание, что для работы с юнитами systemd от имени пользователя необходимо использовать опцию --user.

  4. Проверка статуса:
    Чтобы убедиться, что служба успешно запущена, выполните команду:

    systemctl --user status test.service

Часто задаваемые вопросы

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

2. Стоит ли делать службы системными?
Системные службы (/etc/systemd/system/), как правило, необходимы для фоновых служб и даем возможность осуществлять управление процессами на уровне системы с доступом ко всем ресурсам. Однако для задач, специфичных для пользователя, пользовательские юниты обеспечивают большую гибкость и конфиденциальность.

Заключение

Используя этот подход с файлами юнитов в ~/.config/systemd/user/, вы можете эффективно управлять отдельными сервисами для конкретного пользователя. Это не только упрощает управление, но и делает вашу систему более безопасной и стабильной.

Оцените материал
Добавить комментарий

Капча загружается...