26.12.08

Cambiar resolución de una SunRay

Los terminales SunRay toman la resolución nativa del monitor que tienen pinchado por defecto y eso no suele gustarle a todos los usuarios. Podríamos grabar una configuración personalizada mediante el comando "utresadm" pero generalmente en este tipo de soluciones los usuarios son itinerantes, así que lo más cómodo es asociar una resolución a la Java Card que utiliza ese usuario (perfectamente funciona con el DNIe), mediante el comando:

/opt/SUNWut/bin/utxconfig -r resolución -t Token_Id

Ejemplo:

/opt/SUNWut/bin/utxconfig -r '1024x768' -t Payflex.5122f9db03431123

18.11.08

Auto Login con GDM/XDM

Para acceder directamente al entorno gráfico en el inicio del sistema sin facilitar un password, debemos tocar el fichero de configuración del gestor de arranque.

Para sistemas Debian/Ubuntu... (/etc/gdm/gdm.conf):

...
AutomaticLoginEnable = true
LocalNoPasswordUsers = usuario_que_inicia_por_defecto
...

Para sistemas RedHat/Suse... (/etc/sysconfig/displaymanager):

...
DISPLAYMANAGER_AUTOLOGIN = usuario_que_inicia_por_defecto
DISPLAYMANAGER_PASSWORD_LESS_LOGIN = "yes"
...

Automount en consola

Para que los dispositivos extraíbles se automonten en consola de la misma forma que en los gestores gráficos, sin necesidad de establecer los puntos de montaje manualmente con mount, disponemos de la utilidad ivman.

apt-get install ivman

Luego nos aseguraremos de que se cargue el script de inicialización en el rc.d correspondiente y ya estará listo (en la configuración por defecto de ivman ya se automontan los dispositivos extraíbles).

Eliminar Identity Box en Firefox 3

Dentro del subdirectorio chrome de la carpeta de configuración de Firefox editamos/creamos el fichero userChrome.css y añadimos la entrada:

#identity-box {
display: none;
}

Otras opciones molestas son la estrella de marcadores o el botón ir, que se pueden eliminar con las entradas:

#star-button {
display: none !important;
}

#go-button {
display: none !important;
}

Se pueden consultar más opciones de configuración en la url http://kb.mozillazine.org/UserChrome.css_Element_Names/IDs

30.7.08

Autentificación SSH mediante pares de claves DSA

Como complemento a las recetas publicadas con anterioridad sobre Seguridad Básica de SSH, nos quedaba pendiente la autentificación mediante certificados.

Para ello, simplemente debemos crear un juego de claves:

ssh-keygen -t dsa

Comando mediante el cual crearemos una clave del tipo DSA de 1024 bits que se guardará en el directorio ~/.ssh/id_dsa, cuya clave pública estará en ~/.ssh/id_dsa.pub.

Una vez que se ha creado el juego de llaves deberemos cambiar la configuración del sistema para comience a trabajar con ellas en lugar de validar tuplas usuario/password, configuración que realizaremos en el equipo que actúa como servidor SSH (al que nos queremos conectar).Para ello editaremos el fichero de configuración /etc/ssh/sshd_config y aplicaremos los cambios en las opciones:

Protocol 2
PermitRootLogin without-password
PasswordAuthentication no


Antes de reiniciar el servicio en el servidor y poder logearnos con la nueva configuración, tendremos que copiar la clave pública que generemos en el esclavo a ~/.ssh/authorised_keys.

NOTA: Dependiendo del sistema, de la configuración y los permisos del $HOME, conviene (si no lo está) cambiar los permisos de los ficheros a 700.

6.6.08

Python: Descomprimir ficheros zip

Aunque es realmente fácil y probablemente conocido, mucha gente se hace un lío a la hora de descomprimir ficheros. La clase siguiente lista el contenido de todos los ficheros .zip que hay en el directorio de ejecución:

import sys
import zipfile

for filename in sys.argv[1:]:
   z = zipfile.ZipFile(file(filename))
   print "%s:" % (filename)
   for f in z.namelist():
      print "\t%s" % (f)
      print ""

28.5.08

Runit, la alternativa a SysV Init

SysV init como tal, puede que no sea conocido por el usuario de escritorio, pero es el gestor de servicios de Unix/Linux por excelencia, todos hemos tenido que configurar en alguna ocasión los scripts de arranque de un servicio contenido en /etc/init.d/.
El problema de SysV init es la respuesta ante la caída de un servicio, ya que el único medio que se dispone es el arranque a mano, mediante el script de iniciación. Para el caso de un servidor web apache:

/etc/init.d/apache start

Si el servidor web se cae, o lo levantamos a mano, o lo monitorizamos con una herramienta para que nos avise que se ha caído (Nagios por ejemplo) o creamos nuestro propio demonio que lo levante de nuevo (algo pesado la verdad).

Runit es el gestor de servicios que resuelve el problema, ya que no sólo los lanza, los supervisa. Si se tiene la necesidad de optar por esta solución, conviene visitar la página del proyecto y hacerse con los scripts de arranque para el nuevo gestor:

- Runit, gestor de arranque
- Scripts para los servicios más comunes

18.4.08

Snort: configuración básica para la detección de intrusos

Snort es una herramienta muy conocida por el administrador de sistemas y utilizada por defecto en la práctica totalidad de distribuciones Linux orientadas a trabajar como encaminadores (SmoothWall, IpCop, Untangle...)

Los usos y posibilidades de esta herramienta son realmente variados aunque lo más común es utilizarlo como "packet logger" o sniffer, con volcado a texto plano o bbdd MySQL/PostgreSQL.

Algunos de sus usos básicos son:

# snort -v (-vd)

Funciona como un sniffer realizando un volcado por pantalla de todo el tráfico (la opción -vd muestra más información).

# snort -l ruta_fichero_log -d

Ejecuta snort y guardar el log en la ruta indicada en el formato predeterminado (binario). Para visualizar este fichero se utiliza la opción -r

# snort -r ruta_fichero_log

Para una configuración inicial con reglas de detección básicas, se pueden descargar las establecidas por la comunidad desde el site oficial de la aplicación: http://www.snort.org/pub-bin/downloads.cgi, en formato comprimido tar.gz.

Para habilitar estas reglas se copiarán (descomprimidas) al directorio de configuración de snort (/etc/snort/rules/) y editaremos el fichero de configuración del programa asegurándonos de que son visibles:

# vi /etc/snort/snort.conf

...
var RULE_PATH rules
include $RULE_PATH/sql.rules
include $RULE_PATH/tcp.rules
...


Ahora nos queda cargar la nueva configuración:

# snort -c /etc/snort/snort.conf

28.3.08

Ahorrando batería con Linux - Pequeños trucos

La gestión de energía en Linux es uno de esos aspectos pendientes de resolver, aunque ya hemos visto en posts anteriores pequeñas recetas para ahorrar un poco de batería, que algo ayudan.
Existe un proyecto amparado por la propia Intel, llamado LessWatts, que provee una serie de trucos y herramientas muy interesantes para desarrolladores (también para usuarios).
Llaman bastante la atención los trucos propuestos, ya que se salen de las soluciones típicas, no por extravagantes, sinó por desconocidos:

* Enable the power aware SMP scheduler
* Use SATA link power management
* Enable WiFi* power management
* Check for unused Bluetooth*
* Use gigabit ethernet speeds only when needed

Las herramientas propuestas se pueden descargar desde el site del proyecto:

http://www.lesswatts.org/downloads/

15.3.08

Poniendo a punto Kubuntu 7.10 (flash, divx, mp3, compiz, etc)

Si hay algo que se le puede envidiar a Linux es el soporte no oficial que ofrecen los usuarios del producto. Claro que, ¿quién certifica que el usuario que realiza una receta está en lo cierto?

Digo esto porque, tras haber instalado Kubuntu 7.10 y con muy pocas ganas de romperme los cuernos, le pregunté a Google, la forma de instalar esos paquetes esenciales que no vienen con la distribución. Y claro, como no, entré en los enlaces con mayor popularidad (según Google) pero viendo los gazapos que tenían las recetas, pues va a ser que no, que mejor nos la hacemos a mano y la publicamos (sin que nadie se ofenda).

Y para que todo lo que vamos a hacer se pueda empezar debemos activar los repositorios que no están disponibles por defecto. Para ello, editaremos el fichero /etc/apt/sources.list y añadimos los citados repositorios:

deb http://security.ubuntu.com/ubuntu gutsy-security main restricted
deb-src http://security.ubuntu.com/ubuntu gutsy-security main restricted
deb http://security.ubuntu.com/ubuntu gutsy-security universe
deb-src http://security.ubuntu.com/ubuntu gutsy-security universe
deb http://security.ubuntu.com/ubuntu gutsy-security multiverse
deb http://archive.ubuntu.com/ubuntu/ gutsy main universe restricted multiverse
deb-src http://security.ubuntu.com/ubuntu gutsy-security multiverse


Luego recargamos la bbdd de software:

apt-get update

- INSTALAR FIREFOX Y SOPORTE PARA MACROMEDIA FLASH 9




Instalamos firefox con soporte español:

apt-get install mozilla-firefox-locale-es-es


Instalamos los paquetes necesarios para flash9:

apt-get install flashplugin-nonfree


ATENCIÓN: Esto nos va a dar un error al final, simplemente instalando este paquete nos instala todos los demás que son necesarios.

Nos vamos a /usr/src, descargamos el plugin desde la web de Macromedia y lo cargamos

cd /usr/src
wget http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player_9_linux.tar.gz
tar zxf install_flash_player_9_linux.tar.gz
cp /usr/sr/install_flash_player_9_linux/libflashplayer.so /usr/lib/flashplugin-nonfree/
/usr/lib/nspluginwrapper/x86_64/linux/npconfig -i /usr/lib/flashplugin-nonfree/libflashplayer.so




- INSTALAR SOPORTE MP3, DIVX Y DEMÁS FAMILIA


Cierto es que amarok, kaffeine ... descargan los codecs según los van necesitando al abrir los archivos, pero para evitar esto y tenerlos todos desde el principio:

apt-get install libxine1-ffmpeg


- INSTALAR CONTROLADORES RESTRINGIDOS

Tan sólo hay que irse a las preferencias del sistema, en la pestaña "Avanzado":



- INSTALAR COMPIZ FUSION

Muy fácil, basta con instalar los paquetes:

apt-get install compiz-kde libcompizconfig-backend-kconfig compiz-fusion-plugins-extra compizconfig-settings-manager

Luego lo iniciaremos por primera vez (con el usuario que está usando el entorno gráfico, no como root)

compiz --replace

Para cambiar los ajustes de los efectos nos iremos al menú K -> Preferencias -> Advanced Desktop Effects Settings

11.3.08

Más fiabilidad: por si Linux rompe

Que Linux sea un sistema operativo serio y robusto, no quiere decir que no pueda colgarse.

Bajo ciertas condiciones especiales (fallo de hardware, corrupción de software) el sistema puede deterse debido al mas que conocido error "Kernel Panic".

En estaciones de trabajo y servidores que mantienen servicios dedicados, que el sistema de un error es malo, pero que no haga nada por levantarse es peor.
Y como es realmente complicado prever un "Kernel Panic" y la vida del administrador de sistemas no gira físicamente en torno a la máquina, hay que estar siempre preparados para la menos probable de las adversidades.
Es por ello que conviene preparar el sistema para que llegado el momento, tras un error del tipo "Kernel Panic" haga un reboot, reset, restart o como cada uno quiera llamarlo. Y para conseguirlo únicamente se debe añadir la siguiente línea al fichero de configuración /etc/sysctl.conf :

kernel.panic = n


donde n es el número de segundos tras los que queremos que se reinicie la máquina en caso de tal evento ocurra.

15.2.08

SSH: seguridad básica

OpenSSH es el estándar en lo que a conexión remota se refiere, de ahí que muchos de los ataques se dirijan específicamente a este servicio. En entradas anteriores hemos visto como proteger una máquina contra un ataque basado en diccionario, utilizando el paquete Denyhosts:

http://joservilas.blogspot.com/2006/07/denyhosts-no-ms-flood-mi-sshd.html

Ahora veremos como efectuar una configuración muy simple pero a la vez segura para optimizar el acceso al servicio, toqueteando el fichero de configuración /etc/ssh/sshd_config:

Lo primero será deshabilitar el acceso del superusuario (root) de forma remota

PermitRootLogin no

o, si lo queremos, dejar que acceda pero nunca mediante password, obligándolo a utilizar un juego de claves ssh que se deberán almacenar en /root/.ssh/authorised_keys o en el propio fichero de configuración

PermitRootLogin without-password


Siguiendo con la misma política, será interesante indicar (si el número no es grande) los usuarios que pueden acceder al sistema, en lugar de permitirlos todos añadiendo la(s) línea(s)

AllowUsers nombre_de_usuario
AllowUsers jose
AllowUsers pepe
...


y aunque el valor "PermitRootLogin" esté marcado como "yes", si no marcamos una línea "AllowUsers root", el sistema no validará al superusuario.

Como complemento a este parámetro, podemos especificar la(s) máquina(s) desde la(s) que podremos acceder, denegando los restantes intentos

AllowUsers jose@172.16.0.5
AllowUsers jose@mustafar
AllowUsers jose@mi_isp.mi_host.com
...


apartado en el que se pueden utilizar comodines

AllowUsers jose@192.168.*
...


Por último, es muy probable que no se necesite autentificación PAM, salvo que utilicemos un servidor LDAP o similar, con lo que no está de más deshabilitar esta entrada (ya que OpenSSH sabe de sobra donde validar usuarios)

UsePam no

Como complemento, podremos utilizar DenyHosts, TcpWrappers o forzar la validación mediante pares de certificados, pero tal cual, ya se trata de una configuración realmente segura (salvo la predecible posibilidad que se deriva de la "mala praxis" de acceder desde redes no fiables con el riesgo de un ataque spoofing).

1.2.08

Python: Crear una clase de properties

Si se ha trabajado con otros lenguajes de programación orientados a objetos como Java o .NET, probablemente se estará acostumbrado al uso de clases con properties para, por ejemplo, construir modelos de datos.
Python se comporta exactamente igual, con la salvedad que no existen palabras reservadas para este efecto como el caso de .NET (recomiendo la lectura del artículo de Guido: Unifying types and classes in Python)

Veamos un ejemplo simple sobre como crear un modelo de datos para una persona utilizando Python, que derive de un objeto (por definir):

class persona(objeto):
   def __init__(self):
      self.nombre = ""
      self.apellido1 = ""
      self.apellido2 = ""
   def _setNombre(self,valor):
      self.nombre = valor
   def _setPrimerApellido(self,valor):
      self.apellido1 = valor
   def _setSegundoApellido(self,valor):
      self.apellido2 = valor
   def _getNombre(self):
      return self.nombre
   def _getApellidos(self):
      return self.apellido1 + " " + self.apellido2
   def _getPropiedadSoloLectura(self):
      return "Valor de solo lectura"

30.1.08

Python: Validar un NIF o un CIF

He aquí una clase importable muy útil con el algoritmo para validar CIFs y NIFs. Tiene un único método para la validación, en el que devuelve un tipo Boolean:

http://www.nomorepasting.com/getpaste.php?pasteid=10745


29.1.08

Carpetas compartidas con Windows en 1 minuto

En la red hay mil y un tutoriales sobre como instalar un servidor Samba para disponer de recursos compartidos con Windows, pero todos ellos orientados a la gestión de usuarios con o sin PDC.
Este pequeño tutorial nos va a permitir compartir en un minuto o menos un directorio de nuestro Linux con permisos de lectura/escritura para todos los usuarios que estén en nuestra red, sin que se tenga que poner una contraseña.

1.- Instalar samba

apt-get install samba

2.- OPCIONAL. Crear el directorio que queremos compartir y permitir el acceso a todo el mundo

mkdir /home/compartido
chown nobody:nogroup /home/compartido
chmod -R 777 /home/compartido


3.- Editar el fichero de configuración de Samba /etc/samba/smb.conf y tocar los siguientes parámetros del apartado [GLOBAL] (si no existen, crearlos y si están comentados por un ; o un #, quitar el comentario)

workgroup = MI_GRUPO_TRABAJO

netbios name = Mi nombre de servidor

security = share

admin users = administrador guest


4.- Al final del archivo de configuración /etc/samba/smb.conf añadir el nuevo recurso compartido


[compartido]
comment = Archivos Compartidos
path = /home/compartido
browseable = yes
writable = yes
public = yes
guest ok = yes
create mask = 0777
directory mask = 0777


5.- Reiniciar Samba

/etc/init.d/samba restart


Listo! A disfrutar de nuestro nuevo recurso de red.

MySQL: Seguridad básica

Cuando hablamos de asegurar un servicio se suele entender como tal el filtrar el acceso no deseado al mismo mediante reglas de firewall. En general, servidores de uso no corporativo, utilizarán configuraciones de seguridad por defecto que, si van a ser accesibles por un colectivo, pueden no ser las adecuadas.
Veamos un juego de reglas básico para asegurar una instalación por defecto de MySQL Server:

1) Asociar el servicio al dispositivo(s) de red adecuado bind-address=127.0.0.1, denegando el acceso a otras redes, de haberlas. Establecer las reglas de firewall que se consideren adecuadas para la gestión del mismo.

2) Eliminar los comodines de las tablas de acceso (GRANT). Jamás permitir contraseñas en blanco o comodines en la creación de permisos de acceso a usuarios y asegurarse de que cada usuario accede únicamente a las tablas necesarias.

3) Requerir el uso de contraseñas seguras, eliminando la contraseña en blanco por defecto para root. Utilizar la opción --secure-auth para prevenir el uso de passwords crackeables.

4) Revisar los permisos de los ficheros de configuración. Aunque se acelera el acceso, no conviene guardar las configuraciones en ficheros individuales por usuario, ya que al hacerlo así, se almacenan en texto plano. En este supuesto, deben asegurarse los ficheros con permisos 600.

5) Prevenir los sniffers con cifrado en el acceso cliente/servidor, habilitando SSL en la configuración de MySQL o con un tunel SSH.

6) Deshabilitar el acceso remoto, con firewall (punto 1) y arrancando el servicio con la opción --skip-networking

7) Revisar periódicamente los logs

Con este juego de medidas básicas podemos disponer de un servidor fiable y robusto.