Saia do sudo no meio de um script de shell

3

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, exitinterromperá o script nesse comando.

TomJ
fonte
2
Você já pensou em modificar o script para prefixar sudoos comandos que precisam ser executados como root? sudoO 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.
Aaron Miller
Caso contrário, você pode tentar adicionar su $USERapó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.
Aaron Miller
Tem certeza de que tudo acontece enquanto você escreve? sudo sudeve 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, exitencerrará o script. Considere adicionar whoamiem várias posições ao script para ver quem é o usuário ativo em diferentes pontos do script.
Tim
Falhando que , o que se você apenas su -em vez de sudo su? Isso deve solicitar a senha root e, em seguida, produzir um shell elevado, mas não tenho certeza de como o seguinte exitse 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.
Aaron Miller
@AaronMiller (segundo post) Eu não faria isso. Se tudo estiver funcionando como escrito por TomJ, isso significaria que, depois de deixar esse shell interno do usuário, o usuário (ou script) receberia privilégios de root novamente.
Tim

Respostas:

4

Você já pensou em modificar o script para prefixar sudoos comandos que precisam ser executados como root? sudoO 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.

Aaron Miller
fonte
Ou pode-se colocar a sequência de comandos a serem executados através do sudo em um script de shell e simplesmente executar sudo script.
Juliane Holzt
O mecanismo de "armazenamento em cache" que você está descrevendo pode não estar necessariamente ativado em uma determinada máquina. Eu tenho desativado.
Błażej Michalik
1

Não use sudo suou su - <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 exemplo

sudo su -c "ls /tmp"

se você tiver mais de um comando, separe-o ;

sudo su -c "ls /tmp/; whoami"

chris2k
fonte