PDA

Visualizza la versione completa : Sudo in shell script


sirjask
24-06-2009, 17:17
Cari tutti,

dovrei eseguire uno script all'avvio del computer, mettendolo in /etc/init.d/ o nei vari rc1,rc2, ecc... con al suo interno dei comandi che richiedono privilegi di super utente.

faccio un esempio:

#! /bin/bash
chmod 777 /pippo/pluto.paperino


ovviamente il chmod vuole privilegi di super user.... e lo script fallisce l'esecuzione.

chmod non prevede una opzione per farsi passare la password di root...

Come faccio?

Grazie.

U-bahn
24-06-2009, 19:44
dovrei eseguire uno script all'avvio del computer, mettendolo in /etc/init.d/ o nei vari rc1,rc2, ecc...

esattamente dove lo hai messo e come lo hai chiamato ? ...i privilegi
di root non dovrebbero essere il problema.


comunque, a quale file vorresti modificare i permessi ?

sirjask
25-06-2009, 09:12
Ciao, grazie per aver risposto;

devo cambiare i permessi a /dev/video0 all' avvio del computer ed ho creato uno script in cui uso il comando chmod.

Sto valutando se metterlo su tutti i runlevel, quindi nei vari rc*, oppure in init.d


Al momento ho risoltto scrivendo nello script:

echo 'password_di_root' | sudo chamod 777 /dev/video0

e funziona...ma non so se la soluzione migliore...


JK

sacarde
25-06-2009, 10:40
ma se lo esegui dagli script init.d

viene eseguito come root

non occorre mettere sudo e ne password



p.s.
se non e' legato al runlevel lo puoi inserire in /etc/rc.local

U-bahn
25-06-2009, 16:05
Al momento ho risoltto scrivendo nello script:

echo 'password_di_root' | sudo chamod 777 /dev/video0

e funziona...ma non so se la soluzione migliore...


direi che questa la cosa peggiore che tu potessi fare...



devo cambiare i permessi a /dev/video0 all' avvio del computer ed ho creato uno script in cui uso il comando chmod.

supponevo che tu volessi cambiare i permessi a qualcosa in /dev...ma per questo
ci sono udev ed /etc/group


Sto valutando se metterlo su tutti i runlevel, quindi nei vari rc*, oppure in init.d

Il modo corretto di fare le cose :
1) creare uno script e renderlo eseguibile;
2) spostare lo script in init.d;
3) creare un link simbolico ad esso nei vari rc?.d, a seconda dei runlevel
in cui ti serve che venga eseguito o in rc{local,sysinit,S}.d (qui le varie
distribuzioni hanno fatto un po' di casino) se non dipende dal runlevel;
4) controllare di non aver scritto delle bischerate nello script :)

Ah, il nome del link simbolico ha una certa importanza e, tecnicamente,
un nome errato pu anche impedirti di riavvire il sistema (con init, quantomeno)...
ma questo dipende dallo script in questione.

:ciauz:

Loading