Виконати сценарій з rc.local як користувач замість root


26

Я хочу виконувати сценарій щоразу, коли мій сервер запускається. Проблема полягає в тому, що мені потрібно бути певним користувачем, щоб виконати сценарій, якщо я спробую це зробити як root, він не можу знайти певні пакети (наприклад, ruby).

Я намагаюся змінити на xxx user01.

sudo su user01
/etc/init.d/script start

Однак це не працює.


Опублікувати свій сценарій init?
кванта

У вас є журнали?
Дом

Чому ви просто не використовуєте suв скрипті rc?
Мат

Відповіді:


30

Запуск sudo su user01у скрипті не означає, що наступні команди надсилаються до оболонки, що виходить. Насправді це, ймовірно, означає, що нова оболонка породжується як user01, яка ніколи не виходить!

Дві речі:

  • Ви можете виконати команду як інший користувач, передавши -c 'command...'аргумент в su, наприклад su user01 -c '/etc/init.d/script start'.
  • Запуск послуги, яка використовує /etc/init.d з rc.local - це не правильно. Ви хочете використовувати функцію включення послуги при запуску, використовуючи ваші інструменти розповсюдження, як-от chkconfigабо update-rc.d. Ви також не хочете завдань у /etc/init.d, які не слід запускати як root. Самі завдання можуть сміливо перенаправлятись до іншого облікового запису користувача, але його слід викликати root.


4

Ви можете просто запустити команду через sudo так:

sudo -H -u user01 /etc/init.d/script start

-H встановлює змінну середовища HOME у відповідності до такої у користувача

-u вказує ім'я користувача, яке запускається як


0

Напевно, ви не можете запустити цей скрипт із sudo через musttty (примушує, що користувачі повинні входити в систему) у sudoers. Можливо, ви хочете відключити, що є дещо ризикованим

Також є дещо старий інструмент, який називається runuid: http://freecode.com/projects/runsuid

HTH

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