Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Cambio password di utenti Samba su linux

0 views
Skip to first unread message

Paperoga

unread,
Jun 27, 2008, 10:36:39 AM6/27/08
to
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.

Emanuele Zeppieri

unread,
Jun 27, 2008, 9:56:32 PM6/27/08
to
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! ;-)

Paperoga

unread,
Jul 1, 2008, 10:45:58 AM7/1/08
to
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.

Emanuele Zeppieri

unread,
Jul 3, 2008, 12:07:24 PM7/3/08
to
Paperoga wrote:

> 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.

Nessun problema, ma il fatto è che non sapevo proprio dove indirizzarti,
non sapendo se ti eri fermato sull'autenticazione, o prima ancora sulla
lettura dei parametri cgi, o successivamente sul cambio della password:
avrei dovuto postare un sacco di esempi col rischio poi che non era
nulla di quello che ti serviva (da cui l'importanza di fare una sola
domanda alla volta il più possibile circostanziata ;-)

> 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.

No, *non* lo fare, non c'è n'è alcun bisogno (vedi oltre).
Fai girare lo script come cgi normale, con i privilegi del web server.

> 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.

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!

Paperoga

unread,
Jul 7, 2008, 9:40:03 AM7/7/08
to
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:

0 new messages