Сценарий оболочки и sudo - PullRequest
1 голос
/ 11 августа 2009

В моем сценарии оболочки у меня есть следующая строка:

export PATH=$PATH:/home/$USER/somedir

Скажите, что я вошел как пользователь mike. Мне нужно выполнить скрипт оболочки как root, поэтому я запускаю его как sudo filename.sh, так что в этом случае $ USER становится root на моем пути.

Я хочу, чтобы это был пользователь, выполняющий сценарий, то есть Майк вместо root. Есть ли способ добиться этого?

Спасибо

Ответы [ 6 ]

5 голосов
/ 11 августа 2009

У вас есть для использования /home/$USER, или $HOME поможет? IIRC, sudo не переопределяет значение $HOME.

1 голос
/ 11 августа 2009

Используйте $SUDO_USER (если вы настаиваете на использовании $USER напрямую, установите его значение, как показано):

$ cat script.sh
#!/bin/bash

if [ "$SUDO_USER" != "" ]; then
  USER=$SUDO_USER;
fi

export PATH=$PATH:/home/$USER/somedir

Или обмануть, используя $USER в качестве первого параметра для скрипта (проверка ошибок - упражнение для читателя):

$ cat script.sh
#!/bin/bash
USER=$1

export PATH=$PATH:/home/$USER/somedir

Тогда:

$ sudo ./script.sh $USER

Или используйте $HOME, как предложено Крисом Джестер-Янгом. Вы можете использовать bash для удаления префикса "/ home /", но это будет уродливым хаком.

0 голосов
/ 12 августа 2009

sudo отличается от "root" пользователя. Если у любого пользователя есть привилегии sudo, это означает, что он имеет права администратора, которые доступны пользователю root. То есть использование sudo не меняет пользователя на root.

0 голосов
/ 11 августа 2009

Если вам нужно сохранить окружающую среду, вы можете использовать опцию -E sudo. Но для этого нужна некоторая конфигурация и политика безопасности ... Это применимо, если предложенное Крисом JY решение $ HOME не применимо, поскольку оно проще.

мои 2 цента

0 голосов
/ 11 августа 2009

Вы можете попробовать использовать $ UID, для которого все равно следует установить действительный идентификационный номер пользователя и извлечь его имя из базы паролей на основе этого.

0 голосов
/ 11 августа 2009

Если вы хотите использовать su вместо sudo, вы можете сделать

su -cp filename.sh

для выполнения команды при сохранении вашей среды.

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