Como mudar a raiz do usuário para o usuário root para matar o processo pai?

0

Estou desenvolvendo um script de automação complicado que automatizará uma grande parte dos processos de criação, instalação, implantação e pós-instalação. O problema é que dentro de todos os comandos que precisam ser emitidos, existe um que requer que o usuário seja root. (Essa é uma restrição de requisito, pois é necessário que o outro usuário (nós chamaremos user1) não esteja na lista de sudoers)

Basicamente, como estou estruturando meus scripts, tenho um script inicial que deve ser executado como root. Esse script chamará dois outros scripts como user1.

Todos os três scripts compartilham um script sharedFunctions.sh que define funções comuns. Dentro deste script eu tenho uma função run_command que precisa tomar um comando e uma string de falha entre outros argumentos que não são importantes para este problema.

Agora, se a string de falha aparecer na saída do comando especificado, eu quero matar o processo pai parando o trem inteiro. Eu tenho uma variável exportada do PID pai que eu pego do script raiz, mas se o script falhar enquanto estiver executando um dos dois scripts user1, não posso matar esse processo porque ele é de propriedade do root.

Existe uma maneira de "sair" de volta à raiz sem precisar de credenciais (semelhante a como você pode no terminal) para que eu possa matar o PID de propriedade do root?

***** EDIT *****

Este é o processo muito simplificado que meu script precisa seguir formatado como tal (user user: function):

user1:maven install
user1:scp jars to chef server
root:chef command
user1:chef command
user1:post-installation scripts

Eu tenho três scripts e um script de origem

user1cmd1.sh %código% %código% parentscript.sh

o user1cmd2.sh primeiro extrai o PID usando sharedFunctions.sh Em seguida, chama user1cmd1.sh como user1 quando esse script termina, ele retorna ao parentcript e como root o comando chef é executado Em seguida, chama user1cmd2.sh como user1

my parentscript.sh , que é definido em export TOP_PID=$$ , tem um script semelhante a este:

run_command(){
    cmd=$1
    fail=$2
    if $cmd | grep -q $fail;then
         kill $TOP_PID #there is more to this particular command, but I don't have it in front of me
    fi
}
    
por CraigR8806 24.08.2018 / 20:57

1 resposta

2

parentscript.sh poderia criar um processo reaper para o qual ele passa $TOP_PID . O processo ceifador tentaria ler de um canal nomeado que pode ser gravado por user1 . Se nada for escrito no pipe, o reaper apenas bloqueia a leitura e não faz mais nada, mas se alguma coisa é escrita no pipe, a leitura do reaper é completada e o Reaper vai para o resto do código, matando o processo principal.

    
por 24.08.2018 / 22:31