Configurar el acceso wifi de un usuario y cachear sus credenciales | Algo de Linux

martes, 7 de febrero de 2012

Configurar el acceso wifi de un usuario y cachear sus credenciales

En mi centro tengo montado un sistema de control de acceso wifi con WPA2 Enterprise + EAP-TTLS/PAP + FREERADIUS + LDAP. Cada usuario puede conectarse vía wifi utilizando su propio login y password, almacenados en el servidor ldap.
Para configurar el acceso de cada usuario, he preparado dos versiones de un mismo script:
 El script addusuario.sh nos pide introducir login y password del usuario. Si el usuario es un profesor, le configura el acceso a la red wifi del centro, y si el usuario es un alumno, le configura el acceso a la red wifi de su aula. Además, cachea las credenciales, para que el usuario pueda entrar en el portátil en el caso de que no tenga conexión a la red. Este script lo coloco en el directorio /usr/local/sbin/ de los portátiles mediante puppet para poder usarlo cuando quiera.

addusuario.sh

#!/bin/bash
#
# addusuario.sh: Configura el acceso wifi del usuario y cachea sus credenciales
#
# Esteban M. Navas Martín
# IES Valle del Jerte

HOST=`hostname`
AULA=`expr substr $HOST 1 3`
USOPROFESOR=`grep "portatil-profesor" /etc/escuela2.0`

clear

DIALOG=${DIALOG=dialog}

tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15

$DIALOG --title "Portatil: $HOST" --clear \
--inputbox "Introduzca el login del usuario de este equipo:" 10 51 2> $tempfile

retval=$?

case $retval in
0)

USUARIO=`cat $tempfile`

if [ "$USUARIO" ] ; then

$DIALOG --title "Password del usuario" --clear \
--inputbox "Introduzca la password del usuario" 10 51 2> $tempfile

retval=$?

case $retval in
0)
PASSWORD=`cat $tempfile`
;;
*)
$DIALOG --title "ERROR" --clear \
--msgbox "Es necesario introducir la password del usuario." 12 46
exit 1
esac
fi
;;
*)
$DIALOG --title "ERROR" --clear \
--msgbox "Es necesario introducir el login del usuario." 12 46
exit 1
esac


cd /tmp

if [ "$USOPROFESOR" ]; then
wget -O /tmp/Auto\ IESVALLEDELJERTE3 http://servidor/ficheros/Auto\ IESVALLEDELJERTE3

retval=$?

if [ $retval -eq 0 ]; then
sed "s/USER/$USUARIO/" Auto\ IESVALLEDELJERTE3 > /tmp/Auto\ IESVALLEDELJERTE3.1
sed "s/PASSWORD/$PASSWORD/" /tmp/Auto\ IESVALLEDELJERTE3.1 > /etc/NetworkManager/system-connections/Auto\ IESVALLEDELJERTE3
chmod 600 /etc/NetworkManager/system-connections/Auto\ IESVALLEDELJERTE3

# Borramos los archivos de configuracion temporales por si volvemos a ejecutar el script
rm /tmp/Auto\ IESVALLEDELJERTE3 /tmp/Auto\ IESVALLEDELJERTE3.1
fi
else
if [ -f /etc/NetworkManager/system-connections/Auto\ IESVALLEDELJERTE3 ]; then
rm /etc/NetworkManager/system-connections/Auto\ IESVALLEDELJERTE3
fi

wget -O /tmp/Auto\ $AULA-iesvalledeljerte3 http://servidor/ficheros/Auto\ $AULA-iesvalledeljerte3

retval=$?

if [ $retval -eq 0 ]; then
sed "s/USER/$USUARIO/" Auto\ $AULA-iesvalledeljerte3 > /tmp/Auto\ $AULA-iesvalledeljerte3.1
sed "s/PASSWORD/$PASSWORD/" /tmp/Auto\ $AULA-iesvalledeljerte3.1 > /etc/NetworkManager/system-connections/Auto\ $AULA-iesvalledeljerte3
chmod 600 /etc/NetworkManager/system-connections/Auto\ $AULA-iesvalledeljerte3

# Borramos los archivos de configuracion temporales por si volvemos a ejecutar el script
rm /tmp/Auto\ $AULA-iesvalledeljerte3 /tmp/Auto\ $AULA-iesvalledeljerte3.1
fi
fi

if [ "$USUARIO" ] && [ "$PASSWORD" ]; then
# Cacheamos las credenciales de usuario
cc_test -store any $USUARIO $PASSWORD
fi



El script .bash_login hace lo mismo que el anterior, pero sólo va a realizar la configuración cuando el usuario root haga login en un terminal y no exista el fichero de configuración de acceso a la wifi en /etc/NetworkManager/system-connections/ o cuando forcemos la ejecución del mismo, poniendo a vacío la variable FICHEROCONFIG. Este script lo coloco en el directorio /root de los portátiles mediante puppet.

bash_login.portatil

HOST=`hostname`
AULA=`expr substr $HOST 1 3`
USOPROFESOR=`grep "portatil-profesor" /etc/escuela2.0`

if [ "$USOPROFESOR" ]; then
FICHEROCONFIG=`ls /etc/NetworkManager/system-connections/|grep IESVALLEDELJERTE3`
else
FICHEROCONFIG=`ls /etc/NetworkManager/system-connections/|grep $AULA`
fi

# "Des-comentar" esta condición cuando queramos forzar la reconfiguración de la wifi
#FICHEROCONFIG=""

# Si la wifi ya está configurada, cerramos y no hacemos nada
if [ -z "$FICHEROCONFIG" ]; then

clear

DIALOG=${DIALOG=dialog}

tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15

$DIALOG --title "Portatil: $HOST" --clear \
--inputbox "Introduzca el login del usuario de este equipo:" 10 51 2> $tempfile

retval=$?

case $retval in
0)

USUARIO=`cat $tempfile`

if [ "$USUARIO" ] ; then

$DIALOG --title "Password del usuario" --clear \
--inputbox "Introduzca la password del usuario" 10 51 2> $tempfile

retval=$?

case $retval in
0)
PASSWORD=`cat $tempfile`
;;
*)
$DIALOG --title "ERROR" --clear \
--msgbox "Es necesario introducir la password del usuario." 12 46
esac
fi
;;
*)
$DIALOG --title "ERROR" --clear \
--msgbox "Es necesario introducir el login del usuario." 12 46
esac


WIFICONFIGURADA=`grep $USUARIO "$FICHEROCONFIG"`

if [ -z "$WIFICONFIGURADA" ]; then

if [ "$USOPROFESOR" ] && [ "$USUARIO" ] && [ "$PASSWORD" ]; then
wget -O /tmp/Auto\ IESVALLEDELJERTE3 http://servidor/ficheros/Auto\ IESVALLEDELJERTE3

retval=$?

if [ $retval -eq 0 ]; then
sed "s/USER/$USUARIO/" /tmp/Auto\ IESVALLEDELJERTE3 > /tmp/Auto\ IESVALLEDELJERTE3.1
sed "s/PASSWORD/$PASSWORD/" /tmp/Auto\ IESVALLEDELJERTE3.1 > /etc/NetworkManager/system-connections/Auto\ IESVALLEDELJERTE3
chmod 600 /etc/NetworkManager/system-connections/Auto\ IESVALLEDELJERTE3

# Borramos los archivos de configuracion temporales por si volvemos a ejecutar el script
rm /tmp/Auto\ IESVALLEDELJERTE3 /tmp/Auto\ IESVALLEDELJERTE3.1
else
echo "No existe el fichero de configuración Auto\ IESVALLEDELJERTE3 en http://servidor/ficheros/"
fi
else
if [ "$USUARIO" ] && [ "$PASSWORD" ]; then
if [ -f /etc/NetworkManager/system-connections/Auto\ IESVALLEDELJERTE3 ]; then
rm /etc/NetworkManager/system-connections/Auto\ IESVALLEDELJERTE3
fi

wget -O /tmp/Auto\ $AULA-iesvalledeljerte3 http://servidor/ficheros/Auto\ $AULA-iesvalledeljerte3

retval=$?

if [ $retval -eq 0 ]; then
sed "s/USER/$USUARIO/" /tmp/Auto\ $AULA-iesvalledeljerte3 > /tmp/Auto\ $AULA-iesvalledeljerte3.1
sed "s/PASSWORD/$PASSWORD/" /tmp/Auto\ $AULA-iesvalledeljerte3.1 > /etc/NetworkManager/system-connections/Auto\ $AULA-iesvalledeljerte3
chmod 600 /etc/NetworkManager/system-connections/Auto\ $AULA-iesvalledeljerte3

# Borramos los archivos de configuracion temporales por si volvemos a ejecutar el script
rm /tmp/Auto\ $AULA-iesvalledeljerte3 /tmp/Auto\ $AULA-iesvalledeljerte3.1
else
echo "No existe el fichero de configuración Auto $AULA-iesvalledeljerte3 en http://servidor/ficheros/"
fi
fi
fi
fi

if [ "$USUARIO" ] && [ "$PASSWORD" ]; then
# Cacheamos las credenciales de usuario
cc_test -store any $USUARIO $PASSWORD
fi

fi