Newsgroup: it.comp.lang.perl
Titolo: /etc/shadow help!!!

Premesso che sono alle prime armi con Perl..
dovrei fare un cgi che mi permetta agilmente di inserire un utente così come 
si farebbe con useradd e passwd.
quindi, preparato il form procedo con una chiamata system() e passo le 
variabili a useradd e fin qui non ci sono problemi.
ma per la password?? visto che passwd è interattivo..
pensavo di risolvere criptando direttamente la password con prel, ma a dire 
il vero non ho ben afferrato come funzia crypt.
quindi premesso di avere già disponinibile nello script le variabili $user e 
$password come genero una stringa in stile:
rita:$1$MkHw2L0s$po.Oc7Y/UjhiDPIzzBGm71:11947:0:99999:7:::
da inserire nel /etc/shadow 
Ringrazio anticipatamente..
Ps: ho già dato un occhio ai moduli di webmin e cen'è uno che fa proprio 
questo ma la complessità dello script supera di gran misura le mie 
conoscienze in ambito Perl.. se volete dare un occhio si trova tutto in  
/usr/libexec/webmin/passwd (sempre che abbiate webmin installato 
ovviamente..)

 ma per la password?? visto che passwd è interattivo..
useradd, opzione -p
Dagli la password passata attraverso crypt (occhio al salt).
Ciao,
 Emmanuele.
-- 
Emmanuele Bassi (Zefram)           [ 
http://www.radiance.d2g.com/~zefram
 ]
GnuPG Key fingerprint = 4DD0 C90D 4070 F071 5738  08BD 8ECC DB8F A432 0FF4

 Dagli la password passata attraverso crypt (occhio al salt).
Forse non mi sono spiegata correttamente.. 
l'opzione -p di useradd inserisce la password in chiaro, e fin qui ci 
arrivavo, il mio problema è inserire una password criptata così come fa 
passwd.
Ma essendo che non mi riesce di trovare una spiegazione di come funziona 
crypt e relativo "salt" ( anche in considerazione del fatto che ho appena 
iniziato con perl ) mi andrebbe benissimo anche una dritta su dove trovare 
materiale ..
Per ora credo che farò prima con un altra chiamata di system() ed un piccolo 
script di expect che lavori con passwd, ma mi piacerebbe farlo direttamente 
in perl 
saluti  

 materiale ..
Neanche perldoc -f crypt? Eppure è bello chiaro...
Ad ogni modo:
	crypt ($plaintext, $salt);
Dove $salt è un subset scelto a caso tra [a-zA-Z0-9./]
Come ho detto: perldoc -f crypt è molto dettagliato a riguardo.



Io credo che il problema di Rita sia conoscere _come_ linux usa il "salt".
Mi spiego meglio:
se faccio
$cpass = crypt($password, "aa"); # ottengo le mie belle 4096 combinazioni di
crittazione
ma se faccio
$cpass = crypt($password, "ab"); # ne ottengo altre 4096, tutte diverse dal
caso di prima
Quindi, bisognerebbe sapere che "salt" usa 'passwd' di linux, in modo da
poter criptare la password
da perl, e infilare la stringa già bella e fatta in /etc/shadow, senza usare
nè 'useradd' nè 'passwd' . Linux avrà un nuovo utente
e non se ne accorgerà nemmeno :-)
(Ovvio che lo script dev'essere eseguito con suid 0)
La risposta non la conosco, ma interesserebbe anche a me saperne di più.
Who can help? :-)
Guido.

 caso di prima
Certo. Ma non te ne frega nulla, dato che, quando si dovrà verificare la
password, al posto del salt ci si infilerà la password crypt-ata:
 
	When verifying an existing encrypted string you
	should use the encrypted text as the salt (like
	"crypt($plain, $crypted) eq $crypted").
La scelta del salt è determinante solo in fase di "creazione" di una
password.


 Come ho detto: perldoc -f crypt è molto dettagliato a riguardo.
Una cosa che perldoc non dice di crypt e' come ciptare usando MD5 
invece che DES, cosa che mi sembrava fosse necessaria a giudicare 
dall'esempio di /etc/shadow.
Essensi crypt nulla altro che un "rimando" all'omonima funzione c con 
$ man 3 crypt 
si trova che:
If  salt is a character string starting with the three characters "$1$" 
followed by at most eight characters, and optionally  terminated  by  
"$",  then instead of using the DES machine, the glibc crypt     
function uses an MD5-based algorithm
quindi:
crypt($password,'XY')
restituisce la password criptata in DES
crypt($password,'$1$abcdefij$')
la restituisce cryptata in MD5, a patto che la crypt della libc del 
sistema supporti la criptazione MD5, cosa che dovrebbe essere vera se 
in /etc/shadow ci sono password MD5.
-- 
Saluti,
Giancarlo

  Emmanuele.
Buono a sapersi, ora č piů chiaro.
;-)

in /etc/shadow ci sono password MD5.
Da quello che capisco Crypt::PasswdMD5 si appoggia a Digest::MD5 e dovrebbe,
quindi, essere indipendente dalle librerie di sistema. Cioe`, senz'altro e`
cosi` nella versione Windows di cui ho avuto modo di scorrere il sorgente.
Ciao.

 di scorrere il sorgente.
Io parlavo della funzione crypt "semplice".
Perl doc dice:
crypt PLAINTEXT,SALT
               Encrypts a string exactly like the crypt function in the 
               C library.
Inoltre, visto, che la richiesta era su come lavorare con /etc/shadow 
con dentro password MD5, suppongo che stiamo parlando di un sistema 
Unix con il crypt dentro alla libc che supporta MD5.
Quindi direi che e' inutile caricare un modulo (Crypt::PasswordMD5) per 
fare una cosa che si puo' fare anche senza modulo ;-)
-- 
Saluti,
Giancarlo