Eu tenho um script de shell no qual a maioria dos comandos precisa ser executada no sudo; no entanto, os últimos comandos precisam ser executados como o usuário atual. Existe uma maneira de sair do sudo e mudar para o usuário conectado no momento?
Se eu estivesse executando tudo isso na linha de comando, eu poderia fazer algo como:
sudo su
[su commands]
exit
[user commands]
No entanto, exit
interromperá o script nesse comando.
sudo
os comandos que precisam ser executados como root?sudo
O mecanismo de cache de credenciais embutido significa que você só precisa responder a um prompt de senha uma vez, a menos que o script do shell seja executado por um período muito longo.su $USER
após os comandos root e antes que eles sejam executados como o usuário atual; Tenho certeza de que todo bash que não foi transformado em conjuntos completos de perversidade$USER
, deve poder servir como um método genérico de produzir um shell com as permissões do usuário conectado.sudo su
deve abrir um shell raiz para você e o script não deve avançar até que você o deixe. Em seguida[su commands]
, será executado (com sua conta de usuário) e, finalmente,exit
encerrará o script. Considere adicionarwhoami
em várias posições ao script para ver quem é o usuário ativo em diferentes pontos do script.su -
em vez desudo su
? Isso deve solicitar a senha root e, em seguida, produzir um shell elevado, mas não tenho certeza de como o seguinteexit
se comportará em um contexto de script de shell - é por isso que geralmente é preferível usar Perl ou Python para esse tipo de tarefa; eles podem parecer apresentar uma barreira maior à entrada, mas seu comportamento muito mais previsível e menos vergonhoso mais do que retribui o esforço de ganhar familiaridade.Respostas:
Você já pensou em modificar o script para prefixar
sudo
os comandos que precisam ser executados como root?sudo
O mecanismo de cache de credenciais embutido significa que você só precisa responder a um prompt de senha uma vez, a menos que o script do shell seja executado por um período muito longo.fonte
sudo script
.Não use
sudo su
ousu - <user>
, porque você abre um subshell com este comando. Isso não vai funcionar muito bem.Por favor use
sudo "su commands"
por exemplosudo "ls /home"
se você realmente deseja usar
sudo su
, pode usá-lo digitando, por exemplosudo su -c "ls /tmp"
se você tiver mais de um comando, separe-o
;
sudo su -c "ls /tmp/; whoami"
fonte