[Previo por Fecha] [Siguiente por Fecha] [Previo por Hilo] [Siguiente por Hilo]
[Hilos de Discusión] [Fecha] [Tema] [Autor]On Tue, 29 Aug 2000, 'Aztec Eagle' Turbo wrote: > ¡Saludos! > > Andamos por acá haciendo un sistemilla con perl/cgi/postgress y > para poder liberarlo a los usuarios necesitamos identificar al > usuario mediante el esquema clásico de nombre y contraseña (todo > por no decir login/password). > > Con getpwnam() podemos verificar el login, pero ¿cómo podemos > verificar la contraseña? Usamos shadow y md5 y como es de > esperarse el CGI corre como usuario normal (uid=gid)!=root. > > ¿Alguien sabe como verificar esto? ¿Dónde debemos leer? Estoy > seguro que se debe poder (todo se puede en Perl) pero NPI de por > dónde empezar. No existe forma de que un proceso euid!=root tenga acceso _directo_ al hash de la contraseña (aka password encriptado) en un sistema con shadow, pues ese es precisamente el objetivo de usar shadow passwords, la unica forma posible es mediante un wrapper setuid. Ahora bien, hacer un wrapper robusto, general y seguro no es de enchilame otra gorda. Para empezar, perl no es buena opción pues sus mecanismos setuid dejan mucho que desear (snif, snif). De plano mejor en C, lo más general es usar PAM y para que no tengas que inventar el hilo negro, en /usr/doc/pam-0.72/html/pam_appl-8.html encuentras un programita que hace la talacha. Compilalo con: $ gcc -o check_user check_user.c -lpam -lpam_misc E instálalo, como root, con: # mv check_user /usr/bin # chown root /usr/bin/check_user # chmod u+s /usr/bin/check_user Agregate un archivo /etc/pam.d/check_user: #%PAM-1.0 auth required /lib/security/pam_pwdb.so nodelay account required /lib/security/pam_pwdb.so Ahora si, en perl puedes hacer cosas como: die "Requiero un usuario\n" unless($user); open(CHECK, "|/usr/bin/check_user $user >/dev/null 2>&1") or die "Can't use wrapper\n"; print CHECK $password; # Envia password unless(close(CHECK)) { # close devuelve el estatus de salida del pipe print "Fail\n"; } else { print "Success\n"; } En donde $user y $password los obtienes por el metodo que quieras. Saludos Salvador Ortiz -- El conocimiento incluído es totalmente regalado y como Linux, libre. -------------------------------------------------------------------------- --------------------------------------------------------- para salir de la lista, enviar un mensaje con las palabras "unsubscribe ayuda" en el cuerpo a majordomo en linux org mx