Newsgroup: it.comp.os.linux.sys
Titolo: riavviare servizi da script web.

Salve.
Ho due macchine collegate in lan, hots1 e' un web server (apache), host2 e' un 
proxy server (squid).
Il proxy consente l'accesso ad internet a derminati clients e per far questo
legge un file di testo contenente gli ip autorizzati.
Quello che vorre ifare e' questo:
permettere ad alcuni utenti autorizzati di collegarsi ad una pagina web sul
server web host1.
Da qui inserire dei dati (gli ip) che dovranno essere registrati sul file di
testo collocato su host2 che e' utilizzato da squid, sempre sull'host 2.
Una volta modificato il file squid dovra' rileggere il suo file di conf per
rendere attive le modifiche.
Sarebbe possibile fare una cosa del genere, per esempio utilizzando php ma
anche qualche altro linguaggio idoneo?
Grazie.

msan wrote:

cavolo che pippe mentali..
soluzione..
sull'host2 installi webmin
dopodiché ti puoi scrivere un modulo semplicissimo in perl che fa 
esattamente ciò che ti serve.
NB: in più hai il vantaggio di poter utilizzare una connessione protetta in 
modalità SSL il che credo non schifi..
Ovviamente è anche possibile concedere l'accesso esclusivamente al modolo 
appena creato tramite gli appositi account di webmin senza dover consegnare 
l'accesso all'intera macchina



Si può fare come pensi tu, ma è molto macchinoso.
L'idea di usare webmin non è male, tra l'altro ti aiuta a configurare anche
Squid. Senza scriverti moduli particolari puoi usare il modulo squid,
concedendone l'accesso solo a chi deve.
Oppure installi sulla macchina con squid apache e metti lì i tuoi script php
di amministrazione. Secondo me non c'è niente di male a mettere un apache di
manutenzione. L'ho fatto su diversi Proxy Server di clienti.
Una nota: non puoi far riavviare squid da un cgi o da uno script php, che
girano con i privilegi di apache (e NON SI FA GIRARE apache da root!). La
soluzione migliore, a mio avviso, è quella di usare una named pipe (man 4
fifo).
Ciao
Andrea

 l'accesso all'intera macchina
Si, ci avevo gia' pensato e avevo fatto anche delle prove.
Il problema e' che quando riavvio squid con webmin il log mi dice:
Performing DNS Tests...
Oct 24 09:26:05 per2232 squid[9358]: ipcache_init: DNS name lookup tests
failed.
Oct 24 09:26:05 per2232 squid[9353]: Squid Parent: child process 9358 exited
due to signal 6
Se invece mi loggo come root da consolle e riavvio squid funziona regolarmente.
A dire la verita' comunque queste "pippe mentali" derivano dal fatto che nella
macchina remota dove gira il proxy non avrei voluto installarci nessun
ulteriore servizio ecco perche' avrei voluto gestire squid da remoto.
Ciao.

 squid da remoto. Ciao.
mmm.. forse non ci capiamo...
ciò che intendevo è che di devi realizzare un "modulo" in base alle tue 
esigenze il che significa che non utilizzi un modulo preesistente.
Quindi basta che ti fai un pulsante che richiama la funzione sistem()
e passi i comandi in pratica:
#!/usr/bin/perl
print "Riavvio il dns\n\n"; 
system("/etc/rc.d/init.d/named restart");
system("/etc/init.d/httpd restart");
semplice no?

 semplice no?
Si, sembra semplice, non l'ho ancora provato ma ho un dubbio.
Scusa la mia ignoranza.
Tale script in perl verrebbe eseguito con i privilegi dell'utente con cui 
gira apache, giusto?
Avevo gia' provato a fare una cosa simile con php e non ci sono riuscito 
proprio per una questione di privilegi.
Per poter ripartire squid ha bisogno dei privilegi di root. 

squid ha bisogno dei privilegi di root.
infatti 2.
hai due strade, relativamente semplici: scriverti un wrapper o "copiare"
qualcosa di esistente.
*potresti* scriverti un wrapper perl e renderlo suid (non shellscript),
se la tua situazione e` sufficentemente sotto controllo per poterlo fare
(suid comporta tematiche di security). A questo punto la tua
"interfaccia" (cgi, php, whatever) invocherebbe il wrapper e non
tenterebbe come utente "apache" di avviare o fermare servizi.
*potresti* dare un'occhiata su come fa "webmin" di cui in fondo vuoi
fare un mini clone (se ho capito bene, non ho seguito tutto il thread).
Suppongo, cmq, che webmin, usi un wrapper. :)
PS: potresti usare webmin?
-- 
"The Computer made me do it."
Maurizio - Tannoiser - Lemmo
Founder Member of ERLUG (Emilia Romagna Linux User Group)
http://erlug.linux.it

 "copiare" qualcosa di esistente.
C'è una terza strada: con l'applicazione php scrivi un file
'squid.reload' e un programma (magari sempre php, ma nel
crontab di root) vede che il file esiste e fa quello che deve fare,
cancellandolo alla fine.
--
Valerio Granato
http://www.musicoff.com
 - Music Online For Free
La Grande Comunità Online per Musicisti

 cancellandolo alla fine.
Dovrei far fare questo controllo al crontab almeno ogni 5 minuti.
Trovi che sia il caso?
Questo ulteriore processo praticamente sempre attivo.



Vedi la mia risposta al thread "amministrazione remote, come fareste?"
Andre