Как настроить службу systemd для запуска пользователем без полномочий root в качестве демона пользователя?
40429
Hans
Я только что закончил процесс установки и настройки systemd в моей системе arch-linux (2012.09.07). Я удалил initscripts(и удалил файлы конфигурации).
Я хочу создать сервис, который может запускаться и останавливаться пользователем без полномочий root. Служба запускает отдельный сеанс экрана с запущенным rtorrent. Однако я хочу, чтобы каждый пользователь в системе, который установил этот сервис для запуска (включения), имел конкретный экземпляр, запущенный для них специально. Как можно это сделать?
Я помню, что читал, что systemd поддерживает пользовательские экземпляры сервисов, однако мне не удалось найти какую-либо информацию о том, как это настроить, или имеет ли это отношение к тому, что я ищу.
Сервисный файл, который я использовал для системы:
Прочитав страницы руководства здесь и здесь, я понимаю, как systemd работает немного лучше. В частности, использование параметров User=и WorkingDirectory=позволяет запускать службу в сеансе пользователя. Однако этот вопрос до сих пор остается то, что сами по себе пользователь не может start, stop, enableили disableуслуги. Доступ запрещен ошибки определяется systemctl.
ОБНОВЛЕНИЕ № 2 :
Во-первых, для упрощения и лучшего использования функции сеанса пользователя systemd (все еще несколько незавершенной) я использовал блоки пользователя сеанса пользователя sofar и следовал его советам по настройке.
Похоже, в текущей версии DBus (1.6.4-1) есть ошибка, из-за которой она не устанавливает DBUS_SESSION_BUS_ADDRESSзначение переменной окружения, используя systemctl --userкоманду error с:
Failed to get D-Bus connection: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
Я понимаю, что можно создать отдельный служебный файл для каждого пользователя и просто включить его. Однако я просто хочу знать, возможно ли это так, как я описал это выше.
Hans 12 лет назад
0
Честно говоря, я мог бы просто настроить sudo для пользователей и заставить их, как уже упоминалось в моем комментарии выше, управлять своим собственным служебным файлом. Однако это решение позволит пользователю контролировать большинство других служб ...
Hans 12 лет назад
0
Этого бы не произошло, если бы вы прочитали документацию `sudo` - у * sudoers (5) * есть много примеров ограничения аргументов команды.
grawity 12 лет назад
0
1 ответ на вопрос
18
grawity
Обычно systemd не позволяет обычным пользователям запускать системные службы. Хотя он поддерживает предоставление доступа через polkit, этой части все еще не хватает, и вы пока не можете разрешить только одну конкретную службу.
Поскольку rtorrent на самом деле не системная служба и вы хотите, чтобы у каждого пользователя был свой экземпляр rtorrent, поэкспериментируйте с режимом systemd «пользователь».
Когда вы входите в систему, система запустит user@<uid>.serviceдля вас системный блок, который запустит отдельный экземпляр «--user» systemd. Новый user-systemd будет читать файлы модулей (начиная с default.target) из ~/.config/systemd/user/, /etc/systemd/user/и /usr/lib/systemd/user/.
Спасибо, благодарность, это было в основном то, чего мне не хватало. Однако это также оказалось проблемой DBus: в dbuse есть ошибка, которая не устанавливает правильную глобальную переменную `DBUS_SESSION_BUS_ADDRESS` для данного пользователя, поэтому systemctl не может получить доступ к сеансу пользователя, это ошибки наши. Как только я понял эту маленькую проблему, все остальное работает прекрасно!
Hans 12 лет назад
1