Запуск сервиса от имени пользователя 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, который принимает имя пользователя и исполняемый файл в качестве параметров.

Другие вопросы по тегам