Algo de Linux: 2013

viernes, 20 de diciembre de 2013

THE DEBIAN ADMINISTRATOR'S HANDBOOK

Para los que trabajamos habitualmente administrando Debian, es imprescindible tener el Debian Administrator's Handbook a mano.

Si queréis descargar la versión PDF del libro en español, podéis hacerlo desde aquí: 
Si queréis la versión EPUB del libro en español:
Si queréis la versión MOBI del libro en español:


Para descargar versiones en otros idiomas:

Publicado por primera vez en http://enavas.blogspot.com.es

Configurar Link Aggregation en switch TP-LINK TL SG3210

Si queréis hacer bonding en vuestro servidor nfs, no es suficiente con realizar la configuración en el servidor. También tenéis que configurar los puertos del switch al que están conectadas las tarjetas de red para formar una agrupación de puertos (Link Aggregation) para que el switch sepa cómo debe actuar con esos puertos. Evidentemente, para hacer ésto, debéis tener un switch gestionable.

A continuación os muestro cómo configurar la agrupación de puertos en el switch TP-LINK TL SG3210:


Es muy sencillo. Basicamente se trata de dar un nombre al grupo de puertos, marcar los puertos que pertenecen a dicho grupo y guardar la configuración.

Ojo, como podéis ver en la imagen anterior, no es recomendable mezclar puertos de 100Mb y 1000Mb en una agrupación de puertos.


Como podéis deducir de la imagen, mi servidor tiene dos tarjetas de red conectadas a los puertos 2 y 3 del swich funcionando con bonding.

Publicado por primera vez en http://enavas.blogspot.com.es

El shell de linux: Usando variables con el comando sed

Imaginemos que, mediante el comando ip almacenamos en una variable la dirección de red de nuestra máquina. Por ejemplo, si ejecutamos:

# ip route | grep -oiE '([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]{1,2}'

Obtendremos una salida parecida a ésta:

192.168.1.0/24

Si almacenamos el resultado en una variable:

# RED = `ip route | grep -oiE '([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]{1,2}'`

Y queremos usar dicha variable para sustituir un patrón con el comando sed, de la siguiente manera:

# sed -i "s/NETWORK/$RED/g" fichero.conf 

Obtendremos un error. 

Para solucionarlo, lo mejor es utilizar una sintaxis alternativa:

# sed -i "s|NETWORK|$RED|g" fichero.conf 

Publicado por primera vez en http://enavas.blogspot.com.es

martes, 17 de diciembre de 2013

Borrar copias de seguridad antiguas

Para hacer copias de seguridad uso rsync (http://enavas.blogspot.com.es/2008/01/copias-de-seguridad-incrementales-con.html). Es cómodo, sencillo y me facilita las búsquedas a la hora de recuperar archivos.

Con este sistema de copias de seguridad, por cada máquina de la que hacemos copia, se guarda:
  • Un directorio main con las copias actualizadas del sistema.
  • Y un directorio nombrado mediante fecha con las modificaciones por cada día en que hubo cambios.
Para borrar copias de seguridad antiguas, podemos usar el comando find desde un script lanzado desde cron. Como es más fácil verlo con un ejemplo, os muestro mi script de borrado de copias de seguridad:

#!/bin/bash

# Primero borra copias de mas de 60 días del servidor nfs
find /var/ies_backups/servidor/ -maxdepth 1 -mtime +60 -not -iname main -exec rm -rf {} +;
# Para ver las copias que se van a eliminar: find /var/ies_backup/servidor/ -maxdepth 1 -mtime +60 -not -iname main -exec echo {} +;

# Luego borra copias de mas de 60 días del servidor ldap
find /var/ies_backups/ldap/ -maxdepth 1 -mtime +60 -not -iname main -exec rm -rf {} +;
# Para ver las copias que se van a eliminar: find /var/ies_backup/ldap/ -maxdepth 1 -mtime +60 -not -iname main -exec echo {} +;

# Luego borra copias de mas de 60 días del servidor recursos
find /var/ies_backups/recursos/ -maxdepth 1 -mtime +60 -not -iname main -exec rm -rf {} +;
# Para ver las copias que se van a eliminar: find /var/ies_backup/recursos/ -maxdepth 1 -mtime +60 -not -iname main -exec echo {} +;

# Luego borra copias de mas de 60 días del servidor freeradius
find /var/ies_backups/a22-pro/ -maxdepth 1 -mtime +60 -not -iname main -exec rm -rf {} +;

# Para ver las copias que se van a eliminar: find /var/ies_backups/a22-pro/ -maxdepth 1 -mtime +60 -not -iname main -exec echo {} +;

Analicemos uno de los comandos de borrado paso a paso:

# find /var/ies_backups/servidor/ -maxdepth 1 -mtime +60 -not -iname main -exec rm -rf {} +;

En este ejemplo estamos buscando con una profundidad de subdirectorio de 1 (-maxdepth 1), aquellos archivos/directorios que tengan más de 60 días de antiguedad (-mtime +60), excluyendo el archivo/directorio main (-not -iname main) y los borramos (-exec rm -rf {})

Fijaos lo útil que pueden ser los parámetros -iname y -not.
  • Con -iname "patrón" puedo indicar un patrón de búsqueda. Por ejemplo, si indico como patrón -iname 2013-11*, buscaré los archivos que tengan como nombre 2013-11 seguido de cualquier cadena de caracteres, lo que, en este caso, se traducirá en encontrar los directorios de copias de seguridad de noviembre de 2013.
  • Con -not simplemente voy a indicar una negación para que la búsqueda me devuelva lo contrario del patrón indicado en -iname.
Publicado por primera vez en http://enavas.blogspot.com.es

Paquetes de firefox 26.0 para instalar en las máquinas de los IES

Aquí tenéis los paquetes de 32 y 64 bits creados "de forma rápida" para instalar firefox 26.0 en el directorio /opt/firefox/ de las máquinas del instituto. 

Importante: Estos paquetes tan sólo colocan firefox en /opt/firefox/. No cambian el enlace de /usr/bin/iceweasel a /opt/firefox/firefox para que se siga pudiendo usar iceweasel como navegador por defecto. 

Para realizar el cambio de iceweasel a firefox o firefox a iceweasel, tengo dos tareas puppet:
  • activa-firefox 
  • activa-iceweasel 
De este modo, si quiero que los portátiles, los servidores ltsp o los workstation usen firefox, les pongo la tarea activa-firefox y si quiero que usen iceweasel, les pongo la tarea activa-iceweasel.

Publicado por primera vez en http://enavas.blogspot.com.es

lunes, 16 de diciembre de 2013

Comprobar la fecha de expiración de un certificado de un servidor

Si queréis comprobar la fecha de expiración de un certificado de un servidor no tenéis más que ejecutar lo siguiente, sustituyendo "nombreservidor" por el nombre del servidor y "puerto" por el puerto en el que escucha:

# echo | openssl s_client -connect nombreservidor:puerto 2>/dev/null | openssl x509 -noout -dates

Por ejemplo, si queréis comprobar la validez del certificado que tiene vuestro servidor puppet, no tenéis más que ejecutar:

# echo | openssl s_client -connect servidor:8140 2>/dev/null | openssl x509 -noout -dates

Y obtendréis una salida parecida a ésta:

notBefore=Jan 13 11:49:58 2009 GMT
notAfter=Jan 12 11:49:58 2014 GMT

Como podéis ver, el certificado de mi servidor puppet expira el 12 de enero de 2014. Así que me apunto la fecha para volver a generarlo cuando caduque.

Publicado por primera vez en http://enavas.blogspot.com.es

sábado, 14 de diciembre de 2013

Compartir la gestión de paquetes mediante pkgsync

Como ya hemos visto en el post anterior (http://enavas.blogspot.com.es/2013/12/gestion-de-paquetes-mediante-pkgsync.html), pkgsync es de lo más útil para mantener uniformidad en el software que tenemos instalado en nuestras máquinas, pero además, nos facilita la instalación de software de una manera muy sencilla si gestionamos el archivo /etc/pkgsync/musthave. ¿Por qué? Simplemente porque con poner el nombre de los paquetes que queramos instalar, pkgsync se va encargar de instalarlos él mismo.

El problema que tenemos en nuestro sistema es que el fichero /etc/pkgsync/musthave no lo gestionamos los administradores de los centros. ¿Y qué conlleva ésto? Bueno, pues básicamente dos cosas:

Primero: Que la instalación de software es un poco más incómoda para nosotros, porque tenemos que poner el nombre del paquete a instalar en el archivo /etc/pkgsync/mayhave de las máquinas, y luego, hacer una tarea puppet que lo instale.
Segundo: Que el proceso de instalación de software no sea todo lo eficiente que podría ser. ¿Y por qué? 
  • Porque puede coincidir que se estén instalando paquetes mediante pkgsync y al mismo tiempo se ejecuten tareas de puppet que instalan software. En cuyo caso, en ese momento, todas esas tareas fallarán porque el sistema de gestión de paquetes estará ocupado mediante pkgsync.
  • O puede que suceda justo lo contrario: Que se estén ejecutando tareas de puppet que instalan software mientras se lanza pkgsync, en cuyo caso, la instalación de software mediante pkgsync va a fallar porque porque el sistema de gestión de paquetes estará ocupado mediante las tareas puppet.

Para solucionar ambos problemas he modificado pkgsync de manera que se sigan gestionando los archivos musthave, mayhave y maynothave como hasta ahora, pero que yo pueda tener también mis propios ficheros musthave.ies, mayhave.ies y maynothave.ies, de tal manera que, cuando se ejecute pkgsync, se fusionen del siguiente modo:
  • musthave + musthave.ies > musthave.all 
  • mayhave + mayhave.ies > mayhave.all 
  • maynothave + maynothave.ies > maynothave.all 
Así, yo podré instalar fácilmente nuevos paquetes con tan sólo añadirlos al archivo musthave.ies y no tendré que hacer tareas de instalación de paquetes, con lo que evitaré el problema de eficiencia que comentaba.

#! /bin/bash
#
# pkgsync - Automated package synchronization tool
# 2004-2007 Steinar H. Gunderson <sgunderson bigfoot.com>.
# Modificado: 11/12/2013 Esteban M. Navas Martín <algodelinux gmail.com>
#
# Permite fusionar los archivos musthave, maynothave y mayhave gestionados
# por la sección de administración de sistemas con los archivos
# musthave.ies, maynothave.ies y mayhave.ies gestionados por el administrador
# informático del centro, fusionándolos en los siguientes archivos:
# musthave.all, maynothave.all y mayhave.all
# Con ésto facilitamos una gestión compartida
#
# Licensed under the GNU GPL version 2, as publicshed by the FSF;
# see /usr/share/common-licenses/GPL-2 on Debian systems or visit
# www.fsf.org.
#

set -e
set -o noglob
export DEBIAN_FRONTEND=noninteractive
export VERSION=1.21

if [ ! -r /etc/pkgsync/musthave -o \
     ! -r /etc/pkgsync/mayhave -o \
     ! -r /etc/pkgsync/maynothave ]; then
 echo Error: Missing files in /etc/pkgsync. Aborting.
 echo 
 echo Please see /usr/share/doc/pkgsync/README.Debian for information on 
 echo configuring pkgsync.
 
 exit 1
fi

print_help () {
 echo "pkgsync $VERSION"
 echo "Automated package synchronization tool"
 echo ""
 echo "Usage: pkgsync [OPTIONS]"
 echo "Recognized options:"
 echo "  -h, --help           display this help and exit"
 echo "  -k, --keep-unused    don't remove unused packages"
 echo "  -s, --simulate       don't do anything, just print out what would have happened"
 echo "  -d, --dpkg-glob      use dpkg's globbing (deprecated)"
 echo "  -a, --aptitude-glob  use aptitude's globbing (default, recommended)"
 echo ""
 echo "Complete documentation can be found in /usr/share/doc/pkgsync/README.Debian."
}

# Largely adapted from /usr/lib/getopt/parse.bash
parse_options () {
 TEMP=`getopt -o hksad --long help,keep-unused,simulate,dpkg-glob,aptitude-glob -n 'pkgsync' -- "$@"`
 eval set -- "$TEMP"

 APTITUDE_ARGS="-y -q -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold"
 GLOB_STYLE="aptitude"

 while :; do
  case "$1" in
   -s|--simulate)
    APTITUDE_ARGS="$APTITUDE_ARGS -s"
    shift
    ;;
   -k|--keep-unused)
    APTITUDE_ARGS="$APTITUDE_ARGS -o Aptitude::Delete-Unused=false"
    shift
    ;;
   -d|--dpkg-glob)
    GLOB_STYLE="dpkg"
    shift
    ;;
   -a|--aptitude-glob)
    GLOB_STYLE="aptitude"
    shift
    ;;
   -h|--help)
    print_help
    exit 0
    ;;
   --)
    shift
    break
    ;;
   *)
    echo "Internal error: doesn't recognize argument '$1'"
    exit 1
    ;;
  esac
 done
}
readpkgs () {
 grep -vE '^#' "$1" | grep -vE '^\s*$' || true
}
getpkgs () {
 IFS="
"
 for pkg in $( readpkgs $1 ); do
  # if the line starts with "debtags:", it's a debtags expression,
  # so run it through debtags.
  if echo "$pkg" | grep -Eq '^debtags:'; then
   if ! [ "$USE_DEBTAGS" ]; then
    echo Error: "debtags:" line encountered, but debtags is not installed. Stopping.
    exit 1
   fi
   PATTERN=$( echo "$pkg" | cut -d: -f2- )
   debtags grep "$PATTERN" | tagcoll copy | cut -d: -f1
  else
   # if the line is "meta:current-kernel", use the kernel package
   # for the currently running kernel, if it exists
   if [ "$pkg" = "meta:current-kernel" ]; then
    KVERS=$( uname -r )
    if [ "$GLOB_STYLE" = "dpkg" ]; then
     dpkg-query --showformat '${Package}\n' -W "*-image-$KVERS" 2>/dev/null || true
    else
     aptitude -F '%p' search ".*-image-$KVERS" | sed "s/ \+$//" 2>/dev/null || true
    fi
   else
    # if there's a wildcard in this, push it through dpkg/aptitude
    # to glob. if not, just print it out.
    if [ "$GLOB_STYLE" = "dpkg" ]; then
     if echo "$pkg" | grep -Eq '[][*?]'; then
      dpkg-query --showformat '${Package}\n' -W "$pkg" 2>/dev/null || true
     else
      echo "$pkg"
     fi
    else
     if echo "$pkg" | grep -Eq '[][*?()|~]'; then
      aptitude -F '%p' search "$pkg" | sed "s/ \+$//" 2>/dev/null || true
     else
      echo "$pkg"
     fi
    fi
   fi
  fi
 done
}
run_aptitude () {
 echo RUNNING: aptitude $APTITUDE_ARGS "$@"
 aptitude $APTITUDE_ARGS "$@" 
}
run_debtags () {
 if [ "$USE_DEBTAGS" ]; then
  echo RUNNING: debtags "$@"
  debtags "$@" 
 fi
}

# The beautiful look of hacks in the morning...
filter () { 
 echo "$@" | tr " " "\n" | sort | uniq -c | grep "     2" | cut -c9-
}

parse_options "$@"

# Check if we've got debtags installed
[ -x /usr/bin/debtags ] && USE_DEBTAGS=yes

# Update the package lists
aptitude update
run_debtags update

# Create ies files if they don't exists
test -f /etc/pkgsync/musthave.ies || touch /etc/pkgsync/musthave.ies
test -f /etc/pkgsync/maynothave.ies || touch /etc/pkgsync/maynothave.ies
test -f /etc/pkgsync/mayhave.ies || touch /etc/pkgsync/mayhave.ies

# Merge files 
sort -o /etc/pkgsync/musthave.all /etc/pkgsync/musthave /etc/pkgsync/musthave.ies
sort -o /etc/pkgsync/maynothave.all /etc/pkgsync/maynothave /etc/pkgsync/maynothave.ies
sort -o /etc/pkgsync/mayhave.all /etc/pkgsync/mayhave /etc/pkgsync/mayhave.ies

# Find out what parameters to give to aptitude.
installed=$( dpkg -l | grep '^ii' | cut -c5- | cut '-d ' -f1 )
musthave_install=$( getpkgs /etc/pkgsync/musthave.all | sort -u | sed "s/$/+/" )
maynothave_remove=$( getpkgs /etc/pkgsync/maynothave.all | sort -u | sed "s/$/-/" )
mayhave_marknonauto=$( getpkgs /etc/pkgsync/mayhave.all | sort -u | sed "s/$/\&m/" )
mustormayhave=$( ( getpkgs /etc/pkgsync/musthave.all ; getpkgs /etc/pkgsync/mayhave.all ) | sort -u )
rest_markauto=$( filter $installed $installed $mustormayhave | sed "s/$/\&M/" )

run_aptitude full-upgrade '?upgradable' $musthave_install $maynothave_remove $mayhave_marknonauto $rest_markauto
run_aptitude autoclean

Aquí tenéis el enlace al paquete, por si queréis probarlo: https://copy.com/uCvXJ6cAEXu9

Como siempre, recomiendo leerlo y entender lo que hace antes de aplicarlo.

Publicado por primera vez en http://enavas.blogspot.com.es

Gestión de paquetes mediante pkgsync

pkgsync es una herramienta muy útil cuando tenemos que administrar muchos equipos y mantener una uniformidad en el software que éstos tienen instalado. Además, la administración de pkgsync es bastante sencilla porque se basa en tres ficheros: 
  • /etc/pkgsync/musthave: Contiene una lista de los paquetes que debe tener instalado la máquina. 
  • /etc/pkgsync/mayhave: Contiene una lista de los paquetes que puede tener instalado la máquina. 
  • /etc/pkgsync/maynothave: Contiene una lista de de los paquetes que no debe tener instalado.
De este modo, si colocamos el nombre de un paquete en el fichero /etc/pkgsync/musthave (uno por línea), pkgsync se encargará de que dicho paquete sea instalado.

Del mismo modo, si colocamos el nombre de un paquete en el fichero /etc/pkgsync/mayhave, pkgsync no instalará el paquete, pero permitirá que el paquete sea instalado por el usuario.

Por último, si colocamos el nombre de un paquete en el fichero /etc/pkgsync/maynothave, pkgsync se encargará de desinstalarlo.

Una vez que tenemos creados nuestros archivos, si queremos simular la ejecución de pkgsync, sin llegar a ejecutarlo, podemos lanzar pkgsync con el parámetro -s:

# pkgsync -s

Otra cuestión que me parece interesante destacar es que podemos usar comodines para referirnos a un conjunto de paquetes que tienen un patrón en común. Por ejemplo, si tenemos un fichero /etc/pkgsync/mayhave con el siguiente contenido:

libreoffice4.1
libreoffice4.1-*
libobasis4.1-*

Con ésto permitiremos instalar el paquete llamado "libreoffice4.1", todos los paquetes que comiencen por "libreoffice4.1-" y todos los paquetes que comiencen por "libobasis4.1-". En definitiva, permitiremos instalar todos los paquetes de libreoffice4.1.

Y por mencionar algo más, decir que podemos usar comentarios en estos ficheros, comenzando la línea por un caracter # y que las líneas en blanco son ignoradas.


Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 12 de diciembre de 2013

Instalar un servidor tftpd para actualizar firmwares

Al hilo del tema de actualización de los switches Dlink DES-3226, alguien me preguntaba por una forma sencilla y rápida de instalar un servidor tftp.

La más sencilla que se me ocurre es instalar tftpd:

# apt-get install tftpd

tftpd va a configurar el servicio vía inetd y podremos usarlo directamente sin tocar ningún fichero de configuración.

Por defecto, tftpd sirve los ficheros desde el directorio /srv/tftp. Así que es allí donde tendremos que colocar los archivos que queramos proporcionar a los clientes. Si queréis cambiar la ubicación, no tenéis más que editar el fichero /etc/inetd.conf y cambiarlo en la línea que he resaltado en color rojo:

# /etc/inetd.conf:  see inetd(8) for further informations.
#
# Internet superserver configuration database
#
#
# Lines starting with "#:LABEL:" or "##" should not
# be changed unless you know what you are doing!
#
# If you want to disable an entry so it isn't touched during
# package updates just comment it out with a single '#' character.
#
# Packages should modify this file by using update-inetd(8)
#
#       
#
#:INTERNAL: Internal services
#discard                stream  tcp     nowait  root    internal
#discard                dgram   udp     wait    root    internal
#daytime                stream  tcp     nowait  root    internal
#time           stream  tcp     nowait  root    internal

#:STANDARD: These are standard services.

#:BSD: Shell, login, exec and talk are BSD protocols.

#:MAIL: Mail, news and uucp services.

#:INFO: Info services

#:BOOT: TFTP service is provided primarily for booting.  Most sites
#       run this only on machines acting as "boot servers."
tftp            dgram   udp     wait    nobody  /usr/sbin/tcpd  /usr/sbin/in.tftpd /srv/tftp

#:RPC: RPC based services

#:HAM-RADIO: amateur-radio services

#:OTHER: Other services

Si hacéis cambios en /etc/inetd.conf, recordad reiniciar el servicio:

# killall -HUP inetd

Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 11 de diciembre de 2013

Restaurar el sistema de vuestro portátil Acer con D2D Recovery

D2D Recovery (o Disk to Disk Recovery) es la herramienta de Acer que os va permitir restaurar el sistema operativo de vuestro portátil al estado de fábrica. La principal ventaja que nos aporta es que vamos a poder restaurar la configuración del equipo a los valores predeterminados sin necesidad de utilizar un CD o DVD de recuperación.

 Para activar D2D Recovery:
  1. Encendemos nuestro portátil y pulsamos "F2" durante el comienzo del proceso de arranque para entrar en la BIOS. 
  2. Una vez dentro, nos desplazamos hasta abajo en la pantalla principal y seleccionamos la opción "D2D Recovery".
  3. Una vez seleccionada, pulsamos la tecla "Enter" y elegimos la opción "Enabled" (activado) para activar este modo.
  4. Por útimo, pulsamos la tecla "F10" para guardar los cambios y salir de la configuración del BIOS. Y nuestro portátil se reiniciará.
 A partir de este momento, podremos entrar en el sistema de recuperación de Acer, pulsando la combinación de teclas "Alt" + "F10" durante el inicio del sistema para entrar en el eMachines Recovery Mode (modo de recuperación).

Y siguiendo las instrucciones que se muestran en pantalla podremos restaurar el sistema a los valores predeterminados de fábrica.

Publicado por primera vez en http://enavas.blogspot.com.es

Actualizar firmware switches Dlink DES-3226

Al hilo del artículo Proceso de actualización del firmware del switch Dlink DES-3226, alguien me ha preguntado si tenía que montar el servidor tftp para actualizar sus switches.

Como estos swiches no permiten más que un modo de actualización vía tftp, podéis hacerlo sin ningún problema usando el servidor atftpd de cualquier servidor ltsp del centro. Lo único que tenéis que hacer es copiar el archivo con el firmware en el directorio /var/lib/tftpboot del servidor de terminales que vayáis a utilizar.


Publicado por primera vez en http://enavas.blogspot.com.es

martes, 10 de diciembre de 2013

Proceso de actualización del firmware del switch Dlink DES-3226

Aprovechando que alguien me lo ha pedido y tenía que actualizar uno de mis switches, aquí podéis ver el proceso de actualización paso a paso de un Swich Dlink DES-3226, vía telnet:

Primero.- Nos conectamos al dispositivo e introducimos usuario y contraseña:


Segundo.- Entramos en el apartado "System Utilities".


Tercero.- Seleccionamos la opción "Upgrade Firmware from TFT Server". Es necesario tener un servidor TFTP para actualizar estos switches.


Cuarto.- Introducimos la IP del servidor TFTP y el nombre del fichero con el firmware, seleccionamos "APPLY" y pulsamos la tecla "Enter" para aplicar. Previamente, habremos almacenado el fichero con el firmware en el servidor TFTP: 


Si lo almacenamos dentro de algún subdirectorio donde se ubican los archivos, tendremos que especificarlo.

Quinto.- Seleccionamos "START" y pulsamos la tecla "Enter" para  iniciar el proceso de actualización:



Veremos cómo se descarga el firmware desde el servidor TFTP al swich:


Una vez terminado el proceso, el switch se reiniciará:


Y ya podremos entrar en su configuración vía web mediante el navegador:


Aquí se puede ver que, al terminar el proceso, el firmware se ha actualizado a la versión 6.00.133:


Publicado por primera vez en http://enavas.blogspot.com.es

lunes, 9 de diciembre de 2013

El shell de Linux: Crear un fichero si no existe desde un script

En Linux hay muchas formas de hacer las cosas. Una forma muy sencilla de crear un fichero desde un script, si éste no existe es la siguiente:

# test -f fichero || touch fichero

Si os dáis cuenta estamos usando un OR. De este modo:
  • Si el fichero existe, no se crea. 
  • Y si no existe, se crea.

Publicado por primera vez en http://enavas.blogspot.com.es

viernes, 6 de diciembre de 2013

NowMyMail: Correo temporal

A veces, algunos servicios nos obligan a indicar una dirección de e-mail. Si no queremos proporcionar nuestro correo habitual, podemos hacer uso de NowMyMail, un servicio con el que conseguiremos una dirección de correo temporal para usar en el momento; por decirlo de algún modo, una dirección de "usar y tirar":



Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 5 de diciembre de 2013

Problemas de reinicio Swich Dlink DES-3226

Esta última semana hemos tenido muchos problemas con un Switch Dlink DES-3226 al configurar una VLAN para telefonía y activar el STP. La cuestión es que el switch se reiniciaba una y otra vez sin motivo aparente y sin mostrar ningún error. 

Después de probar muchas cosas, dando palos de ciego, entre ellas cambiar el switch, parece que el problema se ha resuelto actualizando el firmware del dispositivo. 

Por lo que he podido ver todos los switches Dlink DES-3226 que están montados, tienen la versión 4.00.081 del firmware:


He actualizado el firmware del Dlink DES-3226 que daba problemas a la versión 6.00.133, y, después de algo más de tres horas no ha vuelto a tener ningún reinicio, así que supongo que se reniciaba por algún bug.


Seguiré comprobando su evolución, y, si todo va bien, actualizaré el resto a la misma versión.

Por si tenéis que buscar alguna actualización o información acerca de alguno de vuestros dispositivos Dlink, aquí dejo el enlace del ftp de Dlink Europa: ftp://ftp.dlink.eu/

Por cierto, para actualizar este switch es necesario disponer de un servidor tftp.

Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 28 de noviembre de 2013

Configurar Switch OvisLink FSH-2402GW por primera vez



La IP por defecto de este swich es 192.168.0.100. Por lo tanto, para configurarlo por primera vez, tendremos que conectarlo a un equipo y configurarlo con una IP dentro de dicho rango.

Una vez hecho ésto, abrimos el navegador y escribimos la IP del switch en la barra de direcciones:


El usuario administrador es 'admin' y su password por defecto 'ovislink'. Lo introducimos y entraremos en la configuración:


Una vez dentro, lo primero que debemos hacer es cambiar la password del administrador y configurar el switch con una IP fija dentro de nuestro rango para que podamos gestionarlo de forma remota:


Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 27 de noviembre de 2013

Matar procesos de usuario y limpiar archivos temporales en servidores LTSP

Cuando un usuario inicia sesión, a medida que va abriendo aplicaciones se van creando procesos y más procesos. Además, cuando inicia sesión en un thinclient, se crean archivos temporales en el directorio /tmp del servidor de terminales.  Si todo va bien, cuando cierre la sesión, todos sus procesos se cerrarán, aunque es posible que los archivos del directorio /tmp permanezcan por si el usuario vuelve a iniciar sesión. 

Pero, ¿qué sucede si el usuario apaga bruscamente el terminal desconectándolo de la corriente? ¿Y si el equipo se bloquea por algún motivo? En ese caso, lo más probable es que sus procesos queden abiertos en el servidor LTSP, creándonos casi seguro algún tipo de problema.

Para limpiar los procesos y los archivos temporales de un usuario que, en un momento determinado, no se encuentra activo en el sistema preparé el siguiente script que se ejecuta en el servidor de terminales:

#!/bin/bash
#
# Este script  elimina los ficheros temporales de los usuarios que no están activos en el sistema
# Esteban M. Navas Martín
# 20/06/2013

# Obtenemos la lista de usuarios que han iniciado sesión en terminales
w | grep '192.168.0' > /tmp/userstoclean

# Para cada usuario que haya iniciado sesión en un terminal...
while read SESION ; do

   USUARIO=`echo $SESION | cut -f1 -d" "`

   IP=`echo $SESION | cut -f3 -d" "`
   SESIONKO=`arp -i eth0 | grep 'incomplete' | grep $IP`

   if [ ! -z "$SESIONKO" ]; then
      # Borramos los temporales creados al iniciar sesión los usuarios en los terminales
      find /tmp -not -user root -user $USUARIO -exec rm -r {} \; 2>/dev/null

      # Matamos todos los procesos del usuario
      pkill -9 -u $USUARIO
   fi
done < /tmp/userstoclean

rm /tmp/userstoclean

Para que se ejecute de forma periódica cada cierto tiempo, no tenemos más que poner una tarea cron mediante puppet.

La idea de este script es examinar en la tabla ARP del servidor de terminales aquellas entradas que correspondan al interfaz que da servicio a los terminales, que en nuestro caso es eth0 y comprobar que en la entrada figura que la resolución IP - MAC está incompleta. Si no hay resolución y hay un usuario en el sistema que inició sesión en la red "192.168.0", podemos matar sus procesos porque el usuario no está logueado.

Dejo aquí el enlace del script, por si queréis descargarlo: cleantmpinactiveusers.

Publicado por primera vez en http://enavas.blogspot.com.es

Modificado el script apagaterminales.sh

He modificado el script que apaga los thinclients al apagar, reiniciar o cerrar sesión en el servidor LTSP y lo he cambiado en el artículo que ya publiqué en su día sobre este tema para que se muestre la versión actualizada:

http://enavas.blogspot.com.es/2013/05/apagar-automaticamente-thinclients-al.html

El motivo de la actualización ha sido añadir la siguiente mejora: Hacer limpieza en el servidor LTSP borrando los archivos temporales y matando los procesos de aquellos usuarios que hayan iniciado sesión en thinclients.

Publicado por primera vez en http://enavas.blogspot.com.es

lunes, 25 de noviembre de 2013

Personalizar el lanzador de aplicaciones de Google

Supongo que casi todo el mundo conoce el lanzador de aplicaciones de Google, ese icono que os aparece cuando iniciáis sesión y que está compuesto por una matriz de 3x3 cuadritos de color gris. En la siguiente imagen podéis ver a qué me refiero porque os lo he marcado con un círculo rojo:


Este lanzador es tremendamente útil porque, al hacerle un clic, nos va a servir para acceder directamente a otras aplicaciones de Google (También podemos hacer que se despliegue el menú de aplicaciones al pasar el cursor sobre él):

El problema de este lanzador de aplicaciones es que es fijo y no se puede modificar. 

Pues bien. Existe una extensión para Google Chrome, llamada App Launcher Customizer for Google, que nos va permitir cosas bastante interesantes como:
  • Modificar las aplicaciones que queremos mostrar, añadiendo y/o quitando aplicaciones.
  • Reordenarlas para que aparezcan en primer lugar las que más utilizamos.
  • Añadir nuevos lanzadores para otras aplicaciones y páginas web.

Publicado por primera vez en http://enavas.blogspot.com.es

Establecer un proxy en Firefox/Iceweasel

Si queréis configurar Firefox para que use vuestro proxy a la hora de salir a internet, no tenéis que crear un fichero de políticas, como ya vimos en el post http://enavas.blogspot.com.es/2013/11/definir-politicas-en-firefoxiceweasel.html y añadir las siguientes directivas al fichero de configuración:

// Forzar el uso de proxies 
lockPref("network.proxy.type", 1); 
lockPref("network.proxy.http", "172.19.144.3"); 
lockPref("network.proxy.http_port", 3128);

Con las tres directivas anteriores le estamos indicando a Firefox el proxy http que debe usar: 172.19.144.3 y el puerto del mismo: 3128.  Además, como estoy definiendo las directivas con lockPref, el usuario no podrá cambiarlas.

Si en lugar de obligar a usar un proxy, quiero desactivar el uso de proxies, y que se use la configuración por defecto que exista en la red, cambiaré las directivas anteriores por la siguiente:

// Desactivar el uso de proxies 
// lockPref("network.proxy.type", 0);

Publicado por primera vez en http://enavas.blogspot.com.es

viernes, 22 de noviembre de 2013

Recurso para limpiar reports de puppet en el servidor

A continuación os dejo un enlace a un recurso puppet para limpiar los reports de puppet en el servidor: cleanpuppetreports.pp

Éste es su contenido:

# Recurso para limpiar los reports de puppet en el servidor
# Modo de uso: puppet apply cleanpuppetreports.pp
# Es posible especificar segundos, minutos, horas, dias o semanas
# Esteban M. Navas Martín
# IES Valle del Jerte - Plasencia
# 22/11/2013

tidy { "/var/lib/puppet/reports":
age => "1w",
recurse => true,
}

Como podéis ver es muy sencillo y lo único que hace es eliminar los reports de puppet con más de una semana de antigüedad. 
Publicado por primera vez en http://enavas.blogspot.com.es

Definir políticas en Firefox/Iceweasel

Como todos sabéis, es posible modificar ajustes de Firefox o Iceweasel, escribiendo el "comando" about:config en la barra de direcciones de Firefox o Iceweasel. Pero, además, también es posible colocar todos los ajustes que queramos en un fichero de configuración. ¿Para qué? Bueno, pues simplemente para establecer una serie de preferencias para todo usuario que inicie sesión en la máquina donde hemos especificado dichas preferencias.

Veamos cómo hacerlo:

En Firefox, tendremos que colocar un fichero llamado local-settings.js dentro del directorio de preferencias. Por ejemplo, si tenemos instalado firefox en /opt/firefox, colocaremos el fichero en la siguiente ubicación: /opt/firefox/defaults/pref/.

Dentro de  este fichero (/opt/firefox/defaults/pref/local-settings.js) pondremos dos directivas:

# cat /opt/firefox/defaults/pref/local-settings.js

("general.config.obscure_value", 0);
pref("general.config.filename", "firefox.cfg");

Como estamos indicando a Firefox que el fichero de configuración se llama firefox.cfg, tendremos que crear un fichero llamado firefox.cfg dentro del directorio donde hayamos instalado firefox. Por ejemplo: /opt/firefox/firefox.cfg

Una vez hecho ésto, no tendremos más que añadir preferencias dentro de este fichero y se aplicarán a todos los usuarios de la máquina.

Veamos un ejemplo: Si añadimos las siguientes preferencias al fichero /opt/firefox/firefox.cfg le estaremos diciendo a firefox que debe usar como página de inicio la que nosotros le estamos indicando:

// Establecemos la página de inicio
pref("browser.startup.page", 1);
pref("browser.startup.homepage", "http://iesvallejertepla.juntaextremadura.net");

Decir que podemos usar dos tipos de preferencias: "pref" y "lockPref":
  • Si definimos una preferencia como "pref", permitiremos que el usuario pueda cambiarla.
  • Si definimos una preferencia como "lockPref", estará bloqueada y el usuario no podrá cambiarla.
Ejemplo: Podemos establecer como preferencia que se establezca que el papel a usar en el navegador es A4, y que el usuario no pueda cambiarla:

// Definimos como papel por defecto A4
lockPref("print.postscript.paper_size","A4");

Una cuestión importante que me ha dado problemas al actualizar Firefox a la versión 25: Antes podíamos escribir "pref" o "Pref" a la hora de establecer una preferencia. A partir de esta versión, tan sólo se puede escribir "pref" (en minúsculas). No sé si será un bug, pero me ha creado muchos problemas porque el navegador no se abría y mostraba un mensaje un error con el fichero de preferencias.

Si queréis establecer preferencias en Iceweasel, no tenéis más que colocarlas del mismo modo dentro del fichero /etc/iceweasel/pref/iceweasel.js

Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 20 de noviembre de 2013

Actualización del firmware 1.02 de la D5100

Recientemente, Nikon ha publicado una nueva versión del firmware para nuestra Nikon D5100. Esta actualización maximiza el rendimiento de la batería EN-EL14a, permitiendo capturar más imágenes. A continuación os dejo el enlace al artículo en español:


He podido descomprimir el archivo exe en linux sin ningún problema para extraer el firmware.

Publicado por primera vez en http://enavas.blogspot.com.es

martes, 19 de noviembre de 2013

Paquetes de firefox 25.0.1 para instalar en las máquinas de los IES

A continuación dejo dos enlaces para descargar los paquetes de 32 y 64 bits creados "de forma rápida" para instalar firefox 25.0.1 en el directorio /opt/firefox/ de las máquinas del instituto. 

Importante: Estos paquetes tan sólo colocan firefox en /opt/firefox/. No cambian el enlace de /usr/bin/iceweasel a /opt/firefox/firefox para que se siga pudiendo usar iceweasel como navegador por defecto. 

Para realizar el cambio de iceweasel a firefox o firefox a iceweasel, tengo dos tareas puppet:
  • activa-firefox 
  • activa-iceweasel 
De este modo, si quiero que los portátiles, los servidores ltsp o los workstation usen firefox, les pongo la tarea activa-firefox y si quiero que usen iceweasel, les pongo la tarea activa-iceweasel.
Publicado por primera vez en http://enavas.blogspot.com.es

domingo, 17 de noviembre de 2013

Copy: 15 GB iniciales de almacenamiento en la nube

Copy es uno de los servicios de almacenamiento en la nube que me gustaría recomendaros debido a que reúne una serie de características que le otorgan ciertas ventajas sobre otros. Veamos cuáles son:
  • Nos ofrece una capacidad inicial de almacenamiento de 15 GB en las cuentas gratuitas, lo que está francamente bien. Además, si te registras por invitación de otro usuario, conseguirás 5 GB extras. Por si alguien quiere registrarse mediante mi invitación, no tiene más que hacer clic sobre el siguiente enlace: https://copy.com?r=oPhrPU y ambos recibiremos 5 GB más de espacio en nuestra cuenta.
  • Algo que me parece muy importante para los que trabajamos con Linux: Tiene un cliente de sincronización de archivos para Linux, algo que muchos otros servicios de almacenamiento no tienen y que parece que no les interesa tener porque muchos usuarios lo demandan y da la impresión de que hacen caso omiso. Por supuesto tiene también cliente para Mac OS, Windows.
  • También dispone de apps para dispositivos móviles Android, iPhone y Windows Phone.
  • Toda comunicación con el almacenamiento es encriptada mediante SSL. Además los datos se almacenan encriptados con AES 256.
  • Nos permite compartir nuestros archivos de forma pública o privada de una manera muy sencilla. 
En cuanto a la instalación del cliente para linux es muy sencilla:

Descargamos Copy:
# wget http://copy.com/install/linux/Copy.tgz

Lo descomprimimos:
# tar xvzf Copy.tgz


Si nuestro sistema es de 32 bits, entramos dentro de la carpeta x86 e instalamos:
# cd copy/x86
# ./CopyAgent

Si nuestro sistema es de 64 bits, entramos dentro de la carpeta x86_64 e instalamos:

# cd copy/x86_64
# ./CopyAgent

Se nos abrirá una ventana de instalación:


Escribimos nuestro e-mail en el cuadro "User Email" y una contraseña en el campo "Password".

Si ya hemos creado nuestra cuenta, haremos clic en "Login".
Si queremos crear una nueva cuenta, haremos clic en "Create Account".

Una vez hecho ésto, veremos un icono en la barra de tareas como el que os muestro en el círculo de la siguiente imagen:

Además, se creará una carpeta "Copy" en nuestro directorio home, donde copiaremos los archivos para que se sincronicen con el servidor.

Y eso es todo.

Publicado por primera vez en http://enavas.blogspot.com.es

Cambiar display al Galaxy Mini/Galaxy Mini Pop Plus

Si tenéis que cambiar el display de vuestro Galaxy Mini (S5570) o Galaxy Mini Pop Plus (S5570i) os recomiendo ver el siguiente vídeo de José Torrano:

http://www.youtube.com/watch?v=o63q1d9Reu0

En él muestra paso a paso como cambiar el display del S5570. Puesto que ambos dispositivos tienen la misma pantalla, he cambiado el display del S5570i siguiendo sus instrucciones. Gracias por compartirlo!
Publicado por primera vez en http://enavas.blogspot.com.es

sábado, 16 de noviembre de 2013

Filtrar por usuario mediante squid + ldap

Lo más habitual es que utilicemos Squid en modo transparente para filtrar tráfico en nuestra organización y  supongo que se debe a que es la opción que menos trabajo da porque no nos obliga a configurar cada navegador de cada equipo para usar nuestro proxy. No obstante, en ocasiones puede ser muy interesante filtrar en modo no transparente o, si no tenemos posibilidad de cambiarlo todo, usar ambos mecanismos.

Así que, si pensáis en que queréis o necesitáis filtrar por usuario, es imprescindible que éste acceda a internet en modo no transparente. De otro modo, el filtrado por usuario no va a funcionar. ¿Y qué implica ésto? Que el usuario deberá introducir su login y su password cada vez que abra el navegador. Y os dirán que es muy incómodo tener que teclearlo una y otra vez. Bueno, pues les decís que dejen que el navegador guarde los datos de acceso.

Autenticación externa.- 
Para lograr que squid filtre por usuario vamos a utilizar un programa de autenticación externo. Si queréis, podéis escribir vuestro propio programa/script de autenticación externo, pero no os preocupéis porque squid ya nos proporciona unos cuantos.

En Debian, encontraréis los programas de autenticación externos que squid nos proporciona en el directorio /usr/lib/squid/. Como nuestra autenticación está basada en ldap, de todos los programas que hay, usaremos dos:
  • ldap_auth: Para validar usuarios.
  • squid_ldap_group: Para validar grupos.

Validación de usuarios.-
Antes de configurar squid, lo mejor que podemos hacer es utilizar el programa de autenticación externa desde un terminal para comprobar que funcionan las consultas que el programa va a realizar al servidor ldap. Veamos cómo:

Suponiendo que el nombre de nuestro servidor es "ldap", la base del árbol ldap donde se encuentran los usuarios es "ou=People,dc=instituto,dc=extremadura,dc=es" y utilizamos la versión 3 del protocolo LDAP, abrimos un terminal y ejecutamos el programa:

# /usr/lib/squid/ldap_auth -h ldap -b "ou=People,dc=instituto,dc=extremadura,dc=es" -v 3

Al ejecutarlo, el programa quedará esperando a que introduzcamos un usuario y su contraseña, separados por un espacio en blanco.

Si introducimos un usuario y un password válidos en ldap, nos devolverá OK:

root@ldap:~# /usr/lib/squid/ldap_auth -h ldap -b "ou=People,dc=instituto,dc=extremadura,dc=es" -v 3

profesor claveprofesor

OK

Si introducimos un usuario que no existe o el password introducido no es válido en ldap, nos devolverá ERR Success:

root@ldap:~# /usr/lib/squid/ldap_auth -h ldap -b "ou=People,dc=instituto,dc=extremadura,dc=es" -v 3

profesor claveerronea

ERR Success

Cuando terminemos de hacer comprobaciones, pulsamos Ctrl+C y saldremos del programa.

Validación de grupos.-
Además de establecer un control por usuario, puede que nos interese realizar también un control por grupos,  para establecer reglas en squid que controlen el acceso a los contenidos en función del grupo al que pertenece el usuario.
Al igual que en el caso anterior, lo mejor que podemos hacer es utilizar el programa de autenticación externa desde un terminal para comprobar que funcionan las consultas que el programa va a realizar al servidor ldap. Veamos cómo:

Suponiendo que el nombre de nuestro servidor es "ldap", la base del árbol ldap donde se encuentran los grupos es "ou=Group,dc=instituto,dc=extremadura,dc=es" y utilizamos la versión 3 del protocolo LDAP, abrimos un terminal y ejecutamos el programa:

# /usr/lib/squid/squid_ldap_group -h ldap -b "ou=Group,dc=instituto,dc=extremadura,dc=es" -f "(&(objectClass=posixGroup)(cn=%a)(memberuid=%v))" -B "ou=People,dc=instituto,dc=extremadura,dc=es" -v 3 -s sub

Como podéis ver, con el parámetro -f, indicamos el filtro para comprobar que un usuario es miembro de un grupo. Al ejecutarlo, el programa quedará esperando a que introduzcamos un usuario y un grupo, separados por un espacio en blanco.

Si introducimos un usuario y un grupo al que pertenece el usuario, nos devolverá OK:

# /usr/lib/squid/squid_ldap_group -h ldap -b "ou=Group,dc=instituto,dc=extremadura,dc=es" -f "(&(objectClass=posixGroup)(cn=%a)(memberuid=%v))" -B "ou=People,dc=instituto,dc=extremadura,dc=es" -v 3 -s sub

ponente teachers
OK

Si introducimos un usuario que no existe o existe pero no pertenece al grupo introducido, nos devolverá ERR:

# /usr/lib/squid/squid_ldap_group -h ldap -b "ou=Group,dc=instituto,dc=extremadura,dc=es" -f "(&(objectClass=posixGroup)(cn=%a)(memberuid=%v))" -B "ou=People,dc=instituto,dc=extremadura,dc=es" -v 3 -s sub

ponente students

ERR

Cuando terminemos de hacer comprobaciones, pulsamos Ctrl+C y saldremos del programa.

Configurar squid para autenticar usuarios.-
Bien, pues una vez que hemos visto cuáles son los programas de autenticación de usuarios y grupos mediante ldap que squid nos proporciona, ahora vamos a ver cómo configurar squid para autenticar usuarios.

Lo primero que haremos será editar el fichero /etc/squid/squid.conf:

# nano /etc/squid/squid.conf

Una vez abierto, buscamos el TAG: auth_param. Si no lo tenéis porque habéis quitado los comentarios de este fichero, buscadlo en el archivo squid.conf original, que viene completamente comentado, para saber en qué parte del squid.conf debéis insertar las siguientes líneas y las insertamos al final de la sección TAG: auth_param:

auth_param basic program /usr/lib/squid/ldap_auth -h ldap -b "ou=People,dc=instituto,dc=extremadura,dc=es" -v 3
auth_param basic children 5

Como podéis ver, básicamente estamos definiendo el programa que vamos a usar como autenticador y es el mismo que habíamos comprobado que funcionaba desde la línea de comandos.

A continuación nos vamos a la sección del documento donde se definen las ACL. Para ello buscamos el TAG: acl, nos desplazamos al final de esta sección e insertamos la siguiente línea:

# acl ldapauth proxy_auth REQUIRED

Por último, buscamos el TAG: http_access e insertamos una línea como la siguiente:

# http_access allow ldapauth

Esta vez no insertamos la línea al final de la sección. Tendremos que insertarla en el lugar que corresponda de acuerdo con las otras reglas que tengamos establecidas.

Una vez hecho ésto, reiniciamos squid para aplicar los cambios y listo:

# service squid restart

Configurar squid para restringir algunos usuarios.-
Por otra parte, en la sección donde se definen las ACL podríamos definir una nueva como la siguiente:

# acl usuariosrestringidos proxy_auth "/etc/squid/acl/deny_users"

Y en la sección de reglas definir reglas de filtrado para los usuarios que especifiquemos en el archivo /etc/squid/acl/deny_users

Configurar squid para autenticar grupos.-
Con lo expuesto anteriormente, todos aquellos usuarios registrados en el servidor ldap podrán navegar por internet. Eso sí, al abrir el navegador se les solicitará que introduzcan su usuario y contraseña.

Si ahora queremos ir un paso más allá y permitir o denegar que los usuarios de un cierto grupo naveguen o que lo hagan de forma limitada,  vamos a volver a modificar el fichero squid.conf.

# nano /etc/squid/squid.conf

Una vez abierto el fichero, buscamos la regla:

http_access allow ldapauth

Y la comentamos:

# http_access allow ldapauth

A continuación, buscamos el TAG: external_acl_type y al final de esta sección insertarmos lo siguiente:

external_acl_type group_auth %LOGIN /usr/lib/squid/squid_ldap_group -b "ou=Group,dc=instituto,dc=extremadura,dc=es" -f "(&(objectclass=posixGroup)(cn=%a)(memberuid=%v))" -h ldap -B "ou=People,dc=instituto,dc=extremadura,dc=es" -v 3 -s sub

Esta acl externa a la que hemos llamado group_auth, nos va a permitir lograr que squid compruebe si un usuario es miembro de un grupo.

A continuación nos vamos a la sección del documento donde se definen las ACL. Para ello buscamos el TAG: acl, nos desplazamos al final de esta sección e insertamos las acl que queramos. Por ejemplo, podemos especificar una acl para profesores:

# acl profesores external group_auth teachers

Donde, teachers es uno de los grupos registrados en nuestro servidor ldap.

También podríamos crear una acl para usar en reglas de filtrado para alumnos:

# acl alumnos external group_auth students

Por último, buscamos el TAG: http_access e insertamos reglas de filtrado:

http_access allow profesores

Esta vez no insertamos la línea al final de la sección. Tendremos que insertarla en el lugar que corresponda de acuerdo con las otras reglas que tengamos establecidas y dependiendo de cómo queráis filtrar.

Una vez hecho ésto, reiniciamos squid para aplicar los cambios y listo:

# service squid restart

Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 14 de noviembre de 2013

Raspberry Pi como Servidor Radius

Aquí tenéis podéis ver el vídeo del proyecto "Raspberry Pi como Servidor Radius" que Sagrario y yo hemos realizado para el curso "Introducción a Raspberry Pi" de la Universidad Galileo de Guatemala.

Como podéis ver, hemos implementado el servidor freeradius en la Raspberry Pi, de manera que éste utilice los datos de los usuarios del servidor ldap. De este modo, tenemos un dispositivo de bajo coste y reducido consumo funcionando como servidor para proporcionar un acceso inalámbrico seguro a través de wifi.

El 50% de la evaluación depende de los "me gusta de YouTube. Así que, dadle a "me gusta" en YouTube. 



Publicado por primera vez en http://enavas.blogspot.com.es

martes, 12 de noviembre de 2013

Establecer un proxy en Google Chrome

Si queréis configurar el navegador Google Chrome para que use vuestro proxy para salir a internet, no tenéis más que crear un fichero en /etc/opt/chrome/policies/managed/, estableciendo dichas preferencias. 

Un ejemplo:

# cat /etc/opt/chrome/policies/managed/proxy_ies.json
{
   "ProxyMode": "fixed_servers",
   "ProxyServer": "172.19.144.3:3128",
}

Publicado por primera vez en http://enavas.blogspot.com.es

Añadir extensiones a Firefox en /opt/firefox/browser/extensions/

Si tenéis instalado Firefox en /opt/firefox como alternativa a iceweasel, podéis añadirle extensiones colocando los ficheros .xpi en el directorio /opt/firefox/browser/extensions/ 

En particular, tengo instaladas tres extensiones interesantes para optimizar el navegador y reducir el consumo de recursos y ancho de banda:
  • Adblock Plus, para bloquear publicidad.
  • FlashBlock, para evitar la autoreproducción de animaciones flash.
  • MaxTabs, para limitar el número de pestañas que los usuarios pueden abrir.
Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 7 de noviembre de 2013

Definir aplicaciones por defecto en GNOME

En GNOME podemos asociar un tipo de archivo para que se abra con una aplicación determinada cuando el usuario haga clic sobre el archivo. Esta asociación podemos hacerla a nivel de usuarios o a nivel de máquinas. Personalmente, creo que es interesante para nosotros establecer aplicaciones por defecto en cada máquina y permitir que el usuario pueda cambiarlas.

Para establecer aplicaciones por defecto en cada equipo, podemos modificar el archivo /usr/share/applications/defaults.list

Este archivo contendrá una línea o entrada para cada asociación. Cada entrada está formada por un par:
mime-type=lanzador.desktop

donde:

  • mime-type será el tipo mime concreto que queremos asociar con la aplicación. 
  • lanzador.desktop debe ser uno de los lanzadores que hay en el directorio /usr/share/applications.

Para crear un archivo /usr/share/applications/defaults.list podemos tomar como modelo /etc/gnome/defaults, y personalizarlo a nuestro gusto.

Veamos un ejemplo:

Suponiendo que tenemos instalado libreoffice4.1, que queremos que las presentaciones de libreoffice se abran con el programa de presentaciones de libreoffice 4.1,  y que en el directorio /usr/share/applications tenemos un lanzador llamado libreoffice4.1-impress.desktop, para realizar la asociación, añadiríamos una entrada como la siguiente al archivo /usr/share/applications/defaults.list:

application/vnd.oasis.opendocument.presentation=libreoffice4.1-impress.desktop

De este modo, es muy sencillo establecer asociaciones entre tipos mime y aplicaciones para establecer aplicaciones por defecto a nivel de máquina.

Ahora bien, si lo que queremos es establecer una aplicación por defecto tan sólo para un usuario concreto, podríamos hacerlo, añadiendo las entradas al archivo .local/share/applications/mimeapps.list que encontraremos en el directorio HOME del usuario en  cuestión.


Publicado por primera vez en http://enavas.blogspot.com.es

lunes, 4 de noviembre de 2013

Última versión de Iceweasel para Squeeze del Debian Mozilla team: 24

Hasta ahora podíamos actualizar Iceweasel a la última versión desde los repositorios del Debian Mozilla team (http://mozilla.debian.net/) en Debian Squeeze, pero parece que ya no van a ofrecer nuevas actualizaciones más allá de la versión 24. Si a ésto le añadimos que tampoco tenemos actualizaciones de Google Chrome desde la versión 28 (la última fue la 27), parece que pronto tendremos que hacer el cambio a Debian Wheezy.

Publicado por primera vez en http://enavas.blogspot.com.es

Paquetes de firefox 25.0 para instalar en las máquinas de los IES

A continuación dejo dos enlaces para descargar los paquetes de 32 y 64 bits creados "de forma rápida" para instalar firefox 25.0 en el directorio /opt/firefox/ de las máquinas del instituto. 

Importante: Estos paquetes tan sólo colocan firefox en /opt/firefox/. No cambian el enlace de /usr/bin/iceweasel a /opt/firefox/firefox para que se siga pudiendo usar iceweasel como navegador por defecto. 

Para realizar el cambio de iceweasel a firefox o firefox a iceweasel, tengo dos tareas puppet:
  • activa-firefox 
  • activa-iceweasel 

De este modo, si quiero que los portátiles, los servidores ltsp o los workstation usen firefox, les pongo la tarea activa-firefox y si quiero que usen iceweasel, les pongo la tarea activa-iceweasel.

Publicado por primera vez en http://enavas.blogspot.com.es

Listas de control de acceso usadas habitualmente en Squid

Ya que en el post anterior vimos una introducción al control de acceso en Squid, veamos ahora algunas de las ACL que usamos habitualmente:

Para permitir el acceso a una serie de máquinas por su dirección IP especificamos una IP en cada línea del fichero /etc/squid/acl/allow_hosts:
acl allow_hosts src "/etc/squid/acl/allow_hosts"

Para denegar el acceso a una serie de máquinas por su dirección IP especificamos una IP en cada línea del fichero /etc/squid/acl/deny_hosts:
acl deny_hosts src "/etc/squid/acl/deny_hosts"

Para permitir el acceso a una serie de máquinas por su MAC especificamos una dirección MAC en cada línea del fichero /etc/squid/acl/allow_macs:
acl allow_macs arp "/etc/squid/acl/allow_macs"

Para denegar el acceso a una serie de máquinas por su MAC especificamos una dirección MAC en cada línea del fichero /etc/squid/acl/deny_macs:
acl deny_macs arp "/etc/squid/acl/deny_macs"

Para permitir el acceso a determinados nombres de dominio, indicamos el nombre del dominio a permitir comenzando por un punto. Ejemplo: .gobex.es 
acl allow_domains dstdomain "/etc/squid/acl/allow_domains"

Para denegar el acceso a determinados nombres de dominio:
acl deny_domains dstdomain "/etc/squid/acl/deny_domains"

Para permitir el acceso a determinados dominios por sus IP's, indicamos una ip/mascara del dominio en cada línea del archivo /etc/squid/acl/allow_dst. Ejemplo: 173.194.0.0/16
acl allow_dst dst "/etc/squid/acl/allow_dst"

Para denegar el acceso a determinados dominios por sus IP's:
acl deny_dst dst "/etc/squid/acl/deny_dst"

Para denegar el acceso a determinadas extensiones de archivos, como por ejemplo: .mp3$ .avi$ ...
acl deny_files urlpath_regex -i "/etc/squid/acl/deny_files"

Para denegar el acceso a determinadas palabras en las URL's:
acl deny_words url_regex -i "/etc/squid/acl/deny_words"

Para controlar el acceso en un determinado horario:
acl horariopermitido time MTWHF 08:00-15:15
acl horariodenegado time MTWHF 15:16-07:59

Una vez definidas todas las ACL's, el siguiente paso es buscar el TAG: http_access en el fichero /etc/squid/squid.conf e incluir las reglas que definan las restricciones que queramos aplicar, teniendo en cuenta el orden en que debamos aplicarlas.

Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 31 de octubre de 2013

Control de acceso en Squid

Con este post tan sólo pretendo hacer una "breve" introducción al control de acceso mediante Squid, algo que considero fundamental para entender lo más básico a la hora de establecer nuestras propias reglas.

Archivos de configuración.-
Antes de nada, recordar que toda la configuración de squid se encuentra por defecto en el fichero /etc/squid/squid.conf. No obstante, siempre podemos separar ciertas configuraciones en otros ficheros e incluirlas mediante "include" en el fichero principal. Por ejemplo:

Nosotros tenemos separada la configuración de la caché en un archivo /etc/squid/squid-cache.conf o las reglas de refresco en un archivo /etc/squid/squid-cache-refresh.conf. La configuración de estos dos ficheros, se añade al fichero squid.conf simplemente mediante dos includes dentro de dicho fichero:

include /etc/squid/squid-cache.conf
include /etc/squid/squid-cache-refresh.conf

Esto nos va a simplificar el control de las configuraciones.

Cómo se lleva a cabo el control de acceso.-
Básicamente, el control de acceso se realiza mediante dos componentes:
  • Listas de Control de Acceso (ACL), que nos van a permitir definir listas de acceso basadas en IP's, MAC's, nombres de dominio...
  • Reglas de acceso, que nos van  a proporcionar la posibilidad de permitir o denegar el acceso mediante las listas de control de acceso.
Defninición de listas de control de acceso:
Una lista de control de acceso tiene una de las siguientes formas:
  • acl nombreacl tipoacl [-i] valor...
  • acl nombreacl tipoacl [-i] "archivo"
Esto significa que podemos definir los elementos afectados por la acl en la misma línea de configuración (acl nombreacl tipoacl [-i] valor...) o en un archivo (acl nombreacl tipoacl [-i] "archivo").

La opción "-i" nos va a permitir eliminar la restricción de distinguir entre mayúsculas y minúsculas.

Un ejemplo del primer caso: 
acl equipodirectivo src 192.168.1.10-192.168.1.25/32

Un ejemplo del segundo caso: 
acl equipodirectivo src "/etc/squid/acl/ips_equipodirectivo"

En el primer caso, separaríamos cada uno de los elementos mediante un espacio en blanco.
En el segundo caso, colocaríamos la definición de IP's dentro del archivo, especificando cada elemento en una línea.

Definición de reglas de acceso:
Una regla de acceso se define mediante la directiva http_access:
  • http_access allow|deny [!]nombreacl ...
Con http_access vamos a permitir o denegar una o varias acl.

El símbolo "!" es opcional y sirve para negar una acl. Lo usaremos cuando queramos aplicar lo contrario de una acl definida.

Ejemplos:
http_access allow equipodirectivo
http_access deny all

Flujo de procesamiento.-
  • Squid analiza las reglas de una en una en el orden en el que están escritas en el documento de configuración, de arriba a abajo.
  • La primera regla que coincida es la que se aplica, interrumpiendo el procesamiento de las reglas posteriores.
  • En una regla puede haber más de una acl. 
  • Si en una regla de acceso hay más de una acl, todas las acl's de la regla deben cumplirse para que se aplique. 
  • Si después de evaluar todas las reglas de acceso, no se encuentra ninguna regla que se cumpla, se realizará al acción contraria a la definida por la última regla de la lista. Debido a ésto,  es conveniente que definamos una última regla al final que deniegue el acceso: http_access deny all

Publicado por primera vez en http://enavas.blogspot.com.es