Скрипты в /etc/init.d/ выполняются от root-а, что иногда совсем не нужно. Сменить пользователя через su, если у пользователя установлен пароль - тоже не вариант. Решается задача с помощью вынесения всей логики из init-скрипта в отдельный файл, и запуска этого скрипта в init-скрипте с помощью программы /sbin/start-stop-daemon, позволяющей сменить пользователя, из-под которого будет выполняться вызываемая программа / скрипт. start-stop-daemon, кроме смены пользователя, умеет также демонизировать (отправлять в фон) запускаемую программу. Вот пример вызова скрипта с демонизацией (ключ -b), сменой пользователя на "user1", выводом отладочных сообщений (-v) и передачей скрипту цели вызова init-скрипта (start/stop/status и т.п.):
/sbin/start-stop-daemon -S -v -b -x "$PATH_TO_MY_SCRIPT" --user user1 --chuid user1 -- "$1"
Вообще, параметры вызываемой программе передаются указанием их после двойного дефиса ("--"). Непосредственно за смену пользователя отвечает опция --chuid, что делает --user я до конца не понял (в контексте именно запуска, а не остановки чего-либо), но на всякий случай и там указал "user1".
Подробнее о start-stop-daemon написано тут: http://help.ubuntu.ru/wiki/start-stop-daemon
/sbin/start-stop-daemon -S -v -b -x "$PATH_TO_MY_SCRIPT" --user user1 --chuid user1 -- "$1"
Вообще, параметры вызываемой программе передаются указанием их после двойного дефиса ("--"). Непосредственно за смену пользователя отвечает опция --chuid, что делает --user я до конца не понял (в контексте именно запуска, а не остановки чего-либо), но на всякий случай и там указал "user1".
Подробнее о start-stop-daemon написано тут: http://help.ubuntu.ru/wiki/start-stop-daemon
Комментариев нет:
Отправить комментарий