No Mountain Lion, host Coguaro
, eu faço login como usuário coconutpowder
usando bash
:
Coguaro:~ coconutpowder$ echo $0
-bash
Eu preciso executar um comando com privilégios elevados, então tento su
mudar para root
, mas não me permite:
Coguaro:~ coconutpowder$ su -
Password:
su: Sorry
Feir o suficiente. Eu li a página man
de su
e obtenho isto:
PAM is used to set the policy su(1) will use.
In particular, by default only users in the ''admin'' or ''wheel''
groups can switch to UID 0 (''root'').
Noto que não faço parte de nenhum dos grupos com permissão para su
ao fazer isso:
Coguaro:~ coconutpowder$ id
uid=502(coconutpowder) gid=20(staff) groups=20(staff),12(everyone),61(localaccounts)
para que eu execute novamente o comando su
prefixando-o com um sudo
, que tenho permissão para fazer como estou em /etc/sudoers
:
/etc/sudoers: coconutpowder ALL=(ALL) ALL
Coguaro:~ coconutpowder$ sudo su -
Coguaro:~ root# echo $USER $0 $BASH_VERSION
root -sh 3.2.48(1)-release
Coguaro:~ root#
Agora, tenho o que considero um cenário problemático, pois estou executando sh
para o que eu vejo, que é meu shell de login para root
, mas tenho a variável de ambiente BASH_VERSION
definida em meu login anterior, transmitido pelo mecanismo sudo
? Corrija-me se estiver errado.
Isso significa alguns truques de detecção de shell como este intervalo:
if [ ${BASH_VERSION-not_running_within_bash} = not_running_within_bash ]; then
# ...
fi
Estou com uma perda total de como% corretamentesu
to root
e tenho alguma maneira de determinar com certeza se estou usando bash
ou não. O script usa matrizes Bash extensivamente e pode destruir caminhos do sistema de arquivos se alguns valores forem espúrios. Eu achei o ps -p $$
hacks mencionado em outro lugar um pouco de um hack (?!) Então estou procurando a melhor maneira de realizar o que eu estou tentando realizar, considerando que eu devo logar primeiro como coconutpowder
e não posso fazer assim como root
diretamente.
Se eu estou fazendo o usuário mudar errado, acredito que esta questão é distintamente diferente das outras que proliferaram em torno de apenas detectar o atual (não "padrão" ou "atribuído" ) shell.
Até agora, estou tentando analisar $ 0, possivelmente removendo qualquer caractere -
prefixado para denotar um shell de login.
A menos que algum de vocês possa me ensinar como su
to root
com login (ou seja, lendo $ HOME / .profile) e mudar diretamente para bash
do padrão sh
, que não pode ser alterado .