script e privilegi di root

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Murdock
Prode Principiante
Messaggi: 18
Iscrizione: mercoledì 1 giugno 2005, 19:10

script e privilegi di root

Messaggio da Murdock »

Ciao a tutti.

Ho un'icona sul desktop che lancia tramite "gksudo" un piccolo script che mi chiude la connessione di rete wireless. Come faccio a fare in modo che possa lanciare lo script senza che mi chieda la password di superutente?

Grazie
Avatar utente
ShanPu
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1028
Iscrizione: sabato 4 febbraio 2006, 14:36

Re: script e privilegi di root

Messaggio da ShanPu »

Puoi usare sudo nello script invece di gksudo, e guardare l'opzione -S di sudo per passargli la password direttamente da standard input nello script, senza doverla inserire ogni volta.
Please, do not feed the troll.
Avatar utente
Kaya
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 306
Iscrizione: mercoledì 28 dicembre 2005, 11:29

Re: script e privilegi di root

Messaggio da Kaya »

senza usare sudo, non puoi cambiare proprietario dello script, e come permessi un 777 in modo che chiunque possa eseguirlo? :)
Avatar utente
ryuujin
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1032
Iscrizione: venerdì 14 aprile 2006, 2:57
Sesso: Maschile
Località: Pescara
Contatti:

Re: script e privilegi di root

Messaggio da ryuujin »

Murdock ha scritto: Ho un'icona sul desktop che lancia tramite "gksudo" un piccolo script che mi chiude la connessione di rete wireless. Come faccio a fare in modo che possa lanciare lo script senza che mi chieda la password di superutente?
In Linux è possibile impostare un attributo (suid) ad un file che permette di eseguire il file con i privilegi del proprietario.

Ad esempio, nel tuo caso attribuendo il suid allo script permetti a qualsiasi utente (purché abbia i permessi di esecuzione) di eseguire lo script con i privilegi del proprietario (root nel tuo caso).

Per fornire questo attributo:

Codice: Seleziona tutto

#ci accertiamo che il proprietario sia root
sudo chown root:root nome_file
#attribuiamo il suid al file
sudo chmod +s nome_file
#rendiamo eseguibile il file per tutti, ma scrivibile e leggibile solo per root
sudo chmod  711 nome_file
Disclaimer: bisogna stare attenti agli script con il suid!! Ricordati che qualsiasi utente lo esegue con i privilegi del proprietario (spesso root).

Per ogni dubbio.. chiedi :)
Ultima modifica di ryuujin il venerdì 28 aprile 2006, 0:47, modificato 1 volta in totale.
http://blog.spicydev.it
"Chi riceve un'idea da me, ricava conoscenza senza diminuire la mia; come chi accende la sua candela con la mia, riceve luce senza lasciarmi
al buio". - Thomas Jefferson
Avatar utente
lucapost
Prode Principiante
Messaggi: 137
Iscrizione: domenica 15 gennaio 2006, 10:05
Località: Stregna
Contatti:

Re: script e privilegi di root

Messaggio da lucapost »

ho il seguente script /usr/local/bin/dialup :

Codice: Seleziona tutto

#!/bin/bash
#programma avvio connessione dialup

ifdown eth1
ifdown eth0
ifup ppp0
/usr/sbin/slmodemd --country=ITALY /dev/slusb0 &

wvdial
come faccio da utente normale a lanciare diaulp senza che mi venga chiesta alcuna password?

e ancora più interessante, sempre senza inserire alcuna pwd dopo il lancio dello script, come acquisisco i privilegi di amministratore temporaneamente e quindi solamente per i primi 4 comandi, per poi eseguire wvdial da utente normale?
Come posso modificare lo script?

Luca
Avatar utente
ryuujin
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1032
Iscrizione: venerdì 14 aprile 2006, 2:57
Sesso: Maschile
Località: Pescara
Contatti:

Re: script e privilegi di root

Messaggio da ryuujin »

lucapost ha scritto: ho il seguente script /usr/local/bin/dialup :

come faccio da utente normale a lanciare diaulp senza che mi venga chiesta alcuna password?
ok, il consiglio che ti do è di settare root come proprietario e l'attributo suid al file. Vado molto di fretta, scusarmi se non spiego i comandi. In ogni caso, se inserisci questi comandi vedrai che funziona tutto: cioé da utente normale puoi avviare dialup.  :P

Codice: Seleziona tutto

sudo bash
chown root:root /usr/local/bin/dialup
chmod 711 /usr/local/bin/dialup
chmod +s /usr/local/bin/dialup
exit
prova e fammi sapere :)

PS: la seconda domanda non l'ho capita, ma sarà colpa mia perché vado di fretta  ??? :P
http://blog.spicydev.it
"Chi riceve un'idea da me, ricava conoscenza senza diminuire la mia; come chi accende la sua candela con la mia, riceve luce senza lasciarmi
al buio". - Thomas Jefferson
Avatar utente
lucapost
Prode Principiante
Messaggi: 137
Iscrizione: domenica 15 gennaio 2006, 10:05
Località: Stregna
Contatti:

Re: script e privilegi di root

Messaggio da lucapost »

con la seguente situazione:

Codice: Seleziona tutto

lucapost@AsusA6V:/usr/local/bin$ ls -l dialup
-rwsr-sr-x  1 711 root 142 2006-04-28 21:18 dialup
ho il seguente risultato:

Codice: Seleziona tutto

lucapost@AsusA6V:~$ dialup
ifdown: failed to open statefile /etc/network/run/ifstate: Permission denied
ifdown: failed to open statefile /etc/network/run/ifstate: Permission denied
ifup: failed to open statefile /etc/network/run/ifstate: Permission denied
error: mdm setup: cannot open dev `/dev/slusb0': Permission denied
error: cannot setup device `/dev/slusb0'
--> WvDial: Internet dialer version 1.54.0
--> Warning: section [Dialer Defaults] does not exist in wvdial.conf.
--> Cannot open /dev/modem: No such file or directory
--> Cannot open /dev/modem: No such file or directory
--> Cannot open /dev/modem: No such file or directory
risolviamo intanto la prima domanda.... :)
Avatar utente
ryuujin
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1032
Iscrizione: venerdì 14 aprile 2006, 2:57
Sesso: Maschile
Località: Pescara
Contatti:

Re: script e privilegi di root

Messaggio da ryuujin »

lucapost ha scritto: con la seguente situazione:

Codice: Seleziona tutto

lucapost@AsusA6V:/usr/local/bin$ ls -l dialup
-rwsr-sr-x  1 711 root 142 2006-04-28 21:18 dialup
uhm.. mi sembra ci sia un errore... hai dato un chown al posto di un chmod (o ho sbagliato io prima, dopo controllo :P). Vedi, il proprietario e 711 :)

devi provare a sistemare con:

Codice: Seleziona tutto

sudo bash
chown root:root dialup
chmod 711 dialup
chmod +s dialup
exit
fammi sapere se funge ora :)
http://blog.spicydev.it
"Chi riceve un'idea da me, ricava conoscenza senza diminuire la mia; come chi accende la sua candela con la mia, riceve luce senza lasciarmi
al buio". - Thomas Jefferson
Avatar utente
lucapost
Prode Principiante
Messaggi: 137
Iscrizione: domenica 15 gennaio 2006, 10:05
Località: Stregna
Contatti:

Re: script e privilegi di root

Messaggio da lucapost »

avevo già correto il primo chmod in chown, non accettava gli argomenti...e ho cambiato già prima
Avatar utente
lucapost
Prode Principiante
Messaggi: 137
Iscrizione: domenica 15 gennaio 2006, 10:05
Località: Stregna
Contatti:

Re: script e privilegi di root

Messaggio da lucapost »

ricapitolando, la situazione è la seguente:

Codice: Seleziona tutto

lucapost@AsusA6V:/usr/local/bin$ sudo bash
root@AsusA6V:/usr/local/bin# chown root:root dialup
root@AsusA6V:/usr/local/bin# chmod 711 dialup
root@AsusA6V:/usr/local/bin# chmod +s dialup
root@AsusA6V:/usr/local/bin# exit
exit
lucapost@AsusA6V:/usr/local/bin$ dialup
/bin/bash: /usr/local/bin/dialup: Permission denied
lucapost@AsusA6V:/usr/local/bin$ ls -l dialup
-rws--s--x  1 root root 142 2006-04-28 21:18 dialup
lucapost@AsusA6V:/usr/local/bin$
e non funge ancora... :-\
Avatar utente
ryuujin
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1032
Iscrizione: venerdì 14 aprile 2006, 2:57
Sesso: Maschile
Località: Pescara
Contatti:

Re: script e privilegi di root

Messaggio da ryuujin »

lucapost ha scritto: ricapitolando, la situazione è la seguente:
e non funge ancora... :-\
mea culpa mea culpa.. ci vorrebbe un emoticon seduta su un piatto di ceci...

ho sbagliato a darti i permessi... :(

dovresti ridare i comandi modificando 711 con 755.. funziona sicuro dopo.. l'ho appena provato... perdonami :P

Codice: Seleziona tutto

sudo bash
chmod 755 dialup
chmod +s dialup
exit
http://blog.spicydev.it
"Chi riceve un'idea da me, ricava conoscenza senza diminuire la mia; come chi accende la sua candela con la mia, riceve luce senza lasciarmi
al buio". - Thomas Jefferson
Avatar utente
taralluccio
Prode Principiante
Messaggi: 40
Iscrizione: giovedì 6 aprile 2006, 21:35
Località: Bergamo, Italia
Contatti:

Re: script e privilegi di root

Messaggio da taralluccio »

lucapost ha scritto:come faccio da utente normale a lanciare diaulp senza che mi venga chiesta alcuna password?
In altrnativa a SUID (con tutti i suoi potenziali problemi di sicurezza), puoi impostare sudo in modo che non ti chieda una password quando esegui il tuo script.

Apri il file di configurazione di sudo:

Codice: Seleziona tutto

$ sudo visudo
E aggiungi

Codice: Seleziona tutto

lucapost ALL = NOPASSWD: /usr/local/bin/dialup
Questo ti permette a te (e solo a te) di eseguire sudo dialup senza dover inserire una password. Ricordati di rimettere a posto i permessi dello script (togliere il bit SUID):

Codice: Seleziona tutto

sudo chmod 0755 /usr/local/bin/dialup
lucapost ha scritto:e ancora più interessante, sempre senza inserire alcuna pwd dopo il lancio dello script, come acquisisco i privilegi di amministratore temporaneamente e quindi solamente per i primi 4 comandi, per poi eseguire wvdial da utente normale?
Crei un altro script che esegue

Codice: Seleziona tutto

#!/bin/sh
sudo /usr/local/bin/dialup # come root
wvdial # come utente normale
oppure un alias, da inserire in ~/.bashrc:

Codice: Seleziona tutto

alias dialup='sudo /usr/local/bin/dialup; wvdial'
Avatar utente
lucapost
Prode Principiante
Messaggi: 137
Iscrizione: domenica 15 gennaio 2006, 10:05
Località: Stregna
Contatti:

Re: script e privilegi di root

Messaggio da lucapost »

grazie per la tua buona volontà ryuujin, ma dov'è che sbaglio?

Codice: Seleziona tutto

lucapost@AsusA6V:/usr/local/bin$ sudo chmod 755 dialup
lucapost@AsusA6V:/usr/local/bin$ ls -l dialup
-rwxr-xr-x  1 root root 142 2006-04-28 21:18 dialup
lucapost@AsusA6V:/usr/local/bin$ dialup
ifdown: failed to open statefile /etc/network/run/ifstate: Permission denied
ifdown: failed to open statefile /etc/network/run/ifstate: Permission denied
ifup: failed to open statefile /etc/network/run/ifstate: Permission denied
error: mdm setup: cannot open dev `/dev/slusb0': Permission denied
error: cannot setup device `/dev/slusb0'
--> WvDial: Internet dialer version 1.54.0
--> Warning: section [Dialer Defaults] does not exist in wvdial.conf.
--> Cannot open /dev/modem: No such file or directory
--> Cannot open /dev/modem: No such file or directory
--> Cannot open /dev/modem: No such file or directory
lucapost@AsusA6V:/usr/local/bin$
per quel che riguarda te taralluccio grazie alle modifice apportate con visudo ora lancio 'sudo dialup' senza inserire alcuna password  :D

per quel che riguarda il "più interessante" non ho provato, cmq sono convinto che funziona, infatti mi sembra di aver capito la logica...

vediamo, utilizzando questi strumenti, se tra qualche minuto vi posto il risultato di ciò che intendevo ottenere...
Avatar utente
ryuujin
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1032
Iscrizione: venerdì 14 aprile 2006, 2:57
Sesso: Maschile
Località: Pescara
Contatti:

Re: script e privilegi di root

Messaggio da ryuujin »

lucapost ha scritto: grazie per la tua buona volontà ryuujin, ma dov'è che sbaglio?

Codice: Seleziona tutto

lucapost@AsusA6V:/usr/local/bin$ sudo chmod 755 dialup
dai anche: sudo chmod +s dialup
appena dopo aver impostato 755
vediamo se così va  ::)
scusami, io ho provato sul mio e funge...
http://blog.spicydev.it
"Chi riceve un'idea da me, ricava conoscenza senza diminuire la mia; come chi accende la sua candela con la mia, riceve luce senza lasciarmi
al buio". - Thomas Jefferson
Avatar utente
taralluccio
Prode Principiante
Messaggi: 40
Iscrizione: giovedì 6 aprile 2006, 21:35
Località: Bergamo, Italia
Contatti:

Re: script e privilegi di root

Messaggio da taralluccio »

ryuujin ha scritto: dai anche: sudo chmod +s dialup
appena dopo aver impostato 755
vediamo se così va  ::)
scusami, io ho provato sul mio e funge...
Uhm... In teoria non dovrebbe funzionare, il kernel ignora il bit SUID sugli script:

http://lists.debian.org/debian-user/1998/12/msg00400.html
http://lists.debian.org/debian-user/1998/12/msg00407.html
http://www.samag.com/documents/s=1149/sam0106a/0106a.htm (ultimo paragrafo)

E facendo una prova non sembra funzionare:

Codice: Seleziona tutto

danilo@amidala:~ 12:16$ cat suid-script
#!/bin/sh
whoami
echo $UID
echo $EUID
# il file è leggibile solo da root
cat /etc/sudoers
danilo@amidala:~ 12:16$ ls -l suid-script
-rwsr-xr-x 1 root root 55 2006-04-30 12:16 suid-script
danilo@amidala:~ 12:17$ ./suid-script
danilo
1000
1000
cat: /etc/sudoers: Permission denied
danilo@amidala:~ 12:17$
Avatar utente
lucapost
Prode Principiante
Messaggi: 137
Iscrizione: domenica 15 gennaio 2006, 10:05
Località: Stregna
Contatti:

Re: script e privilegi di root

Messaggio da lucapost »

i miei risultati utilizzando suid sono questi...  :-\

Codice: Seleziona tutto

lucapost@AsusA6V:/usr/local/bin$ cat dialup1
#!/bin/bash
#programma avvio connessione dialup

ifdown eth1
ifdown eth0
ifup   ppp0

/usr/sbin/slmodemd --country=ITALY /dev/slusb0 &

wvdial
lucapost@AsusA6V:/usr/local/bin$ sudo bash
root@AsusA6V:/usr/local/bin# chown root:root dialup1
root@AsusA6V:/usr/local/bin# chmod 755 dialup1
root@AsusA6V:/usr/local/bin# chmod +sx dialup1
root@AsusA6V:/usr/local/bin# ls -l dialup1
-rwsr-sr-x  1 root root 143 2006-04-30 12:36 dialup1
root@AsusA6V:/usr/local/bin# exit
exit
lucapost@AsusA6V:/usr/local/bin$ dialup1
ifdown: failed to open statefile /etc/network/run/ifstate: Permission denied
ifdown: failed to open statefile /etc/network/run/ifstate: Permission denied
ifup: failed to open statefile /etc/network/run/ifstate: Permission denied
error: mdm setup: cannot open dev `/dev/slusb0': Permission denied
error: cannot setup device `/dev/slusb0'
--> WvDial: Internet dialer version 1.54.0
--> Warning: section [Dialer Defaults] does not exist in wvdial.conf.
--> Cannot open /dev/modem: No such file or directory
--> Cannot open /dev/modem: No such file or directory
--> Cannot open /dev/modem: No such file or directory
lucapost@AsusA6V:/usr/local/bin$
Luca
Avatar utente
lucapost
Prode Principiante
Messaggi: 137
Iscrizione: domenica 15 gennaio 2006, 10:05
Località: Stregna
Contatti:

Re: script e privilegi di root

Messaggio da lucapost »


Crei un altro script che esegue

Codice: Seleziona tutto

#!/bin/sh
sudo /usr/local/bin/dialup # come root
wvdial # come utente normale
dopo aver aggiunto a /etc/sudoers.tmp la riga seguente

Codice: Seleziona tutto

lucapost ALL = NOPASSWD: /usr/local/bin/dialuproot
con queste proprietà dei file che utilizzo:

Codice: Seleziona tutto

root@AsusA6V:/usr/local/bin# ls -l dialup
-rwxr-xr-x  1 lucapost lucapost 140 2006-04-30 13:10 dialup
root@AsusA6V:/usr/local/bin# ls -l dialuproot
-rwxr-xr-x  1 lucapost lucapost 63 2006-04-30 13:15 dialuproot
root@AsusA6V:/usr/local/bin# cat dialup
#!/bin/bash
#programma avvio connessione dialup

sudo dialuproot                  #come root
wvdial                                 #come users
root@AsusA6V:/usr/local/bin# cat dialuproot
#!/bin/bash

/usr/sbin/slmodemd --country=ITALY /dev/slusb0 &

root@AsusA6V:/usr/local/bin#
se da utente normale lancio dialup:

Codice: Seleziona tutto

lucapost@AsusA6V:/usr/local/bin$ dialup
SmartLink Soft Modem: version 2.9.11 Feb 26 2006 20:14:48
symbolic link `/dev/ttySL0' -> `/dev/pts/7' created.
modem `slusb0' created. TTY is `/dev/pts/7'
Use `/dev/ttySL0' as modem device, Ctrl+C for termination.
--> WvDial: Internet dialer version 1.54.0
--> Warning: section [Dialer Defaults] does not exist in wvdial.conf.
--> Cannot open /dev/modem: No such file or directory
--> Cannot open /dev/modem: No such file or directory
--> Cannot open /dev/modem: No such file or directory
lucapost@AsusA6V:/usr/local/bin$
ora stacco e riattacco dallo slot il modem usb per evitare di lanciare slmodend su un'operazione gia fatta,  lancio 'sudo dialup', inserisco l'eventuale pwd, ed ottengo che tutto funziona:

Codice: Seleziona tutto

lucapost@AsusA6V:~$ sudo dialup
SmartLink Soft Modem: version 2.9.11 Feb 26 2006 20:14:48
symbolic link `/dev/ttySL0' -> `/dev/pts/10' created.
modem `slusb0' created. TTY is `/dev/pts/10'
Use `/dev/ttySL0' as modem device, Ctrl+C for termination.
--> WvDial: Internet dialer version 1.54.0
--> Cannot get information for serial port.
--> Initializing modem.
--> Sending: ATX3
ATX3
OK
--> Sending: ATQ0 V1 E1 S0=0 X3 &C1 &D2 +FCLASS=0 +MS=34
ATQ0 V1 E1 S0=0 X3 &C1 &D2 +FCLASS=0 +MS=34
OK
--> Modem initialized.
--> Sending: ATDT7020187187
--> Waiting for carrier.
ATDT7020187187
CONNECT 33600
--> Carrier detected.  Starting PPP immediately.
--> Starting pppd at Sun Apr 30 13:58:38 2006
--> pid of pppd: 12991
--> Using interface ppp0
--> local  IP address 80.104.113.44
--> remote IP address 151.99.91.20
--> primary   DNS address 62.211.69.150
--> secondary DNS address 212.48.4.15

perchè non funziona se da utente normale lancio solo 'dialup'?

potrebbe essere dovuto al fatto che, per un motivo simile al metodo che consiglia ryuujin, slmodemd posso lanciarlo solo da root e si hanno gli stessi problemi se slmodem lo lancio dall'interno di uno script?

potrei sbagliarmi, in effetti sembra che slmodemd venga eseguito correttamente anche da utente normale (lo lancio attraverso 'sudo dialuproot'), infatti non ricevo alcun errore di permessi, ma allora perchè wvdial non funge?

Luca
Avatar utente
lucapost
Prode Principiante
Messaggi: 137
Iscrizione: domenica 15 gennaio 2006, 10:05
Località: Stregna
Contatti:

Re: script e privilegi di root

Messaggio da lucapost »

forse ho trovato il problema, è una questione di permessi anche per /usr/bin/wvdial (anche se mi sembra un pò strano data la cartella nella quale si trova wvdial), infatti se aggiungo in /etc/sudoers.tmp

Codice: Seleziona tutto

lucapost ALL = NOPASSWD: /usr/local/bin/wvdial
e modifico lo script dialup nel modo seguente:

Codice: Seleziona tutto

#!/bin/bash
#programma avvio connessione dialup

sudo dialuproot            
sudo wvdial      
         

da utente lucapost lancio 'dialup'  e la connessione parte correttamente!!!  ;D

Ok, sono arrivato al risultato che cercavo per una strada della quale avevo solo sentito parlare, infatti quando ho scritto questo
lucapost ha scritto: ho il seguente script /usr/local/bin/dialup :

Codice: Seleziona tutto

#!/bin/bash
#programma avvio connessione dialup

ifdown eth1
ifdown eth0
ifup ppp0
/usr/sbin/slmodemd --country=ITALY /dev/slusb0 &

wvdial
come faccio da utente normale a lanciare diaulp senza che mi venga chiesta alcuna password?

e ancora più interessante, sempre senza inserire alcuna pwd dopo il lancio dello script, come acquisisco i privilegi di amministratore temporaneamente e quindi solamente per i primi 4 comandi, per poi eseguire wvdial da utente normale?
Come posso modificare lo script?

Luca
intendevo risolvere il problema, senza andar a modificare file di configurazione o permessi vari, ma solo lavorando sullo script stesso, cmq sicuramente quella che mi avete invitato a seguire è una strada molto più breve, comunque tranquilli... mi accontento, mi accontento! :)
Grazie a tutti.
Luca
               
Avatar utente
taralluccio
Prode Principiante
Messaggi: 40
Iscrizione: giovedì 6 aprile 2006, 21:35
Località: Bergamo, Italia
Contatti:

Re: script e privilegi di root

Messaggio da taralluccio »

lucapost ha scritto: forse ho trovato il problema, è una questione di permessi anche per /usr/bin/wvdial (anche se mi sembra un pò strano data la cartella nella quale si trova wvdial), infatti se aggiungo in /etc/sudoers.tmp
Forse anche wvdial deve essere eseguito come root per funzionare. O forse no ma ha bisogno dei permessi per accedere a /dev/slusb0 o al device del modem.
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 1 ospite