Newsgroup: it.comp.lang.perl
Titolo: Cambio password di utenti Samba su linux

Ciao a tutti!
	Devo realizzare uno script che si interfacci con apache2 per il 
cambiamento delle password degli utenti di un dominio realizzato con 
samba su linux server che fa da pdc. Ho già fatto in modo che la 
password venga cambiata ma non mi è ancora ben chiaro come fare in modo 
che ***solo*** l'utente interessato possa cambiare la propria password.
	Attualmente quindi chiunque accede al modulo web che ho realizzato può 
cambiare le password degli utenti (ovviamente a patto di conoscere il 
nomeutente).
	Qualcuno ha qualche idea su come riconoscere gli utenti legittimi con 
relativa vecchia-password?
	Pensavo ad una sorta di login iniziale in cui le credenziali vengano 
verificate direttamente dagli utenti samba per poi accedere all'area 
protetta che è rappresentata dal mio modulo in cui il nomeutente sarà 
bloccato a quello che ha effettuato il login e la nuova password la 
fornisce l'utente (il tutto con uso di SSL e passaggio parametri con 
metodo POST)
Mi basterebbe anche uno script di partenza da modificare per le esigenze 
specifiche o almeno qualcosa su cui iniziare a lavorare.
Grazie, ciao!
Paperoga.

Paperoga wrote:

Anziché elencare ipotesi implementative, dovresti descrivere con 
precisione quali sono le difficoltà che incontri, una alla volta, 
altrimenti diventa difficile aiutarti (comunque quello che chiedi è 
banale da implementare, se vuoi soltanto cambiare la password 
dell'utente - per cui non capisco dov'è che ti sei bloccato: una cosa 
alla volta, mi raccomando! ;-)

Ciao Emanuele,
ti ringrazio per l'interessamento e mi scuso se sono stato poco chiaro. 
Il punto è che non so da dove partire perciò cercavo qualcosa di 
semi-pronto da modificare ovviamente sulla base delle mie esigenze reali.
La cosa principale ed anche la più importante è che non ho idea di come 
possa essere realizzata è: verificare che l'utente che immette i propri 
login/password sia effettivamente un utente del dominio.
Il problema nasce dal fatto che il mio script che cambia le password 
agli utenti, gira come root e quindi non gli viene mai chiesta la 
vecchia password.
In questo modo però (ovvero se non autentico l'utente) non so mai se chi 
  cerca di cambiare la password è veramente chi dice di essere e quindi 
potrebbero verificarsi situazioni in cui un utente ppuò cambiare la 
password di un altro piuttosto che la sua.
Spero di essere stato maggiormente chiaro questa volta.


 Spero di essere stato maggiormente chiaro questa volta.
OK, allora mi sembra che il problema sia l'autenticazione dell'utente 
contro Samba.
In realtà, se vuoi _solo_ cambiare la password, il problema non si pone 
neanche: basta usare "smbpasswd -s -U username" come utente non 
privilegiato e ti verrà chiesta la vecchia password, per cui l'utente lo 
autentichi contestualmente al cambiamento della password (lo switch -s 
serve ad eseguire smbpasswd in maniera non interattiva: man smbpasswd).
In sostanza, senza neanche farlo autenticare prima, basta che proponi 
all'utente una form con i seguenti 4 campi: username, vecchia password, 
nuova password, conferma della nuova passowrd, e poi invochi smbpasswd 
con i dati POSTati.
Ecco lo script (quasi) completo:
-----
use CGI;
my $q = CGI->new;
my $user    = $q->param('username');
my $old_p   = $q->param('old_password');
my $new_p   = $q->param('new_password');
my $new_p_2 = $q->param('confirm_new_password');
my $r =
`(echo $old_p; echo $new_p; echo $new_p_2;) | smbpasswd -s -U $user`
my $user_feedback = $r =~ /^Password changed/
     ? 'OK' : 'Error';
# ...
-----
Ma ora viene il brutto (era troppo semplice ;-)
Benché lo script funzioni (salvo errori di battitura e locales 
nostrani), è estremamente insicuro, perché passa all'operatore `` input 
utente non controllato.
La messa in sicurezza la lascio a te, ma se hai problemi fammi sapere 
(non lo faccio per sadismo, se fossi partito subito con la soluzione 
sicura sarebbe stato assai meno chiaro).
Questa FAQ dice già quasi tutto:
http://faq.perl.org/perlfaq8.html#How_can_I_call_backt
Se dovessi avere altri problemi o esigenze fammi sapere.
Sarebbe altresì utile che alla fine postassi la tua soluzione, perché 
potrebbe servire a qualcun altro.
Ciao!

Intanto grazie per l'ottima base di partenza e gli ottimi consigli, ci 
lavoro e posto la soluzione.
Ciao e grazie ancora.
Emanuele Zeppieri ha scritto:
