Переключить пользователя в сценарии инициализации? - PullRequest
8 голосов
/ 20 января 2012

Вот мой скрипт Init, который есть у меня на рабочей станции Ubuntu.Мне нужно запустить команду от имени другого пользователя, кроме root, но я просто не могу понять, как это сделать.Кажется, что не работает ни sudo -u, ни su newuser.

Сценарий:

respawn
console none

start on runlevel [2345]
stop on runlevel [06]

script
  su "anotherUser" -c ./myCommand
end script

Ответы [ 3 ]

18 голосов
/ 20 января 2012

Я использую это:

su -l $MUSER -c "myCommand args..."

Обновление : Поскольку этот ответ интересен, я объясняю, как я его здесь использую.

Мы запускаем серверы как обычные пользователи linux, а не как root. Имя пользователя состоит из трех частей:

сервис, заказчик, этап

Таким образом, мы можем запустить несколько служб для нескольких клиентов в одной ОС Linux.

Пример: foo_bar_p Сервис "foo" клиента "bar" и "p" означают производство

Вот часть сценария инициализации. Сценарий инициализации может быть выполнен как пользователь root или как пользователь foo_bar_p:

# /etc/init.d/foo_bar_p-celeryd
# scriptname contains linux username  
SCRIPT_NAME=`basename "$0"`
SYSTEM=${SCRIPT_NAME%*-celeryd}

U=`id -nu`

if [ ! $U == $SYSTEM ]; then
    if [ $U == "root" ]; then
        # use "-l (login)" to delete the environment variables of the calling shell.
        exec su -l $SYSTEM -c "$0 $@"
    fi
    echo "Script must be run from $SYSTEM or root. You are '$U'"
    rc_exit 1
fi

# OK, now I am foo_bar_p
cd
. $HOME/.bashrc
....
6 голосов
/ 30 марта 2013

Для выскочки используйте:

setuid myuser
exec command args
1 голос
/ 29 июня 2012

su, вероятно, является более универсальным подходом, но это также возможно в некоторых распространенных дистрибутивах с sudo:

sudo -u $MUSER $COMMAND $ARGS

(просто перечитал ваш вопрос и не понял, что это не работает для вас, но он работал для меня в сценариях инициализации)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...