Запуск службы от имени пользователя без полномочий root

Может ли кто-нибудь помочь нам понять, как правильно запустить службу наших программ в качестве пользователя службы (например, Марти).

Мы используем init.d для запуска нашего процесса (java-приложение), но когда система (ы) загружается (Ubuntu и Debian), поскольку служебный скрипт запускается от имени пользователя root, у нас возникают проблемы, когда приложение запускается от имени пользователя root. тоже, и файл PID создается пользователем root, что все портит.

Мы пробовали использовать sudo, но это не лучшее решение, так как мы не хотим, чтобы процесс sudo работал вместе с нашим приложением в качестве дочернего процесса, плюс нам нужно, чтобы это работало в других системах, которые могут не иметь sudo. Пожалуйста помоги.


person Atomiklan    schedule 26.02.2015    source источник


Ответы (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 по мере необходимости, возможно, например, вам не понадобится оболочка.

person dgeorgiev    schedule 27.02.2015

Используйте start-stop-daemon, который принимает имя пользователя и исполняемый файл в качестве параметров.

person Sergey Grigoriev    schedule 27.02.2015