Hiparco

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

Alojado en http://guimi.net

Copia de sistemas, clonado de discos

Para copiar sistemas hay muchas herramientas disponibles: g4l, partimage, ntfsclone… y por supuesto el viejo y confiable tar.
Veamos unas chuletas rápidas que pueden ayudarnos. Lógicamente hay que ajustar los nombres de los discos y las particiones.

Copia del MBR y la tabla de particiones
Para copiar el MBR y la tabla de particiones de un disco usamos dd y sfdisk.
MBR:
# dd if=/dev/sda of=sda.mbr count=1 bs=512
Tabla de particiones
# sfdisk -d /dev/sda > sda.sf

Para recuperarlos.
MBR:
# dd if=sda.mbr of=/dev/sda
Tabla de particiones
# sfdisk /dev/sda < sda.sf

Para clonar discos NTFS (Windows), usamos ntfsclone
Esta herramienta (ntfsclone) no permite volcar una imagen de una partición en otra partición más pequeña, aunque los datos quepan. En cambio volcar una partición pequeña en una más grande sí es posible.
Por ello se recomienda que la partición original sea lo más pequeña posible. Lo más cómodo es instalar en una partición grande y después redimensionarla antes de hacer la imagen.
# ntfsclone -s -o – /dev/sda1 | gzip | split -b 1500m – sda1.ntfsclone.gz.

Para recuperar la partición usamos:
# cat sda1.ntfsclone.gz.aa sda1.ntfsclone.gz.ab | gunzip -c | ntfsclone –restore-image –overwrite /dev/sda1 –

Para copiar datos de un sistema GNU/Linux a otro, mediante ssh+tar
Desde el equipo en el que vamos a volcar los datos (usamos p para preservar los permisos):
$ ssh IP_equipo_origen “tar cpf – /path_a_copiar” | tar xpf –

Si la red en que trabajamos es lenta (por ejemplo a través de internet) podemos comprimir los datos antes de enviarlos, podemos cambiar el directorio en que se copian los datos…:
$ ssh IP_equipo_origen “tar czpf – /path_a_copiar” | tar xzpf – -C /nuevo_path_base

También podríamos volcar los datos a un fichero:
$ ssh IP_equipo_origen “tar czpf – /path_a_copiar” | dd of=copia_datos.tar.gz
O en el sentido contrario:
$ tar czpf – /path_a_copiar | ssh IP_equipo_destino “dd of=copia_datos.tar.gz”

Más opciones con
$ man tar
$ man ssh

Trabajar con imágenes de particiones
$ partimage
Sí, ya está, solo eso.
Se pueden ver más opciones para evitar el asistente, como siempre mediante:
$ man partimage

tar, ssh, partimage, ntfsclone, dd, clonado, copia

Generar (diff) y aplicar (patch) parches

Hay manuales muy buenos sobre cómo generar parches… este no es uno de ellos, pero es una guía rápida para el 90% de casos.

Para los ejemplos suponemos que tenemos ficheros originales en una carpeta “original” y ficheros modificados en una carpeta “new”.

Trabajando con ficheros
Primero veremos como parchear un único fichero. Usamos el formato unificado (-u). Es el mejor pero “solo” sirve para entornos GNU, es decir todos los Linux y muchos UNIX.
diff -u original/foo.txt new/foo.txt > foo.patch

Podemos ver el parche generado con:
less foo.patch
La sintaxis es (línea o rango de líneas)(orden)(línea o rango de líneas)
Orden puede ser:
c – change – sustituir unas líneas por otras
a – add – añadir líneas
d -delete – borrar líneas

Para aplicar el parche podemos hacer (nombre de fichero implícito en el parche):
patch < foo.patch
O más seguro
patch bar.txt < foo.patch

Si queremos revertir un parche, porque detectamos que introduce un bug pero que el que corrige, por ejemplo, podemos hacer:
patch -R < foo.patch

Trabajando con directorios
Si modificamos varios ficheros, trabajamos con los directorios.
Generamos el parche con:
diff -rupN original/ new/ > codigo.patch

Lo aplicamos con:
patch -p1 < codigo.patch

Para más información, como siempre:
$ man diff
$ man patch

Trabajando con github.com
Los commits de Github pueden bajarse como parches añadiendo “.patch” al URL.
Así bastaría con:
$ wget github.com/URL_COMMIT.patch
$ patch -p1 < URL_COMMIT.patch

diff, patch, parche

Instalación de firmware en Debian

[Este apartado es un resumen de una entrada de Raphael Hertzog. Si el artículo todavía está disponible recomiendo ir al original.]

Una duda habitual al instalar un GNU/Linux es el tipo de procesador del que se dispone. En un PC con linux (por ejemplo arrancando con un Live-CD) podemos hacer:
$ grep “^flags” /proc/cpuinfo | grep -q ” lm ” && echo “amd64” || echo “i386”

Puede ocurrir que al instalar Debian un equipo, una parte del hardware no funcione correctamente por falta del correspondiente firmware (o el uso de uno que no es totalmente adecuado). Una opción es obtener de Raphael Hertzog un disco de Debian con firmware.

Otra opción es realizar una instalación básica de Debian y posteriormente verificar el firmware necesario e instalarlo.
Si es necesario, pueden bajarse paquetes desde otro equipo desde la web de Debian.
Después se instala con # dpkg -i paquete

Si el equipo necesita algún firmware, durante la instalación, al actualizar el kernel o al hacer un update-initramfs aparecerán mensajes diciendo:
may require additional firmware” o “Failed to load firmware” o “Possible missing firmware“.
Podemos buscar más mensajes mediante:
# dmesg | grep firmware
# grep firmware /var/log/installer/*

Por ejemplo podemos encontrar:

[   24.110644] b43 ssb0:0: firmware: agent aborted loading b43/ucode5.fw (not found?)
[   24.116317] b43 ssb0:0: firmware: agent aborted loading b43-open/ucode5.fw (not found?)
[   24.116511] b43-phy0 ERROR: You must go to http://wireless.kernel.org/en/users/Drivers/b43#devicefirmware and download the correct firmware for this driver version. Please carefully read all instructions on this website.

O:

e100: eth0: e100_request_firmware: Failed to load firmware "e100/d101m_ucode.bin": -2

El firmware que requiere el módulo e100 es:
$ modinfo -F firmware /lib/modules/2.6.32-5-amd64/kernel/drivers/net/e100.ko

e100/d102e_ucode.bin
e100/d101s_ucode.bin
e100/d101m_ucode.bin

Lo mejor es regenerar la imagen de inicio:
# update-initramfs

update-initramfs: Generating /boot/initrd.img-2.6.32-5-amd64
W: Possible missing firmware /lib/firmware/e100/d102e_ucode.bin for module e100
W: Possible missing firmware /lib/firmware/e100/d101s_ucode.bin for module e100
W: Possible missing firmware /lib/firmware/e100/d101m_ucode.bin for module e100

Una vez visto el firmware que nos falta averiguamos dónde obtenerlo y lo instalamos:
$ apt-cache search d101m_ucode.bin

firmware-linux-nonfree - Binary firmware for various drivers in the Linux kernel

# aptitude install firmware-linux-nonfree

Para ver todos los paquetes de firmware disponibles:
$ aptitude search firmware

El firmware se instala en:

  • /lib/firmware/$(uname -r)
  • /lib/firmware
  • /usr/local/lib/firmware
  • /usr/lib/hotplug/firmware

Configuración de sudo

Autorizamos algunos usuarios a realizar tareas administrativas
# vi /etc/sudoers

# DEFAULTS
# env_reset : resetea las variables de entorno antes de ejecutar
# insults : cuando te equivocas de contraseña 
#+    te "insulta" irónicamente
# timestamp_timeout=5 : una vez pones la contraseña correctamente,
#+    no te la vuelve a pedir en 5 minutos (0 : pedir siempre)
# lecture=once : solo te avisa sobre la responsabilidad una vez por sesión
# passwd_tries=2 : permite 2 intentos para la contraseña
# rootpw : pide la clave de root en vez de la del usuario

Defaults env_reset, insults, timestamp_timeout=5, lecture=once, passwd_tries=2

# User alias specification
User_Alias ADMINS=guimi

# Cmnd alias specification
Cmnd_Alias APT = /usr/bin/apt-get, /usr/bin/dpkg, /usr/bin/aptitude
Cmnd_Alias APAGADO = /sbin/shutdown, /sbin/halt, /sbin/reboot
Cmnd_Alias RED = /usr/bin/kismet, /sbin/iwlist, /sbin/ifuop, /sbin/ifdown, /sbin/wpa_cli
Cmnd_Alias PROPIOS = /root/bin/SCRIPT1

# User privilege specification
root	ALL=(ALL) ALL
# Si el usuario admin esta en el grupo 'sudo' no le pedira clave
admin	ALL=(ALL) ALL

# Indicamos expresamente que no solicite clave para estos comandos
ADMINS ALL= NOPASSWD: APT
ADMINS ALL= NOPASSWD: APAGADO
ADMINS ALL= NOPASSWD: RED
ADMINS ALL= NOPASSWD: PROPIOS

sudo

Configuración de ssh

Configuración del servidor SSH

Una vez instalado con:
aptitude install openssh-server

Para mayor seguridad cambiamos el puerto, reducimos el tiempo de login y no permitimos conexiones de root
# vi /etc/ssh/sshd_config

Port xxxx
LoginGraceTime 45
PermitRootLogin no

Restricción de usuarios

Solo permitimos acceder por ssh a los usuarios indicados en el fichero /etc/loginusers
# vi /etc/pam.d/sshd

#auth       required     pam_env.so # [1]
auth       required     pam_listfile.so sense=allow onerr=fail item=user file=/etc/loginusers

Creamos el fichero /etc/loginusers con los usuarios autorizados:
# vi /etc/loginusers

guimi

Denegación de uso de usuario/password

Es posible conectarse al servidor ssh desde otra maquina utilizando login y contraseña ($ ssh usuario@maquina -p xxxx) o usando ficheros de clave pública/privada ($ ssh usuario@maquina -p xxxx -i id_dsa_copiada).

Para permitir solo el uso de certificados (recomendado) reconfiguramos sshd desautorizando las autentificaciones por contraseña
# vi /etc/ssh/sshd_config

PasswordAuthentication no

Reiniciamos el servicio
# /etc/init.d/ssh restart

Para más información sobre la generación y uso de ficheros de claves ver Confianza ssh.

Una vez configurado el servidor SSH puede hacer Uso de ssh y Uso de scp. También se puede, por supuesto, generar Túneles ssh.

Otros artículos relacionados

Confianza ssh
Túneles SSH
Uso de ssh
Uso de scp
sshfs – Montando recursos mediante SSH y FUSE

SSH, SSL, túnel SSH, openssh-server
 

Algunos paquetes interesantes en GNU/Linux

Todos los paquetes están disponibles en las principales distribuciones.

Servicios
apache2 Servidor web
cups-pdf Añade una impresora virtual CUPS que genera PDFs
mysql-server Servidor de bases de datos
openssh-server Servidor de ssh
openntpd Sincronizacion de reloj (servicio inseguro)
phpmyadmin Gestor PHP de MySQL
sane-utils xsane Herramientas para escáneres
vnc4server Servidor de vnc (X remoto)
Sistema y herramientas de línea de comandos
linux-image-686-bigmem Núcleo compilado para usar mucha RAM (>2GB).
linux-headers-`uname -r` Las cabeceras del núcleo. Necesarias para compilar módulos.
build-essential Paquete básico para compilar.
acct Grupo de herramientas para “auditar” login, procesos y comandos
apt-file El poder de APT orientado a los ficheros de los paquetes
dosfstools Utilidades para manejar FAT
less Paginador
lshw lsof usbutils Listan el HW, los ficheros abiertos, los dispositivos pci y los dispositivos usb
lynx w3mlinks2 Navegadores en consola
mc Midnight Commander. Gestor de ficheros para línea de comandos con muchas posibilidades
module-assistant modconf Configuradores (opcionales) de módulos
ip nmap nbtscan fping Herramientas / Analizadores de redes
iftop Monitoriza el uso de interfaces de red.
renameutils Utilidades de renombrado masivo. Incluye qmv, imv y qcp
screen Multiplexor de terminales (Gestor de conexiones)
testdisk Verificador de discos
tofrodos convmv Conversores. Por ejemplo:
$ convmv -f iso-8859-15 -t UTF-8 -r * –notest
Eso convertiria el nombre del fichero. Para convertir el contenido hay que usar iconv (viene en libc6):
$ iconv fichero.in -f iso-8859-15 -t utf-8 -o fichero.out
unrar-free Descompresor de rar
vim Vi IMproved
watch Ejecuta repetidamente un comando. Por ejemplo watch cat /proc/mdstat permite seguir la sincronizacion de un RAID.
zgv fbi Visores de imagenes en framebuffer
cowsay fortunes-es Citadores, a combinar con fortunecow.sh
vrms Muestra los paquetes no libres instalados en el sistema
imagemagick Manipulación de imágenes desde la línea de comandos
pdftk Manipulación de PDFs desde la línea de comandos
console-data console-tools Permiten ajustar los parámetros de la consola
Otras herramientas simples de hack como arping, bmon, icmpinfonetstat-nat, cutter, sacnlogd, MTR, bing Un articulillo sobre herramientas simples de hack en epzylon
Herramientas de Escritorio
alacarte Editor de menús de Gnome
gdm-themes Temas de entrada del gestor de inicio de Gnome
gnome-audio Sonidos de Gnome
gnomebaker k3b Grabadores de CD/DVD
gftp Cliente FTP
gsfonts-other ttf-freefont Fuentes para GUI
gthumb Visor de imagenes mejor que el que viene por defecto en Gnome
gtodo Sencillo gestor de tareas
iceweasel iceweasel-gnome-support iceweasel-l10n-es-es Navegador web
icedove icedove-gnome-support icedove-l10n-es-es iceowl iceowl-extension Cliente de correo-e y calendario
openoffice.org openoffice.org-l10n-es openoffice.org-help-es openoffice.org-gtk openoffice.org-kde Paquete ofimático en español
xplanet xplanet-images Genera imagenes del sistema solar. Incluye salvapantallas.
xplanet -vroot -wait 1 -timewarp 90000 -label -origin moon
Herramientas multimedia
amarok EL reproductor de música
BIG (blender, inkscape, gimp (+plugin pandora)) Diseño gráfico.
liblame0 gstreamer0.10-lame Librerias MP3
lsdvd Describe un dvd
kino Permite pasar videos de una cámara al ordenador.
dvdstyler Permite crear DVDs
k9copy Copias de DVD de video
VLC EL reproductor multimedia
OpenShot EL editor de video
soundconverter flac lame mp3splt audacity Herramientas de audio
tagtool id3ed Gestion de etiquetas ID3 (mp3) (grafico y comando)
xine-ui mplayer libdvdcss w32codecs/w64codecs transcode avidemux subtitleeditor lsdvd mencoder Herramientas de video
Juegos para niños
gcompris tuxmath supertux supertuxkart extremetuxracer tuxpaint tuxtype torcs wormux Juegos para niños

Configurar juego de caracteres (charset) en LAMP (Linux, Apache, MySQL, PHP)

Instalamos los paquetes necesarios:
# aptitude install apache2 mysql-server php5

Modificamos la configuración de apache:
# vi /etc/apache2/conf.d/charset

...
AddDefaultCharset       UTF-8
...

Modificamos la configuración de PHP:
# vi /etc/php5/apache2/php.ini

...
default_charset = "utf8"
...

En la cabecera de las páginas indicar:

...
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
...

Y en los scripts PHP de conexión:

...
$sql_script("SET NAMES 'utf8'");
...

Modificamos la configuración de MySQL:
# vi /etc/mysql/my.cnf

...
language    = /usr/share/mysql/spanish
...

Y reiniciamos los servicios:
# /etc/init.d/apache2 restart
# /etc/init.d/mysql restart

En caso de tener una BB.DD. en otra codificación como iso-8859-1, conviene exportarla a un fichero de texto, convertir el fichero con “iconv bbdd.sql -f iso-8859-15 -t utf-8 -o bbdd_utf8.sql” y volver a importarla.

juego de caracteres, charset, Linux, Apache, MySQL, PHP

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

Red con IP estática

Cada día hay más automatismos… y ya casi se nos olvida como hacer las cosas por nosotros mismos.
Para configurar una IP estática hacemos lo que indica el manual de Debian:
Primero configuramos la interfaz (en el ejemplo eth0 con la IP 192.168.11.100).
# vi /etc/network/interfaces
allow-hotplug eth0
iface eth0 inet static
address 192.168.11.100
netmask 255.255.255.0
broadcast 192.168.11.255
gateway 192.168.11.1
dns-domain lan
dns-nameservers 192.168.11.1

Después los DNSs, si no está instalado resolvconf, basta con:
# vi /etc/resolv.conf
domain localdomain
search localdomain
nameserver 192.168.1.1

Si está instalado resolvconf (y ante la duda no está de más):
# vi /etc/resolvconf/resolv.conf.d/base
nameserver 192.168.1.1

Tumbamos y levantamos la interfaz…
# ifdown eth0
# ifup eth0

¡Y ya está!

static ip, ip estática, red estática

Script para procesar fotos

Tras varios apuntes sobre como trabajar con fotos, pongo aquí el script completo que yo utilizo:

#!/bin/bash
#
# procesa_fotos.sh
# Por Guimi 2009/08 - http://www.guimi.net
#
# Ult. modificacion 2013/03 - http://guimi.net
#
# REQUIERE exif y jhead

####################################
#### ERRORES
E_NOPARAM=64        # Bad number of params

##########################
# PARAMETROS
DIR="./procesadas"

mkdir $DIR

echo "Renombrando videos..."
# Los ficheros .mov son peliculas que tienen asociado
# un fichero .jpg con el mismo nombre
for x in `ls *.mov 2> /dev/null`
do
	# Primero tomamos el directorio, el nombre y la extension
	#directorio=$(dirname "$x")
	nombre_fichero=$(basename "$x")
	#extension="${nombre_fichero##*.}"
	nombre_fichero="${nombre_fichero%.*}"

	# Comprobamos si existe el mismo fichero con extension jpg
	# En algunas camaras se llama .thm pero NO tiene cabecera exif
	if [ -f $nombre_fichero.jpg ]
	then
		# Tomamos la fecha, hora, minuto y segundo de la cabecera exif
		momento=`exif -t 0x9003 -m $nombre_fichero.jpg`
		nuevo_nombre="${momento:0:4}${momento:5:2}${momento:8:2}-${momento:11:2}${momento:14:2}${momento:17:2}"

		# Renombramos el fichero mov
		cp $x $DIR/$nuevo_nombre.mov
	else
		# Copiamos el fichero mov
		cp $x $DIR
	fi
done

# Los ficheros .mov son peliculas que tienen asociado
# un fichero .jpg con el mismo nombre
for x in `ls *.MOV 2> /dev/null`
do
	# Primero tomamos el directorio, el nombre y la extension
	#directorio=$(dirname "$x")
	nombre_fichero=$(basename "$x")
	#extension="${nombre_fichero##*.}"
	nombre_fichero="${nombre_fichero%.*}"

	# Comprobamos si existe el mismo fichero con extension jpg
	# En algunas camaras se llama .thm pero NO tiene cabecera exif
	if [ -f $nombre_fichero.JPG ]
	then
		# Tomamos la fecha, hora, minuto y segundo de la cabecera exif
		momento=`exif -t 0x9003 -m $nombre_fichero.JPG`
		nuevo_nombre="${momento:0:4}${momento:5:2}${momento:8:2}-${momento:11:2}${momento:14:2}${momento:17:2}"

		# Renombramos el fichero mov
		cp $x $DIR/$nuevo_nombre.mov
	else
		# Copiamos el fichero mov
		cp $x $DIR
	fi
done

echo "Renombrando fotos..."
# Copiamos las fotos al directorio de trabajo
cp *.jpg $DIR
cp *.JPG $DIR
# Nos movemos al directorio de trabajo
cd $DIR
# Renombramos ficheros y los rotamos si es menester
jhead -autorot -n%Y%m%d-%H%M%S *.jpg > /dev/null
jhead -autorot -n%Y%m%d-%H%M%S *.JPG > /dev/null
#jhead -n%Y%m%d-%H%M%S *.jpg