Что проще всего в сценарии оболочки, чтобы убедиться, что он не запускается от имени пользователя root? - PullRequest
10 голосов
/ 28 июня 2010

У меня есть приложение Java, выполненное из ([ba] sh) сценария оболочки, и, к сожалению, иногда люди, ответственные за его развертывание и запуск, не могут переключиться на соответствующего пользователя перед запуском приложения. В этой ситуации я бы хотел, чтобы приложение не запускалось по крайней мере, и в идеале выдает предупреждение, чтобы этого не делать. Я думал о том, чтобы попытаться создать псевдоним java или изменить путь для root, чтобы включить поддельную java, которая делает это, но это может иметь нежелательные побочные эффекты и не будет эффективным, поскольку сценарий оболочки указывает полный путь к двоичному файлу java. ,

Итак, есть ли в скриптах оболочки стандартная идиома "не запускай, если я root"?

Ответы [ 3 ]

13 голосов
/ 28 июня 2010

Пример в bash:

if [ `id -u` = 0 ]; then
  echo "You are root, go away!"
  exit 1
fi
1 голос
/ 29 июня 2010

Я использую что-то вроде этого в начале сценариев, которые я хочу запустить под учетной записью службы:

LUSER='my-service'
if [ `id -un` != $LUSER ]; then
    exec su  $LUSER -s $SHELL -c "$0 $@"
fi

# actual script commands here.

Если запустить как правильный пользователь, выполнение будет продолжено, как запланировано.При запуске от имени root привилегии сбрасываются до требуемого идентификатора пользователя.Другие пользователи получат запрос пароля, который должен сообщить им, что что-то не так.

su -s $SHELL ... используется для переопределения оболочки, установленной в /etc/passwrd - для учетной записи службы может быть установлено значение /bin/false.

Я использовал это в системах Debian, используя bash и dash.Не стесняйтесь комментировать, если мобильность может быть улучшена.

1 голос
/ 28 июня 2010

В BASH вы можете взять вывод whoami и сравнить его с root.

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