Como posso saber se o zsh está sendo executado com privilégios?

1

No meu .zshrc, tenho comandos que iniciam instâncias de vários programas, como o Mozilla Firefox e o Evolution. Eu obviamente não quero lançá-los como root, então eu quero verificar se sou root antes de iniciá-los. Como faço isso?

    
por Demi 15.12.2013 / 04:05

1 resposta

2

Você pode usar, por exemplo, tal declaração condicional:

PRGCMD="firefox"
PRGUSR="user"
if [[ $UID == 0 || $EUID == 0 ]]; then
   # root
   echo Running programm as User $PRGUSR
   sudo -u $PRGUSR ${(z)PRGCMD}
else
   ${(z)PRGCMD}
fi

Ele verifica primeiro se o ID do usuário real ou o ID do usuário efetivo é zero , ou seja, root .

Em caso afirmativo, ele usa sudo para executar o programa definido na variável PRGCMD como o usuário definiu na variável PRGUSR . (Você pode omitir esta linha se quiser apenas a mensagem de aviso).

${(z)PRGCMD} divide palavras como se a linha de comando zsh no caso PRGCMD contenha espaços, ou seja, parâmetros para o programa.

Uma variante curta, que apenas executa o programa como não-raiz, é: [[ $UID != 0 || $EUID != 0 ]] && firefox

Além disso, talvez você queira incluir %# em seu prompt, para que você possa ver que seu shell atual é privilegiado. De man zshmisc :

%#     A '#' if the shell is running with privileges, a '%' if not.  Equivalent to '%(!.#.%%)'.  The definition of 'privileged', for  these
       purposes,  is that either the effective user ID is zero, or, if POSIX.1e capabilities are supported, that at least one capability is
       raised in either the Effective or Inheritable capability vectors.

O código que julga se o shell está sendo executado com privilégios (definido em privasserted() in utils.c ) pode IMHO não ser feito no código shell, então se você quiser exatamente o mesmo comportamento é provavelmente o melhor para analisar a saída da expansão de prompt %# :

[[ $(print -P "%#") == '#' ]] && echo shell privileged || echo shell not privileged
    
por 15.12.2013 / 11:33