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.


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.


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"

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.