Passa o parâmetro do usuário Local para o Sudo [fechado]

1

Ok, se o assunto não estiver claro, explicarei minha dúvida. Eu tenho um shell script mantido em meu usuário local chamado (executeAdM.sh), e quando eu executo este script eu estou conectando ao usuário SUDO tomando comandos do arquivo de instrução Mas quando eu executo este script eu também estou passando o parâmetro para este script que é na verdade algum caminho de diretório do usuário do SUDO. Veja o script abaixo -:

Script em local (executeADM.sh) -:

#!/bin/bash
echo password | sudo -S -l
sudo /usr/bin/su - user  <<\EOF
#ls -lrt
pwd
for entry in $(ls -r)
  do
  if [ "$entry" = "testingADM.sh" ];then
./$entry $1
fi
done
EOF

Executando Acima como -:

./executeADM.sh somePath

Quando o script acima é executado, ele se conecta com êxito a outro usuário e, no usuário do SUDO, eu executo um loop for que procura outro SCRIPT chamado testingADM.sh. Uma vez que o script é encontrado eu executo aquele script com o parâmetro passado do Usuário Local e o testingADM.sh deve definir esse caminho para mim que não está funcionando não está lendo o parâmetro passado pelo usuário local.Pode alguém me ajudar aqui não estou conseguindo como resolver isso. Por favor, pergunte-me se alguma coisa não está clara, basicamente, eu quero passar o parâmetro do script de shell LOCAL para shell script SUDO USER -:

Script do usuário SUDO (testingADM.sh) -:

#!/bin/bash
path=$1
cd $path
pwd

Se eu codificar o valor da variável path no script mantido no SUDO, tudo funciona bem. Mas eu não quero isso.:

 #!/bin/bash
 path=somepath
 cd $path
 pwd
    
por Tushar Sharma 03.08.2017 / 16:16

1 resposta

1

Você tem mais problemas do que pensa. Em primeiro lugar, você pode passar um parâmetro para um script sudo sem problemas:

[me@nagios ~]$ cat parent.sh 
#!/bin/bash
echo parent has $1 $2
sudo ./child.sh $1 $2
[me@nagios ~]$ cat child.sh 
#!/bin/bash
echo child has $1 $2
[me@nagios ~]$ ./parent.sh a1 b2 c3
parent has a1 b2
child has a1 b2

Seu problema é que você está usando um documento aqui ( <<EOF ), que não é um mecanismo que permite para a passagem de parâmetros de uma maneira fácil: reescreva para que um script invoque outro, e você deve estar bem.

Você também está circulando sobre a saída de ls , que, como muitas pessoas notaram por aqui , é uma péssima ideia , e vai quebrar assim que você conseguir um nome de arquivo suficientemente incomum. Apenas teste a existência (ou melhor, a existência executável, com [ -x ) de testingADM.sh antes da invocação.

Basicamente, você mesmo escreveu um problema XY : assim que quando você parar de tentar fazer as coisas de maneira errada, muitos de seus problemas desaparecerão.

    
por 04.08.2017 / 08:43