Newsgroup: it.comp.lang.perl
Titolo: Script su Linux e passaggio da utente a root

Salve.
In uno script normalmente lanciato da un utente, avrei bisogno di
eseguire alcune istruzioni da root.
In pratica, se l'utente mi risponde positivamente ad una richiesta,
dovrei fare in modo che, inserendo la password di root, possa modificare
un file (/etc/fstab), e, dopo averlo fatto, esca e ritorni allo stato di
utente normale.
Al momento lo script, tramite 
if ($< eq 0) 
si accorge da solo se chi ha lanciato lo script è un utente normale
oppure root, e solo in questo secondo caso chiede se si vuole modificare
tale file. 
Avrei però bisogno di inserire alcune righe che inizino con 
if ($< ne 0)
e che diano la possibilità all'utente di diventare root per la modifica.
Ho provato con 
if ($< ne 0) {
	system ("su");
	.... # Resto del codice
ma, dopo che la password è inserita, lo script se ne esce bello bello e
non mi esegue il resto del codice finchè dalla shell lancio un "exit".
Insomma ... è inutile!
Come poso fare a fare in modo che, digitata la password, sia
effettivamente root ad agire sul file e, finita la modifica, root esca
di scena e l'utente continui a eseguire lo script?
TIA
Edo

 di scena e l'utente continui a eseguire lo script?
Beh. Si dovrebbero analizzare con molta attenzione le implicazioni di
sicurezza legate a questo mio consiglio ma direi:
1) rendi lo script suid
2) esegui tutto con l'uid del chiamante (non root, insomma) e, quando devi 
  andare a toccare il file critico:
  2a) chiedi TU all'utente la password di root (andando a confrontare con 
     quella di /etc/passwd)
  2b) se l'autenticazione ha funzionato, cambia l'uid di esecuzione, altera 
  il file critico e poi ritorna all'uid originale.
 
<Disclaim>
IL CONSIGLIO CHE HO DATO E' PURAMENTE INDICATIVO E NON MI ASSUMO ALCUNA 
RESPONSABILITA' SU EVENTUALI PROBLEMI DI SICUREZZA AD ESSO LEGATI, PERCHE'
NON SONO IN GRADO DI VALUTARNE LA PORTATA SENZA CONOSCERE IL PROGRAMMA IN
QUESTIONE.
</Disclaim>
Al giorno d'oggi, e' meglio mettere le cose bene in chiaro :)
Maurizio
-- 
Maurizio M. Munafo' / 
mmmu...@netscape.net
"Consider Phlebas, who was once handsome and tall as you" (T.S.Eliot)

 Al giorno d'oggi, e' meglio mettere le cose bene in chiaro :)
A dire la verità, mi hai quasi quasi fatto cambiare idea ....
A 'sto punto gli metto una bella indicazione con un print e se uno è un
po' furbetto se lo fa a mano, altrimenti ... s'attacca!!
Tanto non è una cosa strettamente necessaria, era solo un 'dippiù'!
O meglio, faccio una cosa del genere:
if ($< eq 0) {
	... codice di modifica del file 
} else {
	print "Se vuoi modificare il file loggati come root e metti le mani qui,
	qui, li ecc.\n";
}
Mi sembra la cosa più intelligiente e, soprattutto, meno pericolosa; confermi??
Grazie
Edo




Non e' meno pericolosa che farlo da file. In un caso il rischio e' che
qualcuno che non potrebbe esegue le istruzioni che hai fissato tu.
Nell'altro ti fidi ciecamente che un'altra persona segua delle istruzioni e
non distrugga il file per errore.
Scegli tu quale e' il male minore.


 Scegli tu quale e' il male minore.
Sinceramente ..... non ho capito quello che vuoi dire!!
(sarà che ho letto il tuo messaggio di sera, con i neuroni mezzi
addormentati! :-))
Edo

 Sinceramente ..... non ho capito quello che vuoi dire!!
Che nella soluzione da me suggerita, c'e' il rischio che qualcuno che non ha
diritti sia in grado di trovare il modo di utilizzare il tuo script per
ottenere i diritti di root (non dico che sia possilible, solo che se le
operazioni non sono ben concertate cio' possa accadere)
Nella tua soluzione (fai login e fai questo, questo e quest'altro) tu devi
fidarti che una persona che i diritti di root li ha gia' segua esattamente le 
tue istruzioni e non faccia casini cancellando informazioni utili.


 tue istruzioni e non faccia casini cancellando informazioni utili.
Ah, ok, adesso ho capito (è mattina e sono eveglio, a grandi linee!!).
Per quanto riguarda i diritti di root, se uno è loggato come root agisce
a livello sicuro perchè non fa altro che andare a scrivere su .bashrc e
bash_profile, che sono file che, per quanto importanti possono essere,
non fanno male a nessuno; e poi tutto è sempre tenuto sotto controllo:
voglio dire che le cose che lo script fa sono e restano quelle; se uno
vuole farsi del male, allora deve modificre il codice dello script, ma a
quel punto sono cavolacci suoi!
Per quanto riguarda poi la modifica del file fatidico (il famoso
/etc/fstab), lo script non fa altro che chiedere se si vuole modificare
tale file e, in caso di risposta positiva, apre il file con un editor a
scelta. E, ripeto, se uno non sa quello che sta facendo mentre modifica
quel file e combina casini, sono ca§§i suoi!! In fondo, la modifica del
file non è imposta, c'è solo una richiesta: uno che non ci sa molto fare
può benissimo rispondere 'no' e non succede niente!
Quindi credo che lascerò tutto così!
Cmq grazie per le dritte!
Edo

 ICQ# 1980563

 password.
So benissimo che esiste sudo, oltre ad altri programmi simili (super,
per
fare un nome), solo che come faccio a fare in modo che sudo sia settato
in modo da poter far eseguire alcuni comandi a determinati utenti? Non
sapendo nè il GID di colui che lancia lo script nè la configurazione di
sudo, la cosa mi sa di impossibile!!
Anzi, categoricamente è impossibile! Riuscirci sarebbe solo un caso ( e
pure raro!!)
E poi sudo non mi piace come programma, ma questo è un giudizio
personale! ;-))
Cmq grazie per l'interesse, anche se ho già trovato una 'scappatoia'!
Edo

 
--


 d'ambiente SUDO_*.
Ma se poi lo script lo passo a te, o lo metto su Freshmeat, devodare la
configurazione di sudo a tutti?? :-))
Edo