Hiparco

Recetas y trucos de GNU/Linux e informática en general

Alojado en http://guimi.net

DNIe en Debian GNU/Linux Squeeze

ARTÍCULO OBSOLETO: Para una versión más actual puedes leer como instalar DNIe en GNU/Linux.

Este artículo muestra cómo instalar el DNIe en Debian GNU/Linux Squeeze.

Para instalar el DNIe en Debian Lenny y en Ubuntu Karmic Koala visitar el siguiente artículo: DNIe en GNU/Linux.

Una vez instalado un lector de DNI-e, también nos sirve para utilizar tarjetas criptográficas CardOs M4 como las que utiliza por ejemplo la Comunidad Valenciana a través de la ACCV.

El DNI electónico o DNIe se puede hacer funcionar en GNU/Linux, tanto para identificarse en webs como para firmar documentos todo con plena validez legal. El problema es que a la hora de hacer los drivers hubo varias chapuzas, problemas con las licencias libres, utilización de librerías incorrectas… Así que para instalarlo en Debian Squeeze hace falta utilizar un poco de magia ;-) Que es un modo más bonito de decir que hay que parchear la instalación para que funcionen los paquetes.

DNIe DNIe

No hay que olvidar que el DNIe tiene sus limitaciones y pegas de seguridad. (Para los “paranoicos” se recomienda utilizar el DNIe únicamente desde sistemas de solo lectura como un CD con Knoppix).
Tampoco hay que olvidar que una firma “normal” es mucho más facil de falsificar que una firma electrónica, pese a que ninguna sea totalmente segura.
 
Las siguientes instrucciones se han probado en Debian Squeeze con un lector C3PO LTC31 (de venta en las oficinas de correos por 19,90 €), con un “miniLector Bit4id” del plan avanza2 (es un Advanced Card Systems ACR38-U pero con una caja blanca) y con un lector Omnikey 3021.
C3PO_LTC31 ACS_ACR38-U Omnikey 3021

 

INSTALACIÓN DEL LECTOR

Básicamente vamos a instalar los paquetes de Debian Lenny en nuestro Squeeze.

$ wget http://www.dnielectronico.es/descargas/PKCS11_para_Sistemas_Unix/1.4.6.Debian_Lenny_32/Debian_Lenny_opensc-dnie_1.4.6-2_i386.deb.tar

Para hacerlos funcionar necesitaremos un par de librerías del repositorio de Lenny:

$ wget http://ftp.es.debian.org/debian/pool/main/libt/libtool/libltdl3_1.5.26-4+lenny1_i386.deb
$ wget http://ftp.es.debian.org/debian/pool/main/o/openct/libopenct1_0.6.14-3_i386.deb

Instalamos los paquetes:

$ tar xvf Debian_Lenny_opensc-dnie_1.4.6-2_i386.deb.tar
libopensc2_0.11.7-7_i386.deb
opensc-dnie_1.4.6-2_i386.deb
opensc_0.11.7-7_i386.deb
# dpkg -i libltdl3_1.5.26-4+lenny1_i386.deb
# dpkg -i libopenct1_0.6.14-3_i386.deb
# dpkg -i libopensc2_0.11.7-7_i386.deb
# dpkg -i opensc_0.11.7-7_i386.deb
# aptitude install pinentry-gtk2
# dpkg -i opensc-dnie_1.4.6-2_i386.deb
# Bloqueamos los paquetes
#+ para que no se actualicen, ya que los de la distribución son
#+ más modernos pero el DNIe no funciona con ellos
# aptitude hold libltdl3 libopenct1 libopensc2 opensc opensc-dnie

 
Nos indica que hemos de registrar el módulo PKCS#11 en iceweasel/firefox utilizando el enlace que nos crea en el menú principal del escritorio en “Oficina-> Registrar módulo DNIe PKCS#11“.
Indicamos que confiamos en la nueva Autoridad Certificadora (CA) para las tres posibilidades.
 
Podemos comprobar si el sistema reconoce correctamente el lector con el comando “pcsc_scan” y probando a introducir y sacar el DNIe (u otras tarjetas similares):

# aptitude install pcscd pcsc-tools
$ pcsc_scan
PC/SC device scanner
[...]
Reader 0: ACS ACR 38U-CCID 00 00
  Card state: Card inserted, 
[...]
Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
	DNI electronico (Spanish electronic ID card)

http://www.dnielectronico.es

 Reader 0: ACS ACR 38U-CCID 00 00
  Card state: Card removed, 

 
Otras pruebas que podemos hacer son (estas con una tarjeta CardOs M4):

$ opensc-tool -l
Readers known about:
Nr.    Driver     Name
0      pcsc       C3PO LTC31 (00426664) 00 00
$ opensc-tool -a
Using reader with a card: C3PO LTC31 (00426664) 00 00
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx
$ opensc-tool -n
Using reader with a card: C3PO LTC31 (00426664) 00 00
CardOS M4

 
Para que funcione bien iceweasel/firefox y detecte el módulo sin problemas es necesario reiniciar el navegador.
 
 

USO Y DISFRUTE

Lo primero que hay que saber es que en el DNIe tenemos a nuestra disposición dos certificados, uno para identificarnos (certificado de autenticación) y otro para firmar (certificado de firma), lo que son los dos principales usos del DNIe.

También es importante saber que cada aplicación que utiliza el DNIe establece una “sesión” con el lector de tarjetas y que no puede haber dos sesiones abiertas a la vez. Es decir no podemos usar el DNIe en dos aplicaciones a la vez. Sin embargo muchas aplicaciones no indican adecuadamente esta circunstancia y simplemente parece que no funcionan.
Así por ejemplo si iniciamos sesión en iceweasel/firefox para acceder a una web, no podemos firmar un archivo pdf con sinadura hasta cerrar sesión. Y al revés, tras firmar un fichero con sinadura no nos deja validarnos con iceweasel.
Ante la duda basta con extraer y volver a introducir el DNIe en el lector para asegurarse que está disponible el acceso.
 
Un último recordatorio, si se introduce el PIN del DNIe erróneamente tres veces seguidas, éste se bloquea. Así que al hacer pruebas con los programas y sus configuraciones hay que tener cuidado. A mí se me bloqueó haciendo pruebas con Sinadura (para desbloquearlo hay que pasar 5 minutos por una comisaria), así que después cada vez que hacía una prueba con un programa si no funcionaba perfectamente iniciaba sesión en iceweasel/firefox.
 

Identificarse en sitios web con iceweasel/firefox

El DNIe se puede utilizar al navegar para identificarse en un sitio web. Así por ejemplo si nos identificamos en la web de la seguridad social podremos descargarnos al instante nuestra vida laboral.

Primero debemos asegurarnos que hemos registrado en iceweasel/firefox el módulo de DNIe PKCS#11 (usando el menú principal del escritorio en “Oficina-> Registrar módulo DNIe PKCS#11“).
En caso contrario podemos registrarlo a mano desde “Editar -> Preferencias -> Avanzado -> Cifrado -> Dispositivos de seguridad“. Seleccionamos “Cargar”, indicamos un nombre, por ejemplo “DNIe – OpenSC PKCS#11″, y la ruta del módulo “/usr/lib/opensc-pkcs11.so”.
DNIe
 
Si la instalación ha sido correcta y tenemos el lector conectado con un DNIe introducido, nos habilitará la opción “Iniciar sesión” (¡bien!). Si iniciamos sesión nos pedirá el PIN, pero antes es mejor reiniciar el navegador para que nos pida instalar el certificado de la DGP (Dirección General de la Policia).
 
Comprobaciones
Podemos probar nuestro DNIe en el navegador en la página de verificación del portal oficial (el enlace para la verificación está al final de esa página).

Si todo ha ido bien el navegador nos pide nuestro PIN para iniciar sesión (si no lo hemos introducido antes):
PIN DNIe

Cuando conectamos con una web en la que debemos identificarnos nos pregunta cuál de los dos certificados (el de firma o el de autenticación) queremos utilizar. Para identificarnos usamos el de autenticación.
Certificado DNIe

Si el navegador nos indica:

El otro extremo de la conexión SSL no puede verificar su certificado.
(Código de error: ssl_error_bad_cert_alert)

Es porque no hemos iniciado sesión correctamente (hemos fallado el PIN 3 veces, no lo hemos puesto, no está bien instalado el lector…).
 
Lo recomendado es “Iniciar sesión” en el navegador solo cuando se necesita y “Terminar sesión” lo antes posible. Si visitamos una página que requiere certificado sin haber iniciado sesión, el navegador nos solicitará el PIN automáticamente, pero para cerrar sesión hay que ir “a mano” a la opción “Dispositivos de seguridad” del menú.
 

Firmar archivos PDF con Sinadura

Otro uso interesante del DNIe es firmar un archivo PDF. Esta firma tiene plena validez legal. Es decir, hasta ahora había que hacer un documento, imprimirlo y después firmarlo a mano. Ahora podemos hacer un documento, guardarlo como PDF (por ejemplo con OpenOffice Writer) y después firmarlo con nuestro DNIe.
Hay que insistir en que tiene plena validez legal. Sirve para hacer contratos, compra ventas, reclamaciones…

Primero descargamos Sinadura, en mi caso he descargado la versión 2.0.0 para GNU/Linux de 32 bits.

Su instalación es muy sencilla, basta con hacer:

$ java -jar  sinadura-2.0.0-unix32-installer.jar

y seguir el típico asistente de “siguiente”, “siguiente”, “siguiente”…

Para configurarlo vamos a “Sinadura -> Preferencias -> Certificados“, y elegir “Tarjeta Criptográfica“.
También recomiendo ir a “Sinadura -> Preferencias -> Firma” y seleccionar otra imagen ya que la que viene por omisión (el logo de Sinadura) apenas permite leer el texto insertado. Yo me he creado una imagen muy clarita del DNIe en grises.
 

Utilizamos el botón “Añadir documentos” para seleccionar el documento pdf a firmar, en mi caso “prueba.pdf” y pulsamos “Firmar“.
DNIe

El programa carga el certificado (la primera vez tarda un poco, si se cuelga probablemente sea por el problema de las sesiones que comentabamos al principio) y después nos pide el PIN del DNIe.
DNIe

Después elegimos el certificado a utilizar, en este caso el certificado de firma:
DNIe

Nos solicita una confirmación:
DNIe

Y ya está. Podemos verificar cualquier documento firmado también desde Sinadura. Primero lo seleccionamos y después utilizamos el botón “Validar
DNIe
 

Más posibilidades

Una de las posibilidades que la gente busca es firmar y/o cifrar correos electrónicos con el DNIe.
Hay que decir que técnicamente se puede pero que su validez legal es cuanto menos dudosa, y como lo que se busca con el DNIe es tener validez legal no es muy práctico. Siempre se puede enviar un correo-e “normal” con un pdf firmado como adjunto, por ejemplo un contrato.

Esto es porque técnicamente para firmar y/o cifrar basta con tener un par de claves pública/privada, pero el estándar internacional PKI requiere, para firmar un correo-e, que el certificado de la clave indique una dirección de correo-e, que será la única que se “certificará”. Sin embargo en el DNIe no se indica ninguna dirección de correo-e, por lo que no se puede utilizar las firmas del DNIe para este fin.
Lo más recomendado es firmar y cifrar con claves GPG, u obtener firmas de la FNMT, que sí están preparadas para este propósito.
En todo caso hay buenas y sencillas guías en internet sobre cómo conseguir, técnicamente, firmar correos-e con el DNIe (GMail+DNIe; Thunderbird+DNIe).

Para consultar otras posibilidades tenemos el oráculo, la página de Servicios Disponibles o la web Kriptopolis.
 
 

dnie, dni electrónico, linux, debian, squeeze, C3PO LTC31, miniLector Bit4id, ACS ACR38-U

Tarjeta CardOS M4 en GNU/Linux

Las tarjetas CardOS M4 son tarjetas criptográficas fabricadas por Siemens y emitidas, entre otros, por la Comunidad Valenciana (a través de la ACCV) y la Junta de Andalucía.

Para utilizarlas hace falta tener un lector de tarjetas instalado, por ejemplo el lector del DNI-e.

Además hace falta tener instalado el controlador de la tarjeta para que el lector sepa trabajar con ella. Y aquí viene el problema, porque el driver que hay tiene restricciones de distribución, además de ser viejo y estar desactualizado.
Al final se puede hacer funcionar con unos pocos pasos… el problema es averiguarlos. Tras mucho buscar, un post de Andalinux me dió las pistas correctas. Este post se debe a aquel (y copia descaradamente algunas partes).

¿Dónde obtener los drivers (sólo binarios) para la tarjeta?
Pues aunque cuesta encontrarlos en Internet (por las restricciones de distribución impuestas por Siemens) hay varias formas de conseguirlos:

  1. En el cdrom de los lectores Omnikey 3121 y 3021.
  2. En la web de la Autoritat de Certificatió de la Comunitat Valenciana.
  3. En el paquete HiPath SIcurity CardOS smart cards API que aparece en los repositorios de Guadalinex.

¿Cómo instalar los drivers?
Yo he utilizado el paquete de Guadalinex, por lo que basta un:

sudo dpkg -i guadalinex-hipath-sicurity-card-api_3.1-2_i386.deb

En teoría ahora bastaría con cargar el módulo en Firefox, pero no os molestéis, no va a funcionar.

¿Y qué tripa se le ha roto al módulo? Preguntemos:

ldd /usr/local/lib/libsiecap11.so
	linux-gate.so.1 =>  (0xb7794000)
	libz.so.1 => /lib/libz.so.1 (0xb76f1000)
	libsiecap15.so => /usr/local/lib/libsiecap15.so (0xb76c8000)
	[...]
	libpcsclite.so.0 => not found
	[...]

¡Ahí está!

Sin embargo tampoco nos basta con instalar esa librería (igual incluso ya está instalada):

sudo aptitude install libpcsclite1

Porque el problema es que el paquete no instala la librería dónde la busca el módulo.
¡Marchando un enlace simbólico!

sudo ln -s /lib/libpcsclite.so.1.0.0 /usr/lib/libpcsclite.so.0

Y ahora sí podemos cargar en Firefox el módulo “/usr/local/lib/libsiecap11.so” que nos leerá la tarjeta.

Para más detalles sobre cómo instalar el módulo en Firefox se puede consultar la instalación del DNI-e.

CardOS M4, Siemens, DNIe

Cableado estructurado

He publicado en versión web el monográfico sobre cableado estructurado que publiqué hace un tiempo en PDF (Cableado estructurado en PDF):
Cableado estructurado en HTML.
Cableado estructurado

Incluye información sobre tipos de cables, directrices para el tendido de cableado, instalación de cableado estructurado, verificación y comprobación, conexionado de cableado RJ45

En esta página están los diferentes monográficos y tutoriales sobre informática que voy publicando.

Cableado estructurado, ISO 11801, TIA/EIA 568, EN 50173, RJ45, Fibra óptica

Pitidos de la BIOS

Copiado de un documento que está repetido múltiples veces en internet sin conseguir saber cual es el autor original ni su licencia.

¿Qué ocurre desde que le damos al botón de encendido hasta que aparece nuestro sistema operativo cargando?

Cuando encendemos el ordenador, nuestra placa base hace una especie de escaneo a todo el sistema para comprobar si todo está en regla y continuar cargando. Los pasos son los siguientes:

1. Encendido, llega el voltaje a la placa base.
2. Seguidamente alimenta a los dispositivos de almacenamiento.
3. El microprocesador, resetea todos los contadores y registros para partir de 0.
4. Busca una dirección de BIOS para testear la máquina, y también busca el test (Comprobación de dispositivos conectados).
5. POST (Power On Self Test): Son un conjunto de rutinas y programas que chequean el hardware.
[Aquí­ es donde se producen los pitidos que indican el estado del ordenador]
6. La BIOS enví­a al microprocesador señales y asigna canales DMA y IRQ.
7. Inicializa la BIOS de la tarjeta gráfica.
8. Testeo y cuenta de memoria.
9. Habilita teclado LED’s y genera entradas.
10. Busca el sector de arranque.
11. Carga el boot manager y cede el control al sistema operativo.

Algunos pitidos habituales.

El modo que tiene la placa base de transmitir el estado del sistema es por medio de pitidos. Aquí tenemos algunos habituales:

* Ningún pitido: No hay suministro eléctrico (vamos que el cable está sin enchufar, el cable en sí­ falla, o la caja de suministro eléctrico está deteriorada, la cuestión es que no llega corriente) o también puede ser que el altavoz falle (lo podréis comprobar si a continuación funciona correctamente).
* Tono continuo: Error en el suministro eléctrico (llega mal la corriente, o la caja de suministro esta fastidiada, no hay más que cambiarla).
* Tonos cortos constantes: La placa madre está defectuosa, es decir, está rota, es de lo peor que nos puede ocurrir.
* Un tono largo: Error de memoria RAM, lo normal es que está mal puesta o que está fastidiada.
* Un tono largo y otro corto: Error el la placa base o en ROM Basic. Esto suele ocurrir mucho en placas base viejas, la gente las suele tirar.
* Un tono largo y dos cortos: Error en la tarjeta gráfica. Puede que el puerto falle, por lo que no habría más que cambiarla de puerto, pero también puede ser que la tarjeta gráfica sea defectuosa.
* Dos tonos largos y uno corto: Error en la sincronización de las imágenes. Seguramente problema de la gráfica.
* Dos tonos cortos: Error de la paridad de la memoria. Esto ocurre sobretodo en ordenadores viejos que llevaban la memoria de dos módulos en dos módulos. Esto significaría que uno de los módulos falla, o que no disponemos de un número par de módulos de memoria.
* Tres tonos cortos: Esto nos indica que hay un error en los primeros 64Kb de la memoria RAM.
* Cuatro tonos cortos: Error en el temporizador o contador.
* Cinco tonos cortos: Esto nos indica que el procesador o la tarjeta gráfica se encuentran bloqueados. Suele ocurrir con el sobrecalentamiento.
* Seis tonos cortos: Error en el teclado. Si ocurre esto yo probaría con otro teclado. Si aun así no funciona se trata del puerto receptor del teclado.
* Siete tonos cortos: Modo virtual de procesador AT activo.
* Ocho tonos cortos: Error en la escritura de la video RAM.
* Nueve tonos cortos: Error en la cuenta de la BIOS RAM.

Algunas veces suenan algunos de estos pitidos pero luego sigue funcionando con normalidad. En ese caso sería problema del detector de errores o del escaneo que nos hace al encender el ordenador.

Se puede encontrar más información sobre otros pitidos y sobre BIOS específicas en BIOSCentral.

pitidos BIOS

DNIe en GNU/Linux -Obsoleto-

ARTÍCULO OBSOLETO: Para una versión más actual puedes leer como instalar DNIe en GNU/Linux.

Actualizado a Febrero de 2010
Una vez instalado un lector de DNI-e, también nos sirve para utilizar tarjetas criptográficas CardOs M4 como las que utiliza por ejemplo la Comunidad Valenciana a través de la ACCV.

Actualizado a 30 de Noviembre de 2009
Ya está aquí el DNI electónico o DNIe. Y por supuesto se puede hacer funcionar en GNU/Linux, tanto para identificarse en webs como para firmar documentos todo con plena validez legal.

DNIe DNIe

No hay que olvidar que el DNIe tiene sus limitaciones y pegas de seguridad. (Para los “paranoicos” se recomienda utilizar el DNIe únicamente desde sistemas de solo lectura como un CD con Knoppix).
Tampoco hay que olvidar que una firma “normal” es mucho más facil de falsificar que una firma electrónica, pese a que ninguna sea totalmente segura.
 
Las siguientes instrucciones se han probado en Debian Lenny y en Ubuntu Karmic Koala con un lector C3PO LTC31 (de venta en las oficinas de correos por 19,90 €), con un “miniLector Bit4id” del plan avanza2 (es un Advanced Card Systems ACR38-U pero con una caja blanca) y con un lector Omnikey 3021.
C3PO_LTC31 ACS_ACR38-U Omnikey 3021

 

INSTALACIÓN DEL LECTOR

Descargamos los paquetes oficiales del DNIE y los instalamos junto con los paquetes de la distribución necesarios.

$ sudo aptitude install libccid libopenct1 pcscd pcsc-tools mozilla-opensc
# En el caso de Debian Lenny
$ tar xvf Debian_Lenny_opensc-dnie_1.4.6-2_i386.deb.tar 
# En el caso de Ubuntu Karmic Koala usamos los paquetes de Jaunty Jakalop
$ tar xvf Ubuntu_Jaunty_opensc-dnie_1.4.6-2_i386.deb.tar 
libopensc2_0.11.7-7_i386.deb
opensc-dnie_1.4.6-2_i386.deb
opensc_0.11.7-7_i386.deb
$ sudo dpkg -i libopensc2_0.11.7-7_i386.deb
$ sudo dpkg -i opensc_0.11.7-7_i386.deb
$ sudo dpkg -i opensc-dnie_1.4.6-2_i386.deb
# En el caso de Ubuntu Karmic Koala bloqueamos los paquetes
#+ para que no se actualicen, ya que los de la distribución son
#+ más modernos pero el DNIe no funciona con ellos
$ sudo aptitude hold opensc libopensc2

 
Nos indica que hemos de registrar el módulo PKCS#11 en iceweasel/firefox utilizando el enlace que nos crea en el menú principal del escritorio en “Oficina-> Registrar módulo DNIe PKCS#11“.
Indicamos que confiamos en la nueva Autoridad Certificadora (CA) para las tres posibilidades.
 
Podemos comprobar si el sistema reconoce correctamente el lector con el comando “pcsc_scan” y probando a introducir y sacar el DNIe (u otras tarjetas similares):

$ pcsc_scan
PC/SC device scanner
[...]
Reader 0: ACS ACR 38U-CCID 00 00
  Card state: Card inserted, 
[...]
Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
	DNI electronico (Spanish electronic ID card)

http://www.dnielectronico.es

 Reader 0: ACS ACR 38U-CCID 00 00
  Card state: Card removed, 

 
Otras pruebas que podemos hacer son (estas con una tarjeta CardOs M4):

$ opensc-tool -l
Readers known about:
Nr.    Driver     Name
0      pcsc       C3PO LTC31 (00426664) 00 00
$ opensc-tool -a
Using reader with a card: C3PO LTC31 (00426664) 00 00
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx
$ opensc-tool -n
Using reader with a card: C3PO LTC31 (00426664) 00 00
CardOS M4

 
Para que funcione bien iceweasel/firefox y detecte el módulo sin problemas se recomienda reiniciar la sesión gráfica (no hace falta reiniciar el equipo).
 
 

USO Y DISFRUTE

Lo primero que hay que saber es que en el DNIe tenemos a nuestra disposición dos certificados, uno para identificarnos (certificado de autenticación) y otro para firmar (certificado de firma), lo que son los dos principales usos del DNIe.

También es importante saber que cada aplicación que utiliza el DNIe establece una “sesión” con el lector de tarjetas y que no puede haber dos sesiones abiertas a la vez. Es decir no podemos usar el DNIe en dos aplicaciones a la vez. Sin embargo muchas aplicaciones no indican adecuadamente esta circunstancia y simplemente parece que no funcionan.
Así por ejemplo si iniciamos sesión en iceweasel/firefox para acceder a una web, no podemos firmar un archivo pdf con sinadura hasta cerrar sesión. Y al revés, tras firmar un fichero con sinadura no nos deja validarnos con iceweasel.
Ante la duda basta con extraer y volver a introducir el DNIe en el lector para asegurarse que está disponible el acceso.
 
Un último recordatorio, si se introduce el PIN del DNIe erróneamente tres veces seguidas, éste se bloquea. Así que al hacer pruebas con los programas y sus configuraciones hay que tener cuidado. A mí se me bloqueó haciendo pruebas con Sinadura (para desbloquearlo hay que pasar 5 minutos por una comisaria), así que después cada vez que hacía una prueba con un programa si no funcionaba perfectamente iniciaba sesión en iceweasel/firefox.
 

Identificarse en sitios web con iceweasel/firefox

El DNIe se puede utilizar al navegar para identificarse en un sitio web. Así por ejemplo si nos identificamos en la web de la seguridad social podremos descargarnos al instante nuestra vida laboral.

Primero debemos asegurarnos que hemos registrado en iceweasel/firefox el módulo de DNIe PKCS#11 (usando el menú principal del escritorio en “Oficina-> Registrar módulo DNIe PKCS#11“).
En caso contrario podemos registrarlo a mano desde “Editar -> Preferencias -> Avanzado -> Cifrado -> Dispositivos de seguridad“. Seleccionamos “Cargar”, indicamos un nombre, por ejemplo “DNIe – OpenSC PKCS#11″, y la ruta del módulo “/usr/lib/opensc-pkcs11.so”.
DNIe
 
Si la instalación ha sido correcta y tenemos el lector conectado con un DNIe introducido, nos habilitará la opción “Iniciar sesión” (¡bien!). Si iniciamos sesión nos pedirá el PIN, pero antes es mejor reiniciar el navegador para que nos pida instalar el certificado de la DGP (Dirección General de la Policia).
 
Comprobaciones
Podemos probar nuestro DNIe en el navegador en la página de verificación del portal oficial (el enlace para la verificación está al final de esa página).

Si todo ha ido bien el navegador nos pide nuestro PIN para iniciar sesión (si no lo hemos introducido antes):
PIN DNIe

Cuando conectamos con una web en la que debemos identificarnos nos pregunta cuál de los dos certificados (el de firma o el de autenticación) queremos utilizar. Para identificarnos usamos el de autenticación.
Certificado DNIe

Si el navegador nos indica:

El otro extremo de la conexión SSL no puede verificar su certificado.
(Código de error: ssl_error_bad_cert_alert)

Es porque no hemos iniciado sesión correctamente (hemos fallado el PIN 3 veces, no lo hemos puesto, no está bien instalado el lector…).
 
Lo recomendado es “Iniciar sesión” en el navegador solo cuando se necesita y “Terminar sesión” lo antes posible. Si visitamos una página que requiere certificado sin haber iniciado sesión, el navegador nos solicitará el PIN automáticamente, pero para cerrar sesión hay que ir “a mano” a la opción “Dispositivos de seguridad” del menú.
 

Firmar archivos PDF con Sinadura

Otro uso interesante del DNIe es firmar un archivo PDF. Esta firma tiene plena validez legal. Es decir, hasta ahora había que hacer un documento, imprimirlo y después firmarlo a mano. Ahora podemos hacer un documento, guardarlo como PDF (por ejemplo con OpenOffice Writer) y después firmarlo con nuestro DNIe.
Hay que insistir en que tiene plena validez legal. Sirve para hacer contratos, compra ventas, reclamaciones…

Primero descargamos Sinadura, en mi caso he descargado la versión 2.0.0 para GNU/Linux de 32 bits.

Su instalación es muy sencilla, basta con hacer:

$ java -jar  sinadura-2.0.0-unix32-installer.jar

y seguir el típico asistente de “siguiente”, “siguiente”, “siguiente”…

Para configurarlo vamos a “Sinadura -> Preferencias -> Certificados“, y elegir “Tarjeta Criptográfica“.
También recomiendo ir a “Sinadura -> Preferencias -> Firma” y seleccionar otra imagen ya que la que viene por omisión (el logo de Sinadura) apenas permite leer el texto insertado. Yo me he creado una imagen muy clarita del DNIe en grises.
 

Utilizamos el botón “Añadir documentos” para seleccionar el documento pdf a firmar, en mi caso “prueba.pdf” y pulsamos “Firmar“.
DNIe

El programa carga el certificado (la primera vez tarda un poco, si se cuelga probablemente sea por el problema de las sesiones que comentabamos al principio) y después nos pide el PIN del DNIe.
DNIe

Después elegimos el certificado a utilizar, en este caso el certificado de firma:
DNIe

Nos solicita una confirmación:
DNIe

Y ya está. Podemos verificar cualquier documento firmado también desde Sinadura. Primero lo seleccionamos y después utilizamos el botón “Validar
DNIe
 

Más posibilidades

Una de las posibilidades que la gente busca es firmar y/o cifrar correos electrónicos con el DNIe.
Hay que decir que técnicamente se puede pero que su validez legal es cuanto menos dudosa, y como lo que se busca con el DNIe es tener validez legal no es muy práctico. Siempre se puede enviar un correo-e “normal” con un pdf firmado como adjunto, por ejemplo un contrato.

Esto es porque técnicamente para firmar y/o cifrar basta con tener un par de claves pública/privada, pero el estándar internacional PKI requiere, para firmar un correo-e, que el certificado de la clave indique una dirección de correo-e, que será la única que se “certificará”. Sin embargo en el DNIe no se indica ninguna dirección de correo-e, por lo que no se puede utilizar las firmas del DNIe para este fin.
Lo más recomendado es firmar y cifrar con claves GPG, u obtener firmas de la FNMT, que sí están preparadas para este propósito.
En todo caso hay buenas y sencillas guías en internet sobre cómo conseguir, técnicamente, firmar correos-e con el DNIe (GMail+DNIe; Thunderbird+DNIe).

Para consultar otras posibilidades tenemos el oráculo, la página de Servicios Disponibles o la web Kriptopolis.
 
 

Sobre este tutorial

Hay bastantes guías en internet, pero en Julio de 2009 ninguna me daba buen resultado en Debian Lenny. Básicamente parecía que todo iba bien, excepto por el navegador (Iceweasel/Firefox) que “petaba” al introducir un DNIe en el lector. Al final encontré la solución en Guadalinex gracias a una pista de fontanon en univero emergya.
Tras publicar la primera versión de este tutorial con todos los pasos para que el lector funcione en Debian Lenny e indicando los problemas encontrados, se pusieron en contacto conmigo los fabricantes del lector C3PO LTC31 (ver los primeros comentarios a esta entrada) y descubrimos que el problema estaba en el empaquetado de las librerías de la DGT, cosa que a día de hoy (Septiembre de 2009) ya está solucionada.
Después he obtenido otro lector, he tenido problemas para firmar PDFs… y así he ido modificando y haciendo crecer este tutorial hasta llegar a esta versión (Noviembre 2009).

Así pues gracias a la gente de C3PO, de sinadura y a todos los que han puesto información en internet sobre como usar y configurar el DNIe.
 

dnie, dni electrónico, linux, debian, lenny, C3PO LTC31, miniLector Bit4id, ACS ACR38-U
 

Instalar un SAI (UPS) en GNU/Linux

Instalaremos como ejemplo un SAI Yukai PowerMust 600 con conexión al puerto serie y conexión USB.
 

Instalamos el sistema nut (Network UPS Tools):
# aptitude install nut

 
Si instalamos el SAI en un puerto USB, además:
# aptitude install nut-usb

Si instalamos el SAI en un puerto serie autorizamos al usuario nut el acceso al mismo:
# adduser nut dialout

 
Configuramos el demonio nut:
# vi /etc/default/nut

# start upsd
START_UPSD=yes

# set upsd specific options. use "man upsd" for more info
UPSD_OPTIONS=""

# start upsmon
START_UPSMON=yes

# set upsmon specific options. use "man upsmon" for more info
UPSMON_OPTIONS=""

Consultamos el controlador que necesitamos para nuestro SAI en la web de Network UPS Tools. Para el SAI del ejemplo necesitamos el controlador “megatec”.
 
Indicamos al sistema la existencia de nuestro SAI:
# vi /etc/nut/ups.conf

[yukai]
	driver = megatec
	# si usamos puerto serie
	# port = /dev/ttyS0
	# si usamos puerto USB
	# port = auto
	port = xxxxxx
	desc = "Yukai PowerMust 600"

Indicamos al demonio los permisos sobre el SAI (permiso local):
# vi /etc/nut/upsd.conf

ACL all 0.0.0.0/0
ACL localhost 127.0.0.1/32

ACCEPT localhost
REJECT all

Creamos un usuario para gestionar el SAI:
# vi /etc/nut/upsd.users

[yukai_admin]
password = mi_clave
allowfrom = localhost
actions = SET
instcmds = ALL

Y por último configuramos el monitor:
# vi /etc/nut/upsmon.conf

MONITOR yukai@localhost 1 yukai_admin mi_clave master
RUN_AS_USER nut
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower

NOTIFYMSG ONLINE "UPS: Normal state"
NOTIFYMSG ONBATT "UPS: On battery"
NOTIFYMSG LOWBATT "UPS: Battery low"
NOTIFYMSG FSD "UPS: Starting shutdown"
NOTIFYMSG COMMOK "UPS: Communication restored"
NOTIFYMSG COMMBAD "UPS: Communication lose"
NOTIFYMSG SHUTDOWN "UPS: Shutting down"
NOTIFYMSG REPLBATT "UPS: Replace battery"

NOTIFYFLAG ONLINE SYSLOG
NOTIFYFLAG ONBATT SYSLOG+WALL
NOTIFYFLAG LOWBATT SYSLOG+WALL
NOTIFYFLAG FSD SYSLOG+WALL
NOTIFYFLAG COMMOK SYSLOG
NOTIFYFLAG COMMBAD SYSLOG
NOTIFYFLAG SHUTDOWN SYSLOG
NOTIFYFLAG REPLBATT SYSLOG

RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 0

Modificamos los permisos de los ficheros:

  • # chown root:nut /etc/nut/*

  • # chmod o-r /etc/nut/*

Reiniciamos el servicio:
# /etc/init.d/nut restart

Y verificamos que todo funciona correctamente:
# upsmon status

Network UPS Tools upsmon 2.2.2
UPS: yukai@localhost (master) (power value 1)
Using power down flag file /etc/killpower

 
Verificamos los procesos en marcha:
# ps aux | grep ups

nut       8513  0.0  0.0   2012   512 ?        Ss   12:01   0:00 /sbin/upsd
root      8515  0.0  0.0   2020   652 ?        Ss   12:01   0:00 /sbin/upsmon
nut       8516  0.0  0.0   2020   688 ?        S    12:01   0:00 /sbin/upsmon

# ps aux | grep nut

nut       8511  0.0  0.0   2012   576 ?        Ss   12:01   0:00 /lib/nut/megatec -a yukai
nut       8513  0.0  0.0   2012   512 ?        Ss   12:01   0:00 /sbin/upsd
nut       8516  0.0  0.0   2020   688 ?        S    12:01   0:00 /sbin/upsmon

Y verificamos que todo funciona correctamente:
$ upsc yukai@localhost

battery.charge: 97.5
battery.voltage: 13.60
battery.voltage.nominal: 12.0
driver.name: megatec
driver.parameter.pollinterval: 2
driver.parameter.port: /dev/ttyS0
driver.version: 2.2.2
driver.version.internal: 1.5.14
input.frequency: 49.9
input.frequency.nominal: 50.0
input.voltage: 209.5
input.voltage.fault: 209.5
input.voltage.maximum: 215.2
input.voltage.minimum: 208.6
input.voltage.nominal: 220.0
output.voltage: 209.5
ups.beeper.status: enabled
ups.delay.shutdown: 0
ups.delay.start: 2
ups.load: 27.0
ups.mfr: unknown
ups.model: unknown
ups.serial: unknown
ups.status: OL
ups.temperature: 25.0
ups.type: standby

Podemos mostrar solo parte de la información:
$ upsc yukai@localhost ups.status

OL

OL indica “On Line power”. Podría indicar por ejemplo OB (“On Battery”) o LB (“Low Battery”).

$ upsc yukai@localhost battery.charge

97.5

 
En escritorios gráficos es útil -y muy sencilla- la herramienta “knutclient” que permite monitorizar el SAI:
knutclient
knutclient
 

Referencia

instalar un sai (ups) en Linux, configurar sai en Linux, instalar UPS en GNU/Linux

Instalar una webcam en GNU/Linux

Instalaremos como ejemplo una Z-Star.
 
Consejo: no todas las cámaras tienen buen soporte en GNU/Linux, algunas no lo tienen en absoluto, y tampoco una cámara más cara produce necesariamente mejores resultados. Además los fabricantes venden bajo el mismo nombre cámaras diferentes (modelos actualizados) así que no es muy fiable saber que el modelo X funciona bien.
Por todo ello recomiendo comprar la cámara en cualquier tienda que tenga variedad y posibilidad de cambio y devolución.
En mi caso compré a la vez 5 cámaras, me quedé la que me funcionaba mejor y devolví las otras cuatro. Fueron dos paseos a la tienda pero comprándolas de una en una hubieran sido más.
 

Conectamos la cámara al equipo y averiguamos el chip de la misma:
$ lsusb

 Bus 002 Device 009: ID 0ac8:305b Z-Star Microelectronics Corp. ZC0305 WebCam

Si la cámara no es USB, por ejemplo una integrada en un portátil, prueba con:
$ dmesg | less

 
Lo importante son los identificadores de fabricante y dispositivo. En el ejemplo 0ac8 y 305b. Con esa información acudimos al oráculo para que nos diga que controlador necesitamos.
Como las respuestas del oráculo a veces son tortuosas e indescifrables, la mayoría de chips con soporte en GNU/Linux las podemos encontrar en uno de los siguientes enlaces:

 
Para la cámara del ejemplo necesitamos los controladores gspca:
$ sudo aptitude install gspca-modules-2.6-686-bigmem

 
Hay que desconectar la cámara y volver a conectarla para que se configuren los módulos al detectarla y ¡ya está! Así de sencillo.
 
Si todo va bien debería aparecer un dispositivo /dev/video0 (o /dev/video).
Para poder utilizar la cámara hay que tener permiso sobre dichos dispositivos, lo cual se consigue en Debian incluyendo al usuario en el grupo “video”.
 
Algunos programas interesantes para hacer pruebas son: webcam, cheese, xawtv / motv, motion, gqcam, camorama…
 

Instalar una webcam en GNU/Linux, Configurar webcam en Linux, Instalar cámara en Linux

Comprobaciones de HW en GNU/Linux

DISPOSITIVOS

# lspci | cat /proc/cpuinfo

# lsusb | cat /proc/scsi/scsi

 

MEMORIA

# free

# memtest86

 

DISCOS

# dd if=/dev/… of=/dev/null

# smartmontools

 

RED

# nictools_nopci

# nictools_pci

 

CPU

# cpuburn

# crashme

# fuzz

# stress

 

OTROS

# mbmon

# sensord

# lmbench

# lm_sensors

# lshw | hwinfo | x86info

# ltp

# spew

 

Comprobaciones de HW en GNU/Linux, Veruificar hardware en Linux, chequeo de hardware

Configurar la salida de TV en tarjetas nVidia

Hay muchos manuales para configurar la salida de television de una tarjeta nVidia. Es sencillo y sin embargo puede hacer perder mucho tiempo, por ello dejo aquí unas notas de como lo he hecho yo.
 
Mi guía (he seguido muchas pero esta resultó la buena) ha sido la receta en inglés de Wikibooks (nVidia/TV-OUT).
No voy a repetir lo que está allí, solo añadiré algunos comentarios.
 
Prerequisito: Tener correctamente configurado el controlador de la tarjeta.
 

Preparación

Lo primero que debemos hacer es identificar las conexiones físicas (SVideo/SVHS, RCA, SCART/Euroconector…). Hay mucha información en internet así que solo comentaré un par de cosas.
Hay conectores de SVideo de 4, 7 y 9 pines. En principio son compatibles (salvo fabricantes extraños), lo que quiere decir que aunque tu tarjeta tenga una salida de 7 pines puedes utilizar un cable de 4 pines, por ejemplo.
Puedes necesitar conversores SVideo-RCA, RCA-SCART, SVideo-SCART… en teoría todas funcionan pero si no lo consigues con una, prueba otra.
¡Ojo!, no todos los SCART, ni todos los conversores son compatibles con SVideo.
En mi caso la TV solo tiene dos entradas SCART, de las cuales solo una admite SVideo. Se puede detectar porque cambiando la entrada con el mando a distancia pasa de modo TV, a modo Ext1, luego a modo Ext2 y luego a modo SVHS2.
Del mismo modo disponía de un conversor de RCA a SCART que tampoco admite SVideo (y me costó darme cuenta).
Actualmente utilizo una salida SVideo con un conversor SVideo/SCART. Si conecto el SVideo a la entrada RCA del conversor a SCART no funciona…
Resumiendo: tras configurar correctamente el sistema no veia la tele por culpa de los conectores, y me pasé toda una tarde cambiando y recambiando la configuración, probando manuales distintos… :-(
Así que verifica varias veces tus conectores y si es necesario compra nuevos (en España al menos el conversor y el cable cuestan menos de 6 euros). Yo tuve que ir dos veces a la tienda hasta encontrar la combinación adecuada.
 
En ningún sitio lo he leido pero hay un modo muy sencillo de verificar las conexiones físicas (quiza la gente no ha tenido el mismo problema que yo): con el equipo apagado se realizan las conexiones y se enciende. Si la conexión es buena verás el arranque por la TV. Sin configurar controladores, software o sistemas operativos. El arranque ya debe verse en la TV, al menos con una GeForce 8400 GS (si lo hubiera sabido antes…).
 

Configuración

Hay dos aproximaciones al problema: o utilizar un solo servidor gráfico con dos monitores (nVidia TwinView) o utilizar dos servidores gráficos diferentes.
La guía utiliza la segunda aproximación. Yo he seguido muchas guías intentando configurar la primera y no lo he conseguido. Parece que está más orientada al uso de dos monitores, porque los errores me los da únicamente en los metamodes.
 

Siguiendo la guía

No la voy a repetir, pero aquí está mi fichero xorg.conf (simplemente tuve que añadir la parte que se encuentra bajo “Configuracion para la TV”):

Section "ServerLayout"
    Identifier     "Default Layout"
    Screen         0 "Screen0" 0 0
    #Screen         1 "Screen1" RightOf "Default Screen"
    InputDevice    "Generic Keyboard"
    InputDevice    "Configured Mouse"
EndSection

#Section "ServerFlags"
#    Option         "Xinerama" "0"
#EndSection

Section "Files"
	# path to defoma fonts
    FontPath        "/usr/share/fonts/X11/misc"
    FontPath        "/usr/X11R6/lib/X11/fonts/misc"
    FontPath        "/usr/share/fonts/X11/cyrillic"
    FontPath        "/usr/X11R6/lib/X11/fonts/cyrillic"
    FontPath        "/usr/share/fonts/X11/100dpi/:unscaled"
    FontPath        "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled"
    FontPath        "/usr/share/fonts/X11/75dpi/:unscaled"
    FontPath        "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled"
    FontPath        "/usr/share/fonts/X11/Type1"
    FontPath        "/usr/X11R6/lib/X11/fonts/Type1"
    FontPath        "/usr/share/fonts/X11/100dpi"
    FontPath        "/usr/X11R6/lib/X11/fonts/100dpi"
    FontPath        "/usr/share/fonts/X11/75dpi"
    FontPath        "/usr/X11R6/lib/X11/fonts/75dpi"
    FontPath        "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
EndSection

Section "Module"
    Load           "bitmap"
    Load           "ddc"
    Load           "extmod"
    Load           "freetype"
    Load           "glx"
    Load           "int10"
    Load           "vbe"
EndSection

Section "InputDevice"
    Identifier     "Generic Keyboard"
    Driver         "kbd"
    Option         "CoreKeyboard"
    Option         "XkbRules" "xorg"
    Option         "XkbModel" "pc105"
    Option         "XkbLayout" "es"
EndSection

Section "InputDevice"
    Identifier     "Configured Mouse"
    Driver         "mouse"
    Option         "CorePointer"
    Option         "Device" "/dev/input/mice"
    Option         "Protocol" "ImPS/2"
EndSection

Section "Monitor"
    Identifier     "Monitor TFT"
    ModelName      "Samsung SyncMaster"
    HorizSync       30.0 - 70.0
    VertRefresh     50.0 - 160.0
    Option         "DPMS"
EndSection

Section "Device"
    Identifier     "nVidia Corporation NVIDIA Default Card"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce 8400 GS"

    Busid          "PCI:3:0:0"
EndSection

Section "Screen"
    Identifier     "Screen0"
    Device         "nVidia Corporation NVIDIA Default Card"
    Monitor        "Monitor TFT"
    DefaultDepth    24

    SubSection     "Display"
        Depth       1
        Modes      "1280x1024" "1024x768" "800x600" "640x480"
    EndSubSection
    SubSection     "Display"
        Depth       4
        Modes      "1280x1024" "1024x768" "800x600" "640x480"
    EndSubSection
    SubSection     "Display"
        Depth       8
        Modes      "1280x1024" "1024x768" "800x600" "640x480"
    EndSubSection
    SubSection     "Display"
        Depth       15
        Modes      "1280x1024" "1024x768" "800x600" "640x480"
    EndSubSection
    SubSection     "Display"
        Depth       16
        Modes      "1280x1024" "1024x768" "800x600" "640x480"
    EndSubSection
    SubSection     "Display"
        Depth       24
        Modes      "1280x1024" "1024x768" "800x600" "640x480"
    EndSubSection
EndSection

#############################################################
# Configuracion para Compiz #
#############################################################

Section "Extensions"
    Option "Composite" "Enable"
EndSection

Section "DRI"
    Mode 0666
EndSection

#############################################################
# Configuracion para la TV #
#############################################################

Section "ServerLayout"
    Identifier     "TV"
    Screen         0 "Screen1" 0 0
    InputDevice    "Generic Keyboard"
    InputDevice    "Configured Mouse"
EndSection

Section "Screen"
    Identifier     "Screen1"
    Device         "nVidia TV"
    Monitor        "Monitor TV"
	DefaultDepth 16
	SubSection "Display"
		Depth     16
		#Modes "1024x768" "800x600" "640x480"
		Modes "640x480"
	EndSubSection
EndSection

Section "Monitor"
    Identifier     "Monitor TV"
    HorizSync       30.0 - 50.0
    VertRefresh     60.0
EndSection

Section "Device"
    Identifier     "nVidia TV"
    Driver         "nvidia"

    Busid          "PCI:3:0:0"

	#Option "TwinView" "1"
	#Option "SecondMonitorHorizSync" "30-50"
	#Option "SecondMonitorVertRefresh" "60"
	#Option "TwinViewOrientation" "Clone"
	Option "TVStandard" "PAL-G"
	#Option "TVOutFormat" "COMPOSITE"
	#Option "TVOutFormat" "SVIDEO"
	#Option "ConnectedMonitor" "CRT,DFP,TV"
	Option "ConnectedMonitor" "TV"
EndSection



 

Por último configure un sencillo ~/.xinitrc:

metacity &
totem &
xterm

 
Junto con un miniscript ~/bin/TV del que hice un lanzador en el escritorio:

#!/bin/bash

xinit -- :1 -layout TV
# ver ~/.xinitrc

 
Además de los scripts indicados en la guía.
tv-mplayer:

#!/bin/sh

exec /usr/X11R6/bin/xinit /usr/bin/xterm -ut -e \
  /usr/bin/mplayer -stop-xscreensaver -fs -vo sdl "$@" -- /usr/X11R6/bin/X :1 -layout TV

tv-totem:

exec /usr/X11R6/bin/xinit /usr/bin/xterm -ut -e \
  /usr/bin/totem -- /usr/X11R6/bin/X :1 -layout TV

La ventaja de llamarlos tv-* es que es más facil lanzarlos desde bash con autocompletar (TAB).
 
¡Y ya está!
Ahora estoy intentando que cuando enciendo el equipo con la TV conectada siga utilizando el monitor, porque actualmente me toca desconectar la TV en el arranque.
 

Solventando errores

Una buena fuente es la FAQ de X.org.
 
X: user not authorized to run the X server, aborting.
Dos opciones, la sencilla:
# dpkg-reconfigure X11-common
 
Para entenderlo mejor:
# vi /etc/X11/Xsession.options

allow-user-resources
allow-user-xsession

# vi /etc/X11/Xwrapper.config

allowed_users=anybody

 
Xlib: connection to “:1.0″ refused by server
$ mv ~/.Xauthority ~/.Xauthority.old
 

Configurar la salida de TV en tarjetas nVidia, tv-out nvidia Linux, salida tv en GNU/Linux

40 años de cajeros automáticos

Leo en Cinco Días que el cajero automático cumple 40 años.
Mi padre fue uno de los programadores de los primeros cajeros automáticos de la Caja de Ahorros de Valencia (ahora Bancaja) y recuerdo haber jugado con uno de ellos, que entregaba billetes de Mortadelo, antes de que fuesen inaugurados. Visto con perspectiva, mi hermana y yo solo eramos unos conejillos de indias, que mostraban que dos niños eran capaces de manejar el nuevo sistema.
Los billetes de Mortadelo y las carreras en silla de ruedas por los pasillos de la central de la caja de ahorros, enmoquetadas en beis o naranja envejecido, es lo que siempre recuerdo.