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 .