Pagina 1 di 1

[Server] Server LAMP: esecuzione comandi bash da PHP come utente root [Risolto]

Inviato: mercoledì 27 maggio 2009, 17:24
da mauro79
Salve ragazzi,
premetto che non sono un espertissimo,
ma ultimamente mi sto dilettando a creare una pagina web per centralizzare la connessione ad internet della mia rete locale.
Il mio problema consiste in questo, per la connessione ad internet devo utillizzare una chiavetta della tre, da network manager tutto funziona egregiamente e navigo.
Ora ho voluto far in modo che il mio PC fungesse da router per la navigazione anche per gli altri utenti della mia rete. Fin qui alcun problema, ho trovato un utilissima guida che spiegava per filo e per segno come fare. Se inserisco la chiavetta e abilito la connessione da network-manager, tutta la rete naviga senza problemi.
Seccato però dal fatto che praticamente chiunque voglia navigare deva necessariamente entrare nel mio pc e effettuare la connessione, sto tentando di creare una semplice pagina web in PHP che permetta a qualsiasi utente di avviare la connessione direttamente dal suo browser.
E qui nascono i problemi, ho pensato di utilizzare wvdial per gestire la connessione, l'ho configurato e testato, da riga di comando nessun problema, poi sullo script PHP che gestisce la cosa ho inserito "exec('sudo wvdial')" ma ovviamente l' utente www-data non ha i diritti per eseguire wvdial come sudo, per questo ho seguito alcune guide che mi hanno portato ad editare il file /etc/sudoers inserendo le seguenti righe:

Defaults:wwww-data !requiretty
wwww-data ALL=NOPASSWD: /usr/bin/wvdial

Bene, tuttora la cosa non funziona e non sono riuscito ancora a trovare spunti chiari per risolvere il mio problema.
Se qualcuna di voi anime pie fosse in grado di darmi dei suggerimenti utili ve ne sarei grato
Confidando in un aiuto, un saluto a tutti

Re: [Server] Server LAMP: esecuzione comandi bash da PHP come utente root

Inviato: venerdì 29 maggio 2009, 18:12
da enzotib
Se è un problema di permessi, prova a guardare in /var/log/auth.log.
Hai provato a entrare come utente www-data (con il comando sudo su - www-data) e lanciare quello stesso comando dal terminale con nohup (per simulare l'assenza di terminale)?
Altri comandi messi in exec() funzionano?
Potrebbe essere un problema di PATH?
Oppure di limitazioni di sicurezza imposte da php?
Se è un problema specifico di php non saprei aiutarti.

ciao

--
enzotib

Re: [Server] Server LAMP: esecuzione comandi bash da PHP come utente root

Inviato: sabato 30 maggio 2009, 17:37
da mauro79
Ciao, trovo la cosa imbarazzante,
ma i problemi erano due:

1: Mia distrazione
2: Tecnica da raffinare :)

Per quanto riguarda il punto 1, devo dire che son stato proprio un volpe, l' utente non è wwww-data come avevo scritto io ma www-data, non aggiungo altro  ::) .
Per il punto 2 a questo punto la faccenda funzionava ma andava un pò affinata la tecnica.
Mi spiego meglio, inserendo in /etc/sudoers la stringa www-data ALL=NOPASSWD: /usr/bin/wvdial avrei permesso l'esecuzione di wvdial a www-data con privilegi di root, ma la cosa non era poi tanto intelligente, avrei dovuto fare anche il kill di quel processo nel momento della disconnessione, ma dare i permessi di esecuzione a un comando come killall non era poi tanto un idea brillante.
Quindi mi son scervellato un pò ma grazie ai suggerimenti trovati googlando ho risolto alla svelta, mi spiego velocemente, così magari la cosa potrà servire anche a qualcun altro (SPERO):

è bastato scrivere un semplice script bash con owner e group impostati come ROOT e ovviamente con il flag eseguibile attivato ( posto per esempio il mio):

#!/bin/bash
if [ $1 == 1 ]
then
      wvdial
else
        killall wvdial
fi

poi sul file /etc/sudoers ho editato la stringa nel seguente modo:

www-data ALL=NOPASSWD: /percorso/dello/script

a questo punto nello script php non ho fatto altro che editare:

exec('sudo /percorso/dello/script 1'); --> per eseguire wvdial
exec('sudo /percorso/dello/script 2'); --> per eseguire il kill di wvdial

bene cosi facendo a www-data  è concesso eseguire solo quello ben specifico script che può eseguire solo le operazioni per cui è stato concepito, mantenendo così anche un certo livello di sicurezza in più.

Mi sono dilungato ma veramente ho risolto parecchi problemini grazie ai tanti spunti trovati in questo forum e ora spero di restituire almeno in parte i tanti favori ricevuti :) .
Se qualcuno ha il mio stesso problema o è interessato a quanto ho fatto, non esitate a contattarmi sul forum, vi invierò volentieri i mie script, magari cosi potranno pure migliorare (Dato che son niubbo :) )
Un saluto a tutti e grazie