Скажите, если пользователь SUu в сценарии оболочки? - PullRequest
2 голосов
/ 20 января 2010

У меня есть скрипт, который выполняет git-pull при регистрации различные причины, потому что я не тот пользователь. Есть ли способ определить в сценарии оболочки, я в настоящее время SUing? Я ищу способ, который не требует жесткого кодирования моего имени пользователя в сценарии, что является моим текущим решением. Я использую Bash и ZSH в качестве оболочек.

Ответы [ 5 ]

4 голосов
/ 20 января 2010

Вы можете использовать вывод команды who с командой id :

WHO=`who am i | sed -e 's/ .*//'`
ID_WHO=`id -u $WHO`
ID=`id -u`
if [[ "$ID" = "$ID_WHO" ]]
then
    echo "Not su"
else
    echo "Is su"
fi
0 голосов
/ 23 января 2010

Вы можете использовать переменную окружения "$ UID".

Если его значение равно нулю, то у пользователя SUDO ed .. Bcos root как $ UID == 0

0 голосов
/ 20 января 2010

Если вы меняете идентификационные данные пользователя с помощью исполняемого файла suid, ваш реальный и эффективный идентификатор пользователя будет другим. Но если использовать use su (или sudo), они оба будут установлены для нового пользователя. Это означает, что команды, которые вызывают getuid () или geteuid (), не будут полезны.

Лучший способ - проверить, кому принадлежит терминал, на котором запущен скрипт. Это, очевидно, не будет работать, если процесс отсоединился от своего терминала, но если сценарий не запущен демоном, это маловероятно. Попробуйте stat -c %U $(tty). Я верю, что who am i будет делать то же самое на большинстве Unix-подобных ОС.

0 голосов
/ 20 января 2010
if test "$(id -u)" = "0"; 
  : # commands executed for root
else
  : # commands executed for non root
fi
0 голосов
/ 20 января 2010

Ну .... в Linux, если я su для другого пользователя, процесс su будет в списке процессов нового пользователя.

Судо ... не оставляет таких приятных вещей для тебя.

Я использую zsh ... но я не думаю, что что-то в этом зависит от оболочки.

если:

% пс | grep "su $"

возвращает что угодно, значит, вы работаете в такой оболочке.

Примечание: перед su $ есть пробел, чтобы исключить команду, заканчивающуюся на su. Однако не защищает от любых пользовательских программ / скриптов, называемых su.

...