barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

среда, 3 августа 2011 г.

Запуск скриптов /etc/init.d/ от пользователя, отличного от root

Скрипты в /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

Комментариев нет:

Отправить комментарий