Что самое легкое в оболочке script, чтобы гарантировать, что она не будет выполняться как root?

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

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

Ответ 1

Пример в bash:

if [ `id -u` = 0 ]; then
  echo "You are root, go away!"
  exit 1
fi

Ответ 2

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

Ответ 3

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

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

# actual script commands here.

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

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

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