Налаштування Systemd Services для запуску з кореневим доступом


21

У мене є сервіс у вигляді програми node.js, створеної разом із Systemd на Raspbian Jessie, і він використовує власний обліковий запис користувача. Однак я вважаю, що служба працює не правильно, оскільки не має необхідних дозволів. Один із встановлених мною вузлів модулів потребує кореневого доступу. Якщо я запускаю програму вручну з sudo, все працює добре.

Чи є спосіб сказати systemd запустити службу з sudo?


2
Як виглядає ваш одиничний файл, додайте його до свого запитання? Зазвичай systemdзапускає файли одиниць із правами root.
— Томас

Відповіді:


31

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

sudo нічого спільного з цим не має.

Зазвичай ви даєте вказівку systemd запускати послугу як певний користувач / група з a User=і Group=директивою в [Service]розділі файлу модуля.

Встановіть їх на root (або видаліть їх, оскільки за замовчуванням працює як root).


У мене він був налаштований на використання конкретного користувача, оскільки я використовував посібник для його налаштування. Однак у моєму випадку це було не доречно. Я видалив це, щоб запустити як root за замовчуванням, і тепер все працює!
— Лука

2
Запуск як root не зовсім збігається з запуском User=root. Дивіться мою відповідь.
— Марк Стосберг

Де цей файл можна редагувати?
— Матвій


15

Щоб зрозуміти, systemdсистемні служби запускаються як root за замовчуванням, але все ще існує різниця між поведінкою за замовчуванням та запуском системної службиUser=root .

Як задокументовано змінними Середовища в породжених процесах , ці змінні встановлюються лише якщо User=встановлено:

$USER, $LOGNAME, $HOME, $SHELL

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


Дякую! Це було єдине, що працювало для мене над додатком, який я маю
— Педро Торрес

Зверніть увагу: якщо ви встановите User = root, ви, мабуть, також повинні встановити Group = root :) superuser.com/a/1452367/39364
— rogerdpack

2

тимчасове рішення, але він змусив його працювати в дрібному вигляді:

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

Може працювати з користувачем, який має привілеї sudo у файлі системного блоку так:

[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. По-третє, ваш веб-додаток повинен стояти за звичайним веб-сервером, таким як nginx.
— Майкл Хемптон

Я не погоджуюся з вами ні в одному з ваших питань. Але якщо хтось, як я, хотів, щоб голі кістки, як-швидко, як ви можете створити сервер, це життєздатний варіант, який працює.
— daino3

Майже так швидко, як ви можете. Очевидно, що використання sudoтрохи уповільнить запуск. І це зайве.
— Майкл Хемптон

@MichaelHampton Я намагаюся написати бекдор, тому я вважаю цю відповідь корисною!
— П. Суцикевич

1

Запустити його як системного користувача в цьому випадку за замовчуванням служба працює як root.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.