Запуск сервиса от имени пользователя root
Может ли кто-нибудь помочь нам понять, как правильно запустить службу наших программ в качестве пользователя служб (например, marty).
Мы используем init.d для запуска нашего процесса (Java-приложение), но когда система (ы) загружается (Ubuntu и Debian) из-за того, что служебный скрипт запускается как root, у нас возникают проблемы, когда приложение запускается как root также и файл PID создается root, что портит все.
Мы пытались использовать sudo, но это не очень хорошее решение, так как мы не хотим, чтобы процесс sudo работал с нашим приложением как дочерний процесс, плюс нам нужно, чтобы он работал на других системах, которые могут не иметь sudo. Пожалуйста помоги.
2 ответа
В сценарии инициализации вы можете проверить $UID вызывающего пользователя.
Если это root, вы можете запустить сервис с помощью "runuser". Если это marty - запустите его напрямую, если это другой пользователь - выйдите с ошибкой, например.
Вот пример bash (не проверено):
start() {
if [ $UID -eq 0 ]; then
runuser -s /bin/bash marty -c "$DAEMON start $DAEMONOPTS"
elif [ "$USER" = "marty" ]; then
$DAEMON start $DAEMONOPTS
else
print "Please run me with root or marty."
exit 2
fi
}
То же самое для остановки и любых других функций, как требуется.
Не стесняйтесь изменять команду runuser по мере необходимости, возможно, вам не понадобится оболочка, например.
Используйте start-stop-daemon, который принимает имя пользователя и исполняемый файл в качестве параметров.