Como fazer login como root do Bash e fazer coisas

3

Este é o meu simples bash:

cat test.sh

#!/bin/bash 
echo "hello"
su - root -c /path/to/script.sh <<EOF
password                              
EOF
whoami
echo "good bye"

Mas recebo este erro:

./test.sh
hello
su: must be run from a terminal
<current-user>
good bye

(OR)

cat test2.sh
#!/bin/bash 
echo "hello"
sudo su <<EOF
password                              
EOF
whoami
echo "good bye"

Mais uma vez outro erro

(OR)

cat test3.sh
#!/bin/bash 
echo "hello"
su root <<EOF
password                              
EOF
whoami
echo "good bye"

novamente erro ...

quando tento:

#!/bin/bash
echo "hello"
sudo -s <<EOF
<password>
echo Now I am root
id                                                                      
echo "yes!"
EOF
whoami
echo "good bye"

Então a saída é:

./script.sh
hello
[sudo] password for <user>:

Eu também mudei meu script para:

#!/usr/bin/expect -f
spawn sudo -s <<EOF
expect "assword for user:"
send -- "password\r"
expect eof

e a saída é:

spawn sudo -s <<EOF
[sudo] password for user:
/bin/bash: <<EOF: command not found

Também which sh output é /bin/sh

Como posso resolver o erro nesses três scripts?

    
por MLSC 18.02.2014 / 18:10

3 respostas

7

Existem muitas maneiras de fazer isso ... eis algumas:

  1. faça login como esse usuário: de verdade,

    su user2

ou apenas obtenha o mesmo ambiente,

  su -l user2
  1. execute um único comando como esse usuário:

    su user2 -c cat myfile.txt

  2. use aqui docs:

    sudo su user <<EOF

    command1

    command2

    .....

    EOF

Seus comandos podem falhar porque /tmp/script.sh não é executável, ou porque o último eco em one.sh não possui o apex correspondente ( ").

    
por 18.02.2014 / 18:22
3

Use sudo e conceda ao seu usuário (original) a permissão para executar /tmp/script.sh como o usuário desejado sem senha:

original_user ALL=(script_user) NOPASSWD: /tmp/script.sh

Invoque da seguinte forma:

sudo -u script_user /tmp/script.sh

Ainda assim, é uma idéia terrível fazer isso com qualquer coisa relacionada a um diretório gravável do mundo. Você está apenas pedindo por isso.

    
por 18.02.2014 / 18:15
2

RESPONDE A aqui

Fazer esse tipo de coisa não é prática segura ou padrão (na verdade, muitos consideram desastrosa), não é uma boa idéia colocar uma senha em um script. Uma abordagem mais padrão seria simplesmente esperar que todo o script seja executado com privilégios de root, ou apenas para que o script solicite uma senha. Você também pode permitir que vários comandos sejam executados via sudo sem uma senha por usuários específicos usando a opção NOPASSWD em /etc/suoders .

No entanto, agora que você está ciente dos riscos, é possível usar sudo -kS para que o sudo leia a senha de stdin e tenha comandos de leitura bash de stdin com - . Por exemplo:

sudo -kS bash - << EOF
password
whoami
echo "Not a good idea to have a password encoded in plain text"
EOF
    
por 18.02.2014 / 20:34