Процес запуску як інший користувач / група (у сценарії init.d)


10

Я редагую сценарій init.d. Сценарій init.d запускає скрипт утиліти, який потім запускає процес. З будь-якого сценарію bash, як би я змусив його запустити основний процес як конкретного користувача та групи?

Відповіді:


12

Найпростіший спосіб - використовувати команду su (1), вона має опцію, яка дозволяє запускати команду через оболонку користувача, наприклад:

su foo -c ls

Це переключиться на foo користувача та виконає команду ls. Якщо користувач, якого ви хочете використовувати, не має дійсної оболонки (тобто не знаходиться в / etc / shell, як / bin / false або / sbin / nologin), вам також доведеться вказати оболонку в командному рядку. Приклад з виходом:

# su nobody -s /bin/bash -c id
uid=99(nobody) gid=99(nobody) groups=99(nobody) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

су, здається, це не подобається, я даю йому багато аргументів. Я отримую Usage: su [options] [LOGIN]таsu: unrecognized option '--debug'

Це не зовсім працює. Коли я виконую цей рядок як корінь, я отримую помилку, su www-data -c ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &якщо я su www-dataвстановив усі VARS і запускаю, ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &він працює добре. Як я вирішую це?

2
@ acidzombie24 suприймає єдиний аргумент, який є командною оболонкою. Вам потрібно написати su www-data -c '$MONOSERVER "/application=$WEBAPPS" "/socket=unix:/path/monoserve.pid"'та переконатися, що це MONOSERVERі WEBAPPSекспортується материнською оболонкою. (Примітка: цього не робити su … -c "$MONOSERVER …", якщо будь-яка зі змінних містить спеціальні символи оболонки.) А якщо у вас є виділений інструмент запуску демонів, наприкладstart-stop-daemon , використовуйте його.
Жил "ТАК - перестань бути злим"

Жил: Гаразд, я не замінюю сценарій init.d тим, що я? Я можу помістити всі змінні в новий сценарій і запустити, що як це легко, і мені не доведеться нічого вивчати. Але що такого особливого у старт-стоп-демон? Я залишу коментар до цієї відповіді

Чи краще використовувати su або su -login? Я читав людину су, але не можу зрозуміти для цього конкретний випадок
Массімо

4

Якщо start-stop-daemonвін доступний у вашій системі, ви, ймовірно, повинні ним користуватися і ознайомитись з його параметрами (особливо -uі -gв цьому випадку).

(Інакше ви можете використовувати комбінацію suта sg.)

Оновлення: Ось приклад, взятий з деякого /etc/init.d/mpdсценарію (який використовує start-stop-daemon):

  • Команда запуску:

    echo "Starting Music Player Daemon"
    start-stop-daemon --start --quiet --background --exec /usr/bin/mpd \
        --pidfile /var/run/mpd.pid --make-pidfile \
        -- --no-daemon /etc/mpd.conf 2>/dev/null
    

    Все, що випливає, --- це аргумент самої /usr/bin/mpdпрограми. (Процедура демонізації опікується сценарієм старт-стоп-демон, тому mpdпросять не турбуватися про це --nodaemon.)

  • Команда зупинки:

    echo "Stopping Music Player Daemon"
    start-stop-daemon --stop --exec /usr/bin/mpd --pidfile /var/run/mpd.pid
    

Якщо mpdне падали привілеї самого по собі, можна було б необхідно додати (наприклад) -u mpd, -g mpdопцію до start-stop-daemonкоманді.


Я не замінюю скрипт init.d на старт-стоп-демон, я? чи не буде простіше використовувати su та файл скрипту? Якщо я заміню init.d, як встановити його для запуску при запуску? що я переходжу до старту-стопа-демона? -edit- Мені є приклади гугл банкомат, можливо, мені не потрібна відповідь, але мені здається, що це буде складна відповідь

2
Не вдалося. Ось моя лінія. Він як і раніше працює як корінь. Я перевірив сторінки чоловіків, і я все ще не знаю, що з цим робити. start-stop-daemon --start --quiet --background -u www-data -g www-data --exec ${MONOSERVER} --pidfile /path/monoserve.pid --make-pidfile -- /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.