Archive for January, 2008

Instalar fingerprint Authentec en Linux Debian

Tuesday, January 22nd, 2008

Hace algún tiempo mi amigo walter hizo funcionar el fingerprint de las IBM Thinkpad en debian; salvo, que este es un modelo y fabricante distinto; Authentec; empresa famosa ya que su fingerprint está en casi todos los modelos (desde Dell, Acer, HP, Compaq como el actual nx6320 que tengo; hasta modelos de mesa como los fabricados por APC, BioPod o incluso Microsoft).

El modelo es sencillo, viene en el lateral de mi actual HP Compaq nx6320 y como dije, comparte vida con la gran mayoría de los fingerprint comerciales.

Lo soporta mi fingerprint?:

Un lsusb lo demuestra:

>lsusb

Si dice:

Bus 001 Device 013: ID 08ff:2580 AuthenTec, Inc.

Has determinado que es un fingerprint authentec, por ende, esta guía es para tí.

Existen varias formas de hacerlo funcionar, el proyecto BioPOD, el proyecto BioAPI o uno más reciente (aun un poco inmaduro) llamado proyecto fprint (f print project); el proyecto consta de 3 cosas:

  • Una Librería (libfprint) (el corazón de la aplicación)
  • Un módulo para autenticación pam (pam_fprint) (para autenticarse en linux)
  • y una aplicación GTK de pruebas (para validación y autenticación)

Para hacerlo funcionar hay que instalar muchas cosas: así que les recomiendo inicialmente leerse una guía de compilación de aplicaciones en linux.

Instalando lo básico:

Primeramente debemos ejecutar una larga lista de cosas a instalar (como los devel de gnome para poder compilar aplicaciones GTK, o la librería imagemagick para la creación de las huellas dactilares por el programa demo):

Si nunca en su vida han compilado algo, deben instalar:

aptitude install build-essential fakeroot gcc

Y luego si instalen lo que necesitamos:

aptitude install libgnomeui-0 libgnomeui-devlibgnomeprint-dev libgnome2-dev
aptitude install libgladeui-1-dev libglade0-dev libglade-gnome-dev libusb++-0.1-4c2 libusb++-dev libusb-dev
aptitude install imagemagick graphicsmagick-imagemagick-compat libgraphicsmagick++-dev libgraphicsmagick-dev
aptitude install imagemagick graphicsmagick libgraphicsmagick-dev libgraphicsmagick1-dev libmagick-dev libmagick9-dev
aptitude install libxv1 libxcb-xv0 libxcb-xv0-dev

Descargando los paquetes:

Como dije, los paquetes son 3;

libfprint: http://downloads.sourceforge.net/fprint/libfprint-0.0.5.tar.bz2?modtime=1197040114&big_mirror=0

pam_fprint: http://downloads.sourceforge.net/fprint/pam_fprint-0.2.tar.bz2?modtime=1195499996&big_mirror=0

fprint_demo: http://downloads.sourceforge.net/fprint/fprint_demo-0.4.tar.bz2?modtime=1195755056&big_mirror=0

Luego de descargados, procederemos a su compilación.

Compilando libfprint:

para compilar descomprimimos libfprint:

tar xvf libfprint-0.0.5.tar.bz2

cambiamos a la carpeta creada por la descompresión:

cd libfprint-0.0.5

y ejecutamos la compilación:

./configure –prefix=/usr –enable-shared –enable-examples-build –enable-x11-examples-build
make
make install

El make install procede a instalar la librería en el sistema; luego de ejecutar:

ldconfig

estamos listos para usar libfrint.

Probando libfprint:

Para probar libfprint necesitamos, dentro del fuente de libfprint, movernos a la carpeta examples

cd examples/

y dentro de esta, ejecutar dos aplicaciones; la primera

./enroll

Crea un png a partir de la huella dactilar que pase por encima del lector (si este es detectado).

y

./verify_live

que hace verificaciones (prueba el lector) para ver si es capaz de reconocer y luego, validar una misma huella (puede hacerse con cualquier dedo).

Como nota adicional, todas las pruebas deben hacerse como root (para poder acceder al dispositivo físico, el fingerprint, contenido en /proc/bus/usb).

Instalando fprint_demo:

Para instalar simplemente descomprimimos y compilamos:

./configure –prefix=/usr –with-gnu-ld
make
make install

y ejecutamos la aplicación:

fprint_demo

con el cual obtendremos una ventana semejante a esta:

Donde podemos hacer el enroll (reconocimiento) de cada una de nuestras huellas de cada dedo de ambas manos y luego, verificarlas con este práctico test (que incluso binariza la huella y computa y muestra los puntos de minutae o coincidencia de la huella); fijense que en el fondo de la app. pueden ver la lista de los dispositivos detectados y están listos para usarse.

Compilando y usando pam_fprint:

Compilar es simple, como los anteriores:

./configure –prefix=/usr –enable-shared –with-gnu-ld
make
make install

Para usarla, primero debemos hacer el “enroll” de cada uno de nuestros dedos como usuario; ejemplo, decidí darle fingerprint al usuario root; entonces:

su -

y luego:

pam_fprint_enroll –enroll-finger 7

El índice de dedos va desde la mano izquierda (mirando hacia arriba) a la derecha mirando hacia abajo (tal vez el desarrollador es zurdo!, jajaja); en este caso, 1 es pulgar izquierdo, 2 es índice izquierdo y así hasta terminar la mano; la mano derecha comienza en 6 con el pulgar y terminando en 10, con el meñique derecho; en mi caso, le hice enroll al dedo 7 (indice derecho).

Lo interesante de esto es que puedes identificarte con cualquier dedo de la mano; si haces enroll de todos los dedos, simplemente podrás autenticarte con todos los dedos (obvio que no a la vez, para aclarar!, jajaja).

Configurando PAM

Para configurar PAM simplemente editamos el archivo /etc/pam.d/common-auth y colocamos:

auth required pam_env.so
auth sufficient pam_fprint.so #esta linea es la de pam_fprint
auth sufficient pam_unix.so nullok_secure try_first_pass likeauth
auth required pam_deny.so

En algunos casos, si queremos solamente autenticación dactilar (y eliminar los passwords) removemos a pam_unix de la lista de autenticaciones (pero eso hará que más nadie sino ustedes puedan usarla); quitarle el “required” a pam_unix podamos o usar una forma u alternativamente otra; más las 2 no son necesarias (pongan ambas en required y tendrán un lindo sistema para neuróticos de la seguridad que pedirá ambas cosas!, xD).

Para probar si la autenticación pam funciona entonces simplemente abrimos una consola y escribimos:

su -
Scan right index finger on AuthenTec AES2501
(y haga su “swap finger” y espere el milagro)Ya debería funcionar para el resto de las aplicaciones; pero solamente hace falta una cosa (que publicaré despues que lo pruebe) es darle al usuario mortal acceso al dispositivo USB fingerprint (un detallito en debian de acceso al /proc/bus/usb para usuarios mortales); parchear el gnome-screensaver (para poder entrar a la maquina si se activa el screensaver) y darle acceso al GDM al dispositivo de fingerprint.

Como dije anteriormente, existen otros proyectos como bioPOD y bioAPI, que tambien los he probado y que prontamente realizaré una guia de los mismos.

Como verán el proyecto está algo “crudo”; tiene algunos bugs, algunas fallas (no diría fallas, pero esa manía de autenticarte con un mínimo de 12 minutae te obliga a recordar en que posición, angulo y velocidad pasaste el dedo, sino, quedas fuera!) y aun están en la versión 0.0.5 y por ende hay mucho camino por andar; pero en mi caso, ya tienen un colaborador adicional, yo!.

Espero disfruten como yo de entrar a su computador sin tener que recordarse compilados y mnemotécnicos passwords; el único riesgo aquí es que te corten el dedo para usar tu portatil!.

Flags para una compilación exitosa a 64 bits

Saturday, January 19th, 2008

Soy aun de los ociosos que les encanta compilar sus propios paquetes en todas las distros (incluidas debian, fedora, gentoo, etc); por lo que siempre me preguntan las flags del pre-procesador, del gcc y otros detalles:

He aqui un vista a mis reglas de compilación para un CPU Core2Duo con EMT64:

MKOPTS=”-j3″ CFLAGS=”-O3″ CXXFLAGS=”-O3 -fPIC -mtune=nocona -march=nocona \
-pipe -fomit-frame-pointer -msse -fexceptions -fno-strict-aliasing -fPIC -Wall -fno-rtti -fno-strict-aliasing \
-ffast-math -mfpmath=sse,387 -finline-functions -foptimize-sibling-calls -m64\
-floop-optimize -fprefetch-loop-arrays -fforce-addr -fexpensive-optimizations” \
./configure –build=x86_64-pc-linux-gnu

Una guia rápida de arquitecturas: (flags para mtune y march):

CPU:                                       Flag

Pentium 4, Pentium M         : pentium4

Athlon, Athlon XP                 : athlon

AMD Opteron                                                :  k8

Pentium D, P4 HT, Core 2                           : prescott

pentium D 64 bits - Core 2 Duo 64 bits    :  nocona

Cual es el mejor CFLAG?

Las opciones transcurren entre -Os (compilado para codigo pequeño, posiblemente más lento); -O1 (opcion básica y por defecto), -O2 (optimizado para performance, cuidando la estabilidad de la aplicación), -O3 (compilado para máximo rendimiento, algunas optimizaciones agresivas pueden hacer inestable el código, debe probarse y usarse con precaución).

32 o 64 bits?

La posibilidad de usar enteros de 128 bits; computos multi-CPU y una arquitectura más robusta, permiten decir sin dudas que si tenemos 64 bits; compilar nativo es la opción; para ejecutar aplicaciones 32 bits en un ambiente de 64 bits; simplemente tenemos que instalar lib32.

Mejor aritmética que el co-procesador 387?

La aritmética de coma flotante SSE está disponible para compilar desde gcc 3.4; con fpmath podemos decir si queremos SSE, i387 o ambas.

Un ejemplo de apache 2.2.6 compilado para debian es la siguiente:

CC=”gcc” CXX=”gcc” CFLAGS=”-O3″ CXXFLAGS=”-O3 -fPIC -mtune=nocona -march=nocona \
-pipe -fomit-frame-pointer -msse -fexceptions -fno-strict-aliasing -fPIC -Wall -fno-rtti -fno-strict-aliasing \
-ffast-math -mfpmath=sse,387 -finline-functions -foptimize-sibling-calls \
-floop-optimize -fprefetch-loop-arrays -fforce-addr -fexpensive-optimizations” \
./configure –build=x86_64-linux-gnu –disable-maintainer-mode –disable-dependency-tracking \
–enable-layout=Debian –with-program-name=apache2 \
–enable-echo –enable-so –enable-rewrite –with-mpm=worker \
–with-ldap=yes –with-ldap-include=/usr/include –with-ldap-lib=/usr/lib \
–with-suexec-caller=www-data –with-suexec-bin=/usr/lib/apache2/suexec \
–with-suexec-docroot=/var/www –with-suexec-userdir=public_html \
–with-suexec-logfile=/var/log/apache2/suexec.log –enable-suexec=shared –enable-authn-alias=shared \
–enable-authnz-ldap=shared –enable-mime-magic –enable-cern-meta –enable-expires –enable-deflate \
–enable-disk-cache=shared –enable-cache=shared –enable-mem-cache=shared –enable-file-cache=shared \
–enable-cern-meta=shared –enable-dumpio=shared –enable-ext-filter=shared \
–enable-charset-lite=shared –enable-cgi=shared \
–enable-dav-lock=shared –enable-log-forensic=shared \
–enable-log-config –enable-logio \
–enable-ldap=shared –enable-proxy=shared \
–enable-proxy-connect=shared –enable-proxy-ftp=shared \
–enable-proxy-http=shared –enable-proxy-ajp=shared \
–enable-proxy-balancer=shared –enable-ssl=shared \
–enable-authn-dbm=shared –enable-authn-anon=shared \
–enable-authn-dbd=shared –enable-authn-file=shared \
–enable-authn-default=shared –enable-authz-host=shared \
–enable-authz-groupfile=shared –enable-authz-user=shared \
–enable-authz-dbm=shared –enable-authz-owner=shared \
–enable-authnz-ldap=shared –enable-authz-default=shared \
–enable-auth-basic=shared –enable-auth-digest=shared \
–enable-dbd=shared –enable-deflate=shared \
–enable-include=shared –enable-filter=shared \
–enable-env=shared –enable-mime-magic=shared \
–enable-expires=shared –enable-headers=shared \
–enable-ident=shared –enable-usertrack=shared \
–enable-unique-id=shared –enable-setenvif=shared \
–enable-version=shared –enable-status=shared \
–enable-autoindex=shared –enable-asis=shared \
–enable-info=shared –enable-cgid=shared \
–enable-dav=shared –enable-dav-fs=shared \
–enable-vhost-alias=shared –enable-negotiation=shared \
–enable-dir=shared –enable-imagemap=shared \
–enable-actions=shared –enable-speling=shared \
–enable-userdir=shared –enable-alias=shared \
–enable-rewrite=shared –enable-mime=shared –enable-ssl \
–with-pcre=yes –enable-rewrite –enable-dav –enable-info –enable-suexec \
–enable-cgi –enable-cgid –enable-static-support –enable-static-logresolve –enable-http

el proxima entrega explicaré otras flags …

Mejorar el rendimiento del equipo portatil desde el grub

Saturday, January 19th, 2008

Siempre me preguntan esto; asi que lo agrego aquí como una especie de chuleta

A.- Probar que sirven las flags

Cuando estén en la ventana de selección del GRUB presionar la tecla e (editar) hasta que logren editar una linea que inicialmente verán como así:

title           Debian GNU/Linux, kernel 2.6.18-4-686
root            (hd0,0)
kernel          /vmlinuz-2.6.18-4-686 root=/dev/sda2 ro <- Esta linea!
initrd          /initrd.img-2.6.18-4-686
savedefault
Sobre la linea kernel, presionan “e” nuevamente y escriben las siguientes flags:

apic acpi=force: fuerza el acpi del equipo, permitiendo que algunas opciones como hibernación, suspensión o powerOff sean forzadas desde el arranque (util en equipos que a veces dicen “System Halted” y no terminan el proceso de apagado).

idebus=66: en equipos con bus IDE (y algunos sATA) el bus de gestión es de solo 33Mhz (cosas de la compatibilidad para equipos viejitos que trae el kernel); esta acción mejora notablemente el rendimiento del disco.

pci=assign-busses: tarda un poquito más el arranque; pero hace que sea el kernel linux quien gestione los buses PCI y sobreescribe cualquier asociación o configuración que venga de la BIOS. he leído que en algunos BIOS buggy como los de portátiles compaq se requiere esta flag para que detecte mucho del hardware e incluso para que funcione.

Algunas otras como apicmaintimer y pci=routeirq son opcionales en algunos equipos.

luego de escritas, presionar ENTER y luego “b” (boot)

Si su equipo bootea mejor que antes, ¡Felicidades! …

B.- Hacer los cambios permanentes

Para hacer esos cambios permanentes, debemos:

Editar el archivo /boot/grub/menu.lst

Buscar la linea del kernel que necesitamos editar:

title           Debian GNU/Linux, kernel 2.6.23.1-coreDuo
root            (hd0,0)
kernel          /vmlinuz-2.6.23.1 root=/dev/sda2 ro idebus=66 pci=routeirq pci=assign-busses apic acpi=force vga=791
initrd          /initrd.img-2.6.23.1
savedefault

Editar, guardar y reiniciar …