Adicionando privilégios de root a um script bash

1

Eu estou precisando adicionar privilégios de root a um script bash que usa sudo ; de modo que sempre que executarmos o script do terminal; Independentemente do fato de que o usuário é root ou não, ele não deve solicitar senha. Por favor ajude! Fazer o Executar o Bash Script como Root não ajudou.

    
por MKJ 30.10.2012 / 18:38

4 respostas

4

A melhor solução seria usar visudo (essa ferramenta foi feita para isso e evitará a exposição da senha do root), sugiro que você descubra o que está dando errado com isso.

Como solução alternativa, você pode executar isso:

echo <password> | sudo -S some-script

(inicie o comando com um espaço para que não seja salvo no histórico bash).

Cumprimentos.

    
por desgua 04.05.2013 / 16:16
3

É muito insensato criar uma falha de segurança elevando os direitos (algo que eu me oponho) sem qualquer forma de verificação de identidade, mas se o script não for interativo e o sistema estiver no controle total do script (isso significa que o usuário não pode mexer com ele), existem várias maneiras de fazer isso de forma segura. Eu te dou alguns exemplos usando uma espécie de "gatilhos de eventos" improvisados

(sim, esticar um pouco a definição)

Este deve ser iniciado antes pelo servidor (em / etc / rclocal ou algo assim) este script tem permissão "root".

#!/bin/bash

CMD="/path/to/a/directory/the/user/has/rights/to/write/into"

mkdir -p "$CMD"

while :
do
    inotifywait -q -e moved_to "$CMD" >/dev/null
    /path/to/script/you/want/to/run.sh
done

O segundo é o script que o usuário invoca, não tem permissão de root:

#!/bin/bash

CMD="/path/to/a/directory/the/user/has/rights/to/write/into"

touch dummyfile ; mv dummyfile "$CMD"

Como você pode ver, o usuário não tem direitos elevados e também não pode fazer nada além de "apertar o botão". Se o cliente estiver movendo alguma coisa no diretório preparado, o servercript recebe um sinal de que precisa executar seu script.

Outra maneira (menos segura) de fazer isso é usando sockets:

Primeiro, novamente, um script chamado pelo servidor (assim como no primeiro exemplo)

#!/bin/bash
PORTNUMBER="12345"  #or whatever you like and not in use

while :
do
    nc -l localhost $PORTNUMBER >/dev/null
    /path/to/script/you/want/to/run.sh
done

então um clientcript

#!/bin/bash
PORTNUMBER="12345"  #or whatever you like and not in use

echo "something" | nc localhost $PORTNUMBER

a última linha também pode ser substituída por:

echo "something" >/dev/tcp/localhost/$PORTNUMBER

Aqui novamente: um eco para um soquete sinalizará o servercript para executar seu script.

E é claro que isso também pode ser feito com pipes nomeados, mas você tem a idéia: -)

    
por thom 02.11.2013 / 02:00
-1

Lembrando-se de que, ao fazer isso, você está permitindo que qualquer um o execute. Eu acredito que você precisa chmod-lo, dando-lhe a devida permissão, 0755 deve fazê-lo.

    
por Pascal Jünger 30.10.2012 / 19:50
-2

Você já tentou definir um bit adesivo no arquivo, então, quando ele é executado, ele será executado como root?

Você pode executar chmod 2777 no arquivo e chown root no arquivo para fornecê-lo à raiz.

Agora, qualquer pessoa que executar o arquivo estará executando como root.

    
por naisanza 29.10.2013 / 21:54