script e privilegi di root
script e privilegi di root
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
Re: script e privilegi di root
Re: script e privilegi di root
- ryuujin
- Entusiasta Emergente

- Messaggi: 1032
- Iscrizione: venerdì 14 aprile 2006, 2:57
- Sesso: Maschile
- Località: Pescara
- Contatti:
Re: script e privilegi di root
In Linux è possibile impostare un attributo (suid) ad un file che permette di eseguire il file con i privilegi del proprietario.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?
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
Per ogni dubbio.. chiedi
"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
- lucapost
- Prode Principiante
- Messaggi: 137
- Iscrizione: domenica 15 gennaio 2006, 10:05
- Località: Stregna
- Contatti:
Re: script e privilegi di root
Codice: Seleziona tutto
#!/bin/bash
#programma avvio connessione dialup
ifdown eth1
ifdown eth0
ifup ppp0
/usr/sbin/slmodemd --country=ITALY /dev/slusb0 &
wvdial
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
- ryuujin
- Entusiasta Emergente

- Messaggi: 1032
- Iscrizione: venerdì 14 aprile 2006, 2:57
- Sesso: Maschile
- Località: Pescara
- Contatti:
Re: script e privilegi di root
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. :Plucapost 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?
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
PS: la seconda domanda non l'ho capita, ma sarà colpa mia perché vado di fretta ??? :P
"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
- lucapost
- Prode Principiante
- Messaggi: 137
- Iscrizione: domenica 15 gennaio 2006, 10:05
- Località: Stregna
- Contatti:
Re: script e privilegi di root
Codice: Seleziona tutto
lucapost@AsusA6V:/usr/local/bin$ ls -l dialup
-rwsr-sr-x 1 711 root 142 2006-04-28 21:18 dialup
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
- ryuujin
- Entusiasta Emergente

- Messaggi: 1032
- Iscrizione: venerdì 14 aprile 2006, 2:57
- Sesso: Maschile
- Località: Pescara
- Contatti:
Re: script e privilegi di root
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 711lucapost 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
devi provare a sistemare con:
Codice: Seleziona tutto
sudo bash
chown root:root dialup
chmod 711 dialup
chmod +s dialup
exit
"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
- lucapost
- Prode Principiante
- Messaggi: 137
- Iscrizione: domenica 15 gennaio 2006, 10:05
- Località: Stregna
- Contatti:
Re: script e privilegi di root
- lucapost
- Prode Principiante
- Messaggi: 137
- Iscrizione: domenica 15 gennaio 2006, 10:05
- Località: Stregna
- Contatti:
Re: script e privilegi di root
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$
- ryuujin
- Entusiasta Emergente

- Messaggi: 1032
- Iscrizione: venerdì 14 aprile 2006, 2:57
- Sesso: Maschile
- Località: Pescara
- Contatti:
Re: script e privilegi di root
mea culpa mea culpa.. ci vorrebbe un emoticon seduta su un piatto di ceci...lucapost ha scritto: ricapitolando, la situazione è la seguente:
e non funge ancora... :-\
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
"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
- taralluccio
- Prode Principiante
- Messaggi: 40
- Iscrizione: giovedì 6 aprile 2006, 21:35
- Località: Bergamo, Italia
- Contatti:
Re: script e privilegi di root
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.lucapost ha scritto:come faccio da utente normale a lanciare diaulp senza che mi venga chiesta alcuna password?
Apri il file di configurazione di sudo:
Codice: Seleziona tutto
$ sudo visudoCodice: Seleziona tutto
lucapost ALL = NOPASSWD: /usr/local/bin/dialup
Codice: Seleziona tutto
sudo chmod 0755 /usr/local/bin/dialupCrei un altro script che eseguelucapost 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?
Codice: Seleziona tutto
#!/bin/sh
sudo /usr/local/bin/dialup # come root
wvdial # come utente normale
Codice: Seleziona tutto
alias dialup='sudo /usr/local/bin/dialup; wvdial'- lucapost
- Prode Principiante
- Messaggi: 137
- Iscrizione: domenica 15 gennaio 2006, 10:05
- Località: Stregna
- Contatti:
Re: script e privilegi di root
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 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...
- ryuujin
- Entusiasta Emergente

- Messaggi: 1032
- Iscrizione: venerdì 14 aprile 2006, 2:57
- Sesso: Maschile
- Località: Pescara
- Contatti:
Re: script e privilegi di root
dai anche: sudo chmod +s dialuplucapost 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
appena dopo aver impostato 755
vediamo se così va ::)
scusami, io ho provato sul mio e funge...
"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
- taralluccio
- Prode Principiante
- Messaggi: 40
- Iscrizione: giovedì 6 aprile 2006, 21:35
- Località: Bergamo, Italia
- Contatti:
Re: script e privilegi di root
Uhm... In teoria non dovrebbe funzionare, il kernel ignora il bit SUID sugli script: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...
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$
- lucapost
- Prode Principiante
- Messaggi: 137
- Iscrizione: domenica 15 gennaio 2006, 10:05
- Località: Stregna
- Contatti:
Re: script e privilegi di root
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$
- lucapost
- Prode Principiante
- Messaggi: 137
- Iscrizione: domenica 15 gennaio 2006, 10:05
- Località: Stregna
- Contatti:
Re: script e privilegi di root
dopo aver aggiunto a /etc/sudoers.tmp la riga seguente
Crei un altro script che esegueCodice: Seleziona tutto
#!/bin/sh sudo /usr/local/bin/dialup # come root wvdial # come utente normale
Codice: Seleziona tutto
lucapost ALL = NOPASSWD: /usr/local/bin/dialuprootCodice: 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#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$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
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
- lucapost
- Prode Principiante
- Messaggi: 137
- Iscrizione: domenica 15 gennaio 2006, 10:05
- Località: Stregna
- Contatti:
Re: script e privilegi di root
Codice: Seleziona tutto
lucapost ALL = NOPASSWD: /usr/local/bin/wvdialCodice: Seleziona tutto
#!/bin/bash
#programma avvio connessione dialup
sudo dialuproot
sudo wvdial da utente lucapost lancio 'dialup' e la connessione parte correttamente!!!
Ok, sono arrivato al risultato che cercavo per una strada della quale avevo solo sentito parlare, infatti quando ho scritto questo
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!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?Codice: Seleziona tutto
#!/bin/bash #programma avvio connessione dialup ifdown eth1 ifdown eth0 ifup ppp0 /usr/sbin/slmodemd --country=ITALY /dev/slusb0 & wvdial
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
Grazie a tutti.
Luca
- taralluccio
- Prode Principiante
- Messaggi: 40
- Iscrizione: giovedì 6 aprile 2006, 21:35
- Località: Bergamo, Italia
- Contatti:
Re: script e privilegi di root
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.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
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 1 ospite
