Назад | Перейти на главную страницу

Настройка службы Systemd для запуска с корневым доступом

У меня есть служба в виде приложения node.js, настроенного с помощью Systemd на Raspbian Jessie, и оно использует свою собственную учетную запись пользователя. Однако я обнаружил, что служба не работает правильно, потому что у нее нет необходимых разрешений. Для одного из установленных мной узловых модулей требуется root-доступ. Если я запускаю приложение вручную с помощью sudo, все работает нормально.

Есть ли способ сказать systemd запустить службу с помощью sudo?

скажите systemd запустить службу с sudo?

sudo не имеет к этому никакого отношения.

Обычно вы указываете systemd запускать службу от имени конкретного пользователя / группы с User= и Group= директива в [Service] раздел файла модуля.

Установите для них root (или удалите их, поскольку по умолчанию используется root).

Очистить, systemd системные службы по умолчанию запускаются от имени пользователя root, но по-прежнему существует разница между поведением по умолчанию и запуском системной службы с User=root.

Как указано в Переменные среды в порожденных процессах, эти переменные устанавливаются, только если User= установлено:

$USER, $LOGNAME, $HOME, $SHELL

Я проверил, чтобы подтвердить этот вывод. Поэтому, если вы хотите запустить службу systemd от имени пользователя root, которой требуется одна из указанных выше переменных, вам необходимо установить User=root.

временное решение, но заставило его работать в крайнем случае:

/usr/bin/sudo /bin/bash -lc 'bundle exec rails server -e demo -p 80'

Может работать с пользователем, имеющим права sudo, в файле модуля systemd, например:

[Unit]
Description=Rails Webserver
After=syslog.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/var/www/webserver
ExecStart=/usr/bin/sudo /bin/bash -lc 'bundle exec rails server -e demo -p 80'
Restart=always
KillSignal=SIGQUIT

[Install]
WantedBy=multi-user.target

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