Come eseguo uno script bash che richiede i privilegi di root?

15

Ho queste linee di script dal mio ISP:

sudo bash
echo "plugin L2TP.ppp">>/etc/ppp/options 
echo "l2tpnoipsec">>/etc/ppp/options

Funziona se incollo riga per riga in Terminale. Voglio creare un file * .command ed eseguirlo facendo doppio clic. Ma tutto quello che ottengo è la richiesta di password e quindi vuota la finestra di bash. Il file "opzioni" risultante è vuoto.

Ho provato questo:

#!/bin/bash

echo "plugin L2TP.ppp">>/etc/ppp/options 
echo "l2tpnoipsec">>/etc/ppp/options

Ottengo:

/etc/ppp/options: Permission denied

Penso di aver bisogno di usare un comando per ottenere i privilegi di root da dentro bash.

    
posta Dmitriy 26.04.2012 - 16:09
fonte

4 risposte

14

Prendi lo script che hai creato:

#!/bin/bash

echo "plugin L2TP.ppp">>/etc/ppp/options 
echo "l2tpnoipsec">>/etc/ppp/options

Salvalo nella tua directory home o in una directory "scripts" all'interno della tua home directory, come l2tp.sh. Permettilo di essere eseguito (scrivi questo comando in Terminale):

chmod 700 ~/path/to/l2tp.sh

Per eseguire il file usando sudo (privilegi di root):

Metodo # 1. In Tipo di terminale:

$ sudo ~/path/to/l2tp.sh

Metodo # 2. Crea un file run_l2tp.command con questo contenuto:

sudo ~/path/to/l2tp.sh

Consentire l'esecuzione:

chmod u+x run_l2tp.command

Quando fai doppio clic su run_l2tp.command e inserisci la password, il file l2tp.sh verrà eseguito con i privilegi di root.

Metodo # 3 Se per motivi di sicurezza, non vuoi che nessun utente del tuo sistema sia in grado di eseguire lo script, ma vuoi che ti venga chiesta una password amministrativa, un altro la soluzione sarebbe quella di salvare lo script della shell e quindi utilizzare il programma AppleScript Editor per creare un AppleScript.

AppleScript sarebbe un one-liner, dicendo do shell script «your script's name here» with administrator privileges . Salva lo script come applicazione. Quindi, quando lo fai clic, ti verrà chiesta una password di amministratore, quindi eseguirà lo script della shell con i privilegi di amministratore.

Ovviamente, sostituisci «your script's name here» con il percorso del tuo script.

Alcune note:

  • Su sistemi simili UNIX, ~ è l'abbreviazione di "mia home directory".
  • Chmod 700 renderà il file eseguibile solo da te. Per maggiori informazioni: visita questa pagina di Wikipedia .
  • digitando 'sudo' prima che un comando esegua il programma usando i privilegi di root. Fai attenzione quando lo fai, cose brutte possono accadere se non sei sicuro di quello che stai facendo.
  • Ovviamente puoi omettere / path / to se hai salvato questo script direttamente nella tua home directory.
risposta data 26.04.2012 - 16:18
fonte
3

Salva questo:

#!/bin/bash

echo "plugin L2TP.ppp">>/etc/ppp/options 
echo "l2tpnoipsec">>/etc/ppp/options

sul desktop in un file denominato script.sh .

Apri una finestra di Terminale e digita:

sudo bash ~/Desktop/script.sh

Inserisci la password quando richiesto e tutti i comandi del file verranno eseguiti con i privilegi di super utente.

    
risposta data 26.04.2012 - 16:20
fonte
1

Se per motivi di sicurezza, non vuoi che nessun utente del tuo sistema sia in grado di eseguire lo script, ma vuoi che ti venga richiesta una password amministrativa, una soluzione alternativa sarebbe salvare lo script della shell e poi usa il programma AppleScript Editor per creare un AppleScript.

AppleScript sarebbe un one-liner, dicendo do shell script «your script's name here» with administrator privileges . Salva lo script come applicazione. Quindi, quando lo fai clic, ti verrà chiesta una password di amministratore, quindi eseguirà lo script della shell con i privilegi di amministratore.

Ovviamente, sostituisci «your script's name here» con il percorso del tuo script.

    
risposta data 26.04.2012 - 17:35
fonte
1

Il problema è che quando lo fai dalla riga di comando, quello che stai facendo è iniziare bash in sudo , e poi inviare quei due prossimi comandi a bash , non alla shell originale. (il segno è che devi exit due volte)

Quando lo fai in uno script, il comando bash non esce mai, quindi i due comandi successivi non vengono mai eseguiti.

Non è elegante come la soluzione AppleScript, ma se hai intenzione di farlo come uno script dalla riga di comando, l'equivalente sarebbe:

#!/bin/sh --
sudo bash -c 'echo "plugin L2TP.ppp">>/etc/ppp/options' 
sudo bash -c 'echo "l2tpnoipsec">>/etc/ppp/options'

Se non avessimo bisogno del reindirizzamento io (il bit >> ), potremmo semplicemente chiamare il comando direttamente tramite sudo senza il trucco sudo sh -c . (e notate che dovevo citare l'argomento su sh -c per impedirgli di eseguire echo come root, ma il file che si aggiunge come utente originale.)

funzionerà come un file .command dal Finder, ma visualizzerà una finestra del terminale, chiedendo la tua password e, se inserita correttamente, eseguirà i comandi. (supponendo che tu non abbia autenticato di recente per sudo ... se lo hai, verrà eseguito senza chiedere conferma)

    
risposta data 27.04.2012 - 12:51
fonte

Leggi altre domande sui tag