Executar um script e chamar outro como root [RESOLVIDO]

1. Executar um script e chamar outro como root [RESOLVIDO]

Kelvin Ferraz
kelvinferraz

(usa Debian)

Enviado em 07/08/2017 - 10:01h

Bom dia pessoal estou tentando desenvolver uma aplicação para agilizar processo de instalação de programas no Ubuntu, já possuo um que script parecido https://www.vivaolinux.com.br/script/O-que-fazer-apos-instalar-o-Debian-8-versao-em-Shell-Script/.
Porém estou querendo fazer de forma mais intuitiva, com interface para ajudar o usuário que esta iniciando e tem dificuldade na instalação de programas no Linux e no futuro criar o .deb do mesmo.

Minha dúvida Ex: Possuo um script:

#!/bin/bash

#chama função de logar senha utilizando o gksu

if [ "`id -u`" != "0" ] ; then
gksu $0
else

echo "$MSG_ERROR"

fi

Aqui minha primeira dúvida na linha da chamado do gksu $0 gostaria que ele já iniciasse no próximo script como root ou no caso com permissões como "sudo". Achei alguns exemplos aqui no VOL, porém ficaram mais complicadas de entender do que ajudaram. Gostaria de algo mais ou menos assim:

#!/bin/bash

#chama função de logar senha utilizando o gksu

if [ "`id -u`" != "0" ] ; then
gksu $0
executaressescriptcompermissoesRoot
else

echo "$MSG_ERROR"

fi

Isso é possível?

Obrigado!!


  


2. Re: Executar um script e chamar outro como root [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 07/08/2017 - 11:48h

kelvinferraz escreveu:

Aqui minha primeira dúvida na linha da chamado do gksu $0 gostaria que ele já iniciasse no próximo script como root ou no caso com permissões como "sudo". Achei alguns exemplos aqui no VOL, porém ficaram mais complicadas de entender do que ajudaram. Gostaria de algo mais ou menos assim:

#!/bin/bash

#chama função de logar senha utilizando o gksu

if [ "`id -u`" != "0" ] ; then
gksu $0
executaressescriptcompermissoesRoot
else

echo "$MSG_ERROR"

fi

dá uma pesquisada sobre o comando "eval" e o "exec"...

já utilizei o comando "eval" para executar uma sequência de comandos externos ao meu script; mas de modo a me retornar o resultado dessa sequência de comandos.

não testei se é possível chamar essa sequência de comandos (ou um outro script) como root. acredito que sim -- sobretudo se o "sudo" estiver configurado.



3. Re: Executar um script e chamar outro como root [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 07/08/2017 - 14:48h


acompanhando ... isso muito me interessa pois quando fiz algo parecido eu fiz no modo gambiarra

https://www.vivaolinux.com.br/dica/Executar-comando-que-exija-root-como-usuario-comum


------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



4. Re: Executar um script e chamar outro como root [RESOLVIDO]

Patrick Costa da Silva
patrickpcs

(usa Nenhuma)

Enviado em 07/08/2017 - 17:20h

Me interessa também. Normalmente eu coloco uma trava antes de executar os comandos que eu queria como root. A "trava" um If test da vida checa se o valor da variável UID é diferente de 0, se assim for ele manda uma mensagem na tela pedindo pra chamar o script como root e aborta a execução do restante do script.



5. Re: Executar um script e chamar outro como root [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 07/08/2017 - 17:28h

patrickpcs escreveu:

Me interessa também. Normalmente eu coloco uma trava antes de executar os comandos que eu queria como root. A "trava" um If test da vida checa se o valor da variável UID é diferente de 0, se assim for ele manda uma mensagem na tela pedindo pra chamar o script como root e aborta a execução do restante do script.

patrickpcs, talvez o comando "eval" resolva parte desse seu problema.

na época, quando precisei utilizar esse comando, a distinção que li sobre ele ("eval") em relação ao "exec" é que o "exec" executa o comando no próprio processo do script em execução. enquanto que o "eval" executa em um outro processo (externo ao processo do script em execução); fazendo com que o script não seja encerrado como ocorre com comando "exec".

já adianto meus pedidos de desculpas caso tenha cometido alguma imprecisão. já faz um tempo que li sobre isso.




6. Re: Executar um script e chamar outro como root [RESOLVIDO]

Kelvin Ferraz
kelvinferraz

(usa Debian)

Enviado em 07/08/2017 - 22:55h

Pessoal muito obrigado pelo apoio, acabei resolvendo, acredito eu que no modo "gambiarra", porém funcionou da forma que eu precisava, estou utilizando vários scripts e chamando funções dentro desses scripts:

Script que checa se é root se nao for pede senha utilizando o gksudo e armazenando na variável SUDOPASSWORD.

if [[ "$(whoami)" = "root" ]]; then

return 0

else

# Prompt for the password. Replace "the process" with a meaningful message.
SUDOPASSWORD="$( gksudo --print-pass --message '&NOT_PASS' -- : 2>/dev/null )"


## Check for null entry or cancellation.
if [[ ${?} != 0 || -z ${SUDOPASSWORD} ]]
then


echo "logou"
fi

## Check that the password is valid.
if ! sudo -kSp '' [ 1 ] <<<"${SUDOPASSWORD}" 2>/dev/null
then
PassError "$COMMON_MSG_ERROR" "$PASS_ERROR"

if [ ${?} = 0 ]; then

IsRoot
else

Exit

fi
else
echo "deu certo!"
Menu
fi
fi

Esse aqui esta no outro script que recebe o conteúdo de SUDOPASSWORD:
echo -e "$SUDOPASSWORD" | sudo -S apt-get install gimp 


Utilizei alguns códigos que achei no Google e testando acabou dando certo em modo gambiarra, mas deu certo... por enquanto...

Até mais galera!!




7. Re: Executar um script e chamar outro como root [RESOLVIDO]

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 08/08/2017 - 09:43h

Assim é mais simples, experimenta aí:
#!/bin/bash
if [ "$(id -u)" != "0" ]; then
exec gksu "$0" "$@"
fi
#Comandos...
whoami

Obs.: O "whoami" aí é só pra testar o script!!!! ;)



8. Re: Executar um script e chamar outro como root [RESOLVIDO]

Kelvin Ferraz
kelvinferraz

(usa Debian)

Enviado em 08/08/2017 - 10:20h

HCK escreveu:

Assim é mais simples, experimenta aí:
#!/bin/bash
if [ "$(id -u)" != "0" ]; then
exec gksu "$0" "$@"
fi
#Comandos...
whoami

Obs.: O "whoami" aí é só pra testar o script!!!! ;)

Não entendi muito bem como vou aplicar isso em outro script. O outro Script seria chamado como o whoami?

#!/bin/bash
if [ "$(id -u)" != "0" ]; then
exec gksu "$0" "$@"
fi
#Comandos...
OutroScript

? Seria isso?




9. Re: Executar um script e chamar outro como root [RESOLVIDO]

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 08/08/2017 - 10:58h

kelvinferraz escreveu:

#!/bin/bash
if [ "$(id -u)" != "0" ]; then
exec gksu "$0" "$@"
fi
#Comandos...
OutroScript

? Seria isso?



Sim, qualquer comando que vier depois vai ser executado como root!


10. Re: Executar um script e chamar outro como root [RESOLVIDO]

Kelvin Ferraz
kelvinferraz

(usa Debian)

Enviado em 08/08/2017 - 22:29h

HCK escreveu:

kelvinferraz escreveu:

#!/bin/bash
if [ "$(id -u)" != "0" ]; then
exec gksu "$0" "$@"
fi
#Comandos...
OutroScript

? Seria isso?



Sim, qualquer comando que vier depois vai ser executado como root!


HCK perfeito my friend!!! ficou mais fácil e melhor mesmo!

Muito obrigado! Em breve postarei o programa que estou desenvolvendo!!






11. Re: Executar um script e chamar outro como root [RESOLVIDO]

Kelvin Ferraz
kelvinferraz

(usa Debian)

Enviado em 08/08/2017 - 23:14h

Então eis que surgiu uma nova dúvida... Após utilizar o comando sugerido:

if [ "$(id -u)" != "0" ]; then
exec gksu --message "$ROOT_LOGIN" "$0" "$@"
fi

Estou com outra dúvida, tentei resolver mas não deu certo. Se caso durante a janela que pede a senha o usuário cancelar ou digitar senha errada ele teria que repetir o comando, porém ele encerra o programa. Tentei isso:


## Check for null entry or cancellation.
if [ ${?} != 0 ]
then

echo "$ROOT_ERRMSG"
End

fi

Porém sem sucesso... Alguma ideia ?







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts