Налаштування 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.