Newsgroup: it.comp.lang.perl
Titolo: Come diventare root?





Ciao,


dovrei fare un programma che permette di cambiare 
dei parametri nella configurazione di rete. Ma questo posso farlo solo da root. 
Dovrei far inserire la password tramite un form in una pagina web(e questo non 
e' un problema), ma poi non riesco ad utilizzare questa password per diventare 
root. Avevo intenzione di usare il comando 'su', ma non sono venuto a capo di 
niente. Sapete consigliarmi?


 


Grazie,


Danilo



 ma poi non riesco ad utilizzare questa password per diventare root
e questa, direi, e' una fortuna per tutti....
scusa, mi e' partito un colpo mentre pulivo l'arma.
Comunque, se proprio ci tieni a fare danni, configura sul tuo webserver un
virtualhost (assumo che tu usi apache sotto linux) con le direttive:
  User  root
  Group root
oppure, piu' in generale, lancia sulla tua macchina un secondo web server
(che ovviamente non usi la porta 80), per il quale siano definite a livello
di configurazione generale le direttive di cui sopra e verso il quale crei
dei link dalle pagine del server principale per far eseguire le procedure
che richiedono i privilegi di root.
Come hai notato non ho accennato nemmeno per sbaglio all'ipotesi di far
girare il web principale come root.
In ogni caso ti esorto a meditare attentamente sull'avvertenza che il
manuale di apache riporta nella sezione in cui descrive la direttiva 'User':
<cite>
  SECURITY: Don't set User (or Group) to root unless you know exactly
  what you are doing, and what the dangers are.
</cite>
ciao, marco
--
Marco Cacchiani                                
e-mail:ma...@sirius.pisa.it
Public pgp key:         
http://www.sirius.pisa.it/marco/pgp_public_key.asc
Sirius Servizi Informatici                     e-mail: 
in...@sirius.pisa.it
Parco Teatro Pasolini, 1                       Phone:  +39 (50) 865120
I-56019 - Vecchiano                            Fax:    +39 (50) 860260
(Pisa - ITALIA)                                
http://www.sirius.pisa.it/

 
Proprio vuoi fargli del male: questa è apologia di (o "istigazione a")
puro masochismo :-)))

 una certa dir accessibile solo da root.root).
Usando script set-uid-ati, suidperl anziche' perl come interprete, 
picchiandosi con i livelli di sicurezza di suidperl, e un po di altri 
trucchetti che ora su due piedi non ricordo, io ero riuscito a operare come 
root via cgi, cioe' partendo da un processo con uid=65534.
-- 
Saluti,
Giancarlo

 Usando script set-uid-ati, suidperl anziche' perl come interprete,
Ok, speravo di essermela cavata, buttandola la' in qualche modo, ma vedo che
qui la gente e' tignosa.
Allora propongo la seconda soluzione:
   wrapsuid
E' un'utility che viene distribuita con perl e che permette di fare un
wrapper in C che puo' essere lanciato suid e quindi fare tutto quello che
l'owner e' autorizzato a fare.
In realta' se Danilo scrivesse la propria utility in C non ci sarebbe
bisogno di questo trucco.
wrapsuid si trova nella directory 'eg' della distribuzione di perl, ma in
ogni caso si tratta semplicemente di fare il seguente programma wrapper.c
<code>
  main(argc,argv)
  int argc;
  char **argv;
  {
      execv([SCRIPT],argv);
  }
</code>
e di compilarlo usando il comando:
  cc wrapper.c -o [SUIDCMD]
dove [SCRIPT] e' il path assoluto dello script perl e [SUIDCMD] e' il nome
dell'eseguibile che deve essere creato.
Quindi bisogna fare:
  chown root.root [SUIDCMD]
e
  chmod u+s [SUIDCMD]
wrapsuid aiuta ad eseguire tutto questo in modo semiautomatico:
Si aspetta di trovare lo script con il suid bit acceso (altrimenti non fa
niente) e va lanciato con la sintassi:
  wrapsuid path/dello/script
A questo rinomina lo script come /path/dello/.script e crea un wrapper con
il nome originario dello script.
Dopo aver lanciato wrapsuid bisogna comunque fare chown e chmod perche'
wrapsuid da solo non lo fa.
Occhio a dove wrapsuid va a cercare il cc, perche' se non lo trova
(ovviamente) non funziona.
Occhio anche che se qualcosa non funziona, dopo che wrapsuid ha gia'
rinominato il file questo risulta invisibile e con il suid bit resettato.
Quello di cui non sono sicuro (e che ora non ho punta voglia di provare) e'
se apache lanciato con la direttiva
  User nobody
e' in grado di lanciare suid root i cgi, ma sicuramente puo' farlo se
lanciato come user diverso da nobody.
Continua a valere ogni bit di quanto gia' scritto nei post precedenti a
proposito della sicurezza.
Ciao, marco
