Proyecto

General

Perfil

« Anterior | Siguiente » 

Revisión 535

Ver diferencias:

scripts/ltsp-server/backupltsp.sh
#!/bin/bash
#Hace una copia de seguridad de los ficheros relevantes de los servidores de aula de la red:
# /etc/udev/rules.d/70-persistent-net.rules
# /var/lib/aulalinex-profesor/aulalinex-profesor.conf
# /var/lib/aulalinex-profesor-ltsp/setup.ini
# /etc/hostapd/hostapd.accept
# /etc/hostapd/hostapd.conf
#Ejecutar desde un ordenador donde se tenga relacion de confianza con todos los servidores de aula, para evitar la petición de contraseñas.
#Version: 1.5
#Fecha : 11/10/2012
#Autor : Alfonso Pastor
# IES Virgen de Guadalupe (Cáceres)
servidoresaula=$(ldapsearch -xLLL -h ldap -b cn=ltsp-server-hosts,ou=Netgroup,dc=instituto,dc=extremadura,dc=es "nisNetgroupTriple" |grep -v "dn:"| cut -f2 -d "(" | cut -f1 -d",")
listaficheros="/etc/udev/rules.d/70-persistent-net.rules /var/lib/aulalinex-profesor/aulalinex-profesor.conf /var/lib/aulalinex-profesor-ltsp/setup.ini /etc/hostapd/hostapd.accept /etc/hostapd/hostapd.conf"
for servidoraula in $servidoresaula
do
echo "Backup de $servidoraula:"
mkdir -p backupltsp/$servidoraula
for ruta in $listaficheros
do
fichero=$(basename $ruta)
if scp root@$servidoraula:$ruta backupltsp/$servidoraula/$fichero > /dev/null 2>&1
then
echo " Copiado: $fichero"
else
echo " No encontrado: $fichero"
fi
done
done
echo "Finalizado: tiene todos los datos que se han podido copiar en ./backupltsp"
scripts/nfs/limpiar-credenciales.sh
#!/bin/bash
# Ejecutar en el servidor nfs.
# Borra las credenciales puppet del equipo indicado como parametro.
# Alfonso Pastor. IES Virgen de Guadalupe.
if [ $# -ne 1 ]
then
echo "Uso: `basename $0` <nombre equipo>"
exit 1
fi
equipo=$1
rm /var/lib/puppet/ssl/ca/signed/${equipo}.vguadalupe.pem
rm /var/lib/puppet/yaml/node/${equipo}.vguadalupe.yaml
rm /var/lib/puppet/yaml/facts/${equipo}.vguadalupe.yaml
scripts/nfs/copiar-escritorio-todos-alumnos.sh
#!/bin/bash
#Para ejecutar en el servidor nfs
#Copia un fichero en el escritorio de todos los alumnos.
#Si se añade el parametro -i el fichero se hace inmutablep para que no pueda ser borrado
#Alfonso Pastor. IES Virgen de Guadalupe.
function error() {
echo "Uso: $0 [-i] fichero"
echo " -i : hacer el fichero inmutable tras copiarlo"
exit
}
function copiar_escritorio() {
# 3 parametros: ruta home destino, fichero a copiar, "I" hacerlo inmutable
destino=$1
fichero=$2
inmutable=$3
uid=$(stat -c%u $destino)
if test ! -d $destino/Desktop
then
echo "El usuario $destino no tiene escritorio. Creandolo...."
mkdir $destino/Desktop
chown $uid:$uid $destino/Desktop
chmod 2755 $destino/Desktop
fi
cp -p $fichero $destino/Desktop
chown $uid:$uid $destino/Desktop/$fichero
if [ "$inmutable" = "I" ]
then
chattr +i /home/alumnos/$i/Desktop/$fichero
fi
}
if test $# -eq 0
then
error
fi
if [ "$1" = "-i" ]
then
cambiar="I"
fichero=$2
if test -z "$fichero"
then
error
fi
else
cambiar="N"
fichero=$1
fi
echo "Fichero a copiar: $*"
for i in $(ls /home/alumnos); do
echo "Copiando al escritorio del alumno $i"
copiar_escritorio /home/alumnos/$i $fichero $cambiar
done
scripts/nfs/despierta-equipo.sh
#!/bin/bash
#Manda una orden WOL al equipo indicado como parametro. Debe estar dado de alta en ldap.
#Alfonso Pastor. IES Virgen de Guadalupe.
if [ $# -eq 0 ]; then
echo "Uso: $0 hostname ..."
exit
fi
for i in $*
do
mac=$(ldapsearch -xLLL -h ldap -b cn=$i,cn=group1,cn=INTERNAL,cn=DHCP\ Config,dc=instituto,dc=extremadura,dc=es "dhcpHWAddress" | grep ethernet | grep -v '00:00:00:00:00:00' | cut -f3 -d " "
)
echo "Despertando $i con mac $mac"
wakeonlan $mac
etherwake $mac
done
scripts/nfs/copiar-skel-xfce-todos.sh
#!/bin/bash
#Para ejecutar en el servidor nfs
#Copia un skel ubicado en /root/scripts/skel-xfce sobre todos los usuarios, preservando los ficheros que ya existan en cada perfil
#Alfonso Pastor. IES Virgen de Guadalupe.
function copiar_skel() {
ruta=$1
uid=$(stat -c%u "$ruta")
shopt -s dotglob # Para copiar tambien los archivos ocultos
cd /root/scripts/skel-xfce
cp -pfR * "$ruta"
chown -R $uid:$uid "$ruta"
cd -
shopt -u dotglob
}
for i in in $(ls /home/alumnos)
do
echo "Copiando al home alumno $i"
copiar_skel "/home/alumnos/$i"
done
for i in $(ls /home/profesor)
do
if [ "$i" != "/home/profesor/dpto" ]
then
echo "Copiando al home del profesor $i"
copiar_skel "/home/profesor/$i"
fi
done
exit 0
scripts/nfs/limpiar_usuarios.sh
#!/bin/sh
# Ejecutar en el servidor nfs. Lo ideal es ponerlo en el crontab y ejecutarlo cada noche.
# Borra los directorios thumbnails (visor de fotos), cache de java, cache de mozilla,
# base de datos mozilla, applet actualizacion (apt-watch), cache de openoffice y papelera.
# Francisco Rodrigo
cd /home/profesor/
for i in *
do
if [ -d $i/Desktop ]; then
if [ $i != "dpto" ]
then
rm -rf $i/.thumbnails
rm -rf $i/.java/deployment/cache
rm -rf $i/.local/share/Trash
rm -rf $i/.mozilla/firefox/*.default/Cache/*
rm -rf $i/.googleearth/Cache/*
rm -rf $i/.cache/google-chrome/*
# Si queremos comprimir la base de datos sqlite hacemos lo siguiente (necesita tener instalado sqlite3 en el servidor nfs y en mayhave):
for f in $i/.mozilla/firefox/*/*.sqlite; do sqlite3 $f 'VACUUM;'; done
# Si queremos borrar las bases de datos hacemos esto otro:
#rm -rf $i/.mozilla/firefox/*.default/*.sqlite*
rm -rf $i/.openoffice.org/3/user/uno_packages/cache
rm -rf $i/.openoffice.org/3/user/registry/cache
rm -rf $i/.evolution/cache
rm -rf $i/.apt-watch
#Desbloqueamos firefox por si se queda colgado
rm -rf $i/.mozilla/firefox/*.default/lock
fi
fi
done
cd -
cd /home/alumnos/
for i in *
do
rm -rf $i/.thumbnails
rm -rf $i/.java/deployment/cache
rm -rf $i/.local/share/Trash
rm -rf $i/.mozilla/firefox/*.default/Cache/*
rm -rf $i/.googleearth/Cache/*
rm -rf $i/.cache/google-chrome/*
#for f in $i/.mozilla/firefox/*/*.sqlite; do sqlite3 $f 'VACUUM;'; done
rm -rf $i/.mozilla/firefox/*.default/*.sqlite*
rm -rf $i/.openoffice.org/3/user/uno_packages/cache
rm -rf $i/.openoffice.org/3/user/registry/cache
rm -rf $i/.evolution/cache
rm -rf $i/.apt-watch
#Desbloqueamos firefox por si se queda colgado
rm -rf $i/.mozilla/firefox/*.default/lock
#Limpiamos la carpeta recibidos del alumno y enviados. De momento no.
#rm -rf $i/recibidos_profesor/*
#rm -rf $i/enviar_profesor/*
done
cd -
scripts/nfs/copiar-escritorio-todos-profesores.sh
#!/bin/bash
#Para ejecutar en el servidor nfs
#Copia una serie de ficheros en el escritorio de todos los profesores.
#Alfonso Pastor. IES Virgen de Guadalupe.
echo "Ficheros a copiar: $*"
for i in $(ls /home/profesor); do
echo "Copiando al escritorio del profesor $i"
uid=$(stat -c%u /home/profesor/$i)
if test ! -d /home/profesor/$i/Desktop
then
echo "El usuario $i no tiene escritorio. Creandolo...."
mkdir /home/profesor/$i/Desktop
chown $uid:$uid /home/profesor/$i/Desktop
chmod 2755 /home/profesor/$i/Desktop
fi
cp -pfR "$*" /home/profesor/$i/Desktop
for fichero in "$*" ; do
chown -R $uid:$uid "/home/profesor/$i/Desktop/$fichero"
done
done
scripts/nfs/copiar-skel-xfce-user.sh
#!/bin/bash
#Para ejecutar en el servidor nfs
#Copia un skel ubicado en /root/scripts/skel-xfce sobre el usuario indicado como parametro. Se debe indicar la ruta completa del home.
#Alfonso Pastor. IES Virgen de Guadalupe.
function copiar_skel() {
ruta=$1
uid=$(stat -c%u "$ruta")
shopt -s dotglob # Para copiar tambien los archivos ocultos
cd /root/scripts/skel-xfce
cp -pfR * "$ruta"
chown -R $uid:$uid "$ruta"
cd -
shopt -u dotglob
}
ruta=$1
if [ -z $ruta ]
then
echo "Debes indicar la ruta del home a copiar skel"
else
echo "Copiando al home $ruta"
copiar_skel "$ruta"
fi
scripts/ldap/addipfija.sh
#!/bin/bash
#Añade un equipo (impresora, switch, etc) que tendra IP Fija al directorio LDAP, sin añadirlo a ningún
#grupo de Netgroups.
#Basado en el script addworkstation.sh de Ricardo Salgado Cid (IESO Galisteo)
#Alfonso Pastor. IES Virgen de Guadalupe.
if [ $# -ne 3 ]; then
echo "Uso: $0 hostname ip mac"
exit
fi
dominio=`hostname -d`
host=$1
ip=$2
ip1=`echo $2 | cut -d"." -f1`
ip2=`echo $2 | cut -d"." -f2`
ip3=`echo $2 | cut -d"." -f3`
ip4=`echo $2 | cut -d"." -f4`
mac=`echo $3 |tr '[:lower:]' '[:upper:]'`
FICHERO=$host.$dominio.ldif
if [ -e $FICHERO ]; then
rm $FICHERO
fi
echo "
dn: dc=$ip4,dc=$ip3,dc=$ip2,dc=$ip1,dc=in-addr,dc=arpa,ou=hosts,dc=instituto,dc=extremadura,dc=es
changetype: add
objectclass: dnsdomain2
objectclass: domainrelatedobject
dc: $ip4
associateddomain: $ip4.$ip3.$ip2.$ip1.in-addr.arpa
PTRRecord: $host.$dominio
dn: dc=$host,dc=$dominio,ou=hosts,dc=instituto,dc=extremadura,dc=es
changetype: add
objectclass: dnsdomain2
objectclass: domainrelatedobject
dc: $host
associateddomain: $host.$dominio
ARecord: $ip
dn: cn=$host,cn=group1,cn=INTERNAL,cn=DHCP Config,dc=instituto,dc=extremadura,dc=es
changetype: add
cn: $host
objectClass: top
objectClass: dhcpHost
dhcpHWAddress: ethernet $mac
dhcpStatements: fixed-address $host
" > $FICHERO
echo "Añadiendo $host.$dominio a ldap con ip=$ip y mac=$mac"
ldapadd -c -x -h ldap -W -D "cn=admin,ou=People,dc=instituto,dc=extremadura,dc=es" -f $FICHERO
scripts/ldap/genexpal_profes.sh
#!/bin/sh
# Tiene de entrada un fichero de profesores descargado de Rayuela. Elimina de ?l los
# profesores ya dados de alta en Rayuela, de manera que quedan solamente los nuevos.
# Este script debe estar en el mismo directorio que el archivo .xml de exportacion
# de profes de Rayuela mas reciente (bueno, cualquiera vale, pero lo suyo es tener
# los profes al dia).
# Funcionamiento : genexpal_profes.sh Exportacion_Datos_Profes_Mas_Reciente.xml
if [ -f ./Profes_Nuevos.xml ]; then
rm -f ./Profes_Nuevos.xml
fi
clear
if [ $# -lt 1 ]; then
echo
echo Funcionamiento : genexpal_profes.sh Exportacion_Datos_Profes_Mas_Reciente.xml
ls -lh
exit 1
fi
if [ ! -f $1 ]; then
echo
echo Funcionamiento : genexpal_profes.sh Exportacion_Datos_Profes_Mas_Reciente.xml
echo Y ademas tiene que existir $1.
ls -lh
exit 1
fi
# Sacamos los nie para no hacer grep sobre un fichero tan gordo todo el tiempo
ldapsearch -xLLL -h ldap -b "ou=People,dc=instituto,dc=extremadura,dc=es" homeDirectory employeeNumber | tr '\n' ' ' | sed 's/dc=es/dc=es\n/g' | grep profesor | cut -d" " -f5 | grep -v "dn:" > dnis
# Estas tonter?as son para el porcentaje
total_lineas=`wc -l ./$1 | cut -d" " -f1`
lineas=1
# Variable de guarda, para saber cu?ndo copiar
copiar=si
clear
echo Empezamos, esto va a tardar un ratillo...
while [ $lineas -le $total_lineas ]
do
linea=`head -$lineas ./$1 | tail -1`
etiqueta=`echo $linea | tr '<' '>' | cut -d">" -f2`
tpc=`expr $lineas \* 100 / $total_lineas`
echo -n "Procesando l?nea $lineas...$tpc% completado..."
echo -ne "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"
lineas=`expr $lineas + 1`
if [ "$etiqueta" = "dni" ]; then
valor_dni=`echo $linea | tr '<' '>' | cut -d">" -f3`
if [ "`grep -c "$valor_dni" dnis`" != "0" ]; then
copiar=no
else
copiar=si
echo "<profesor>" >> Profes_Nuevos.xml
fi
fi
if [ "$copiar" = "si" -a "$etiqueta" != "profesor" ]; then
echo "$linea" >> Profes_Nuevos.xml
fi
if [ "$copiar" = "no" -a "$etiqueta" = "/profesor" ]; then
copiar=si
fi
done
rm -f dnis
echo
echo Exportacion generada : Profes_Nuevos.xml
echo Contiene `grep -c "<profesor>" Profes_Nuevos.xml` nuevos profes para incluir.
scripts/ldap/limpiar-cache-squid.sh
#!/bin/bash
#Ejecutar en el servidor ldap. Limpia la caché del squid y lo reinicia.
#Alfonso Pastor. IES Virgen de Guadalupe.
cd /var/spool
/etc/init.d/squid stop
rm -Rf squid
mkdir squid
chown proxy:proxy squid
chmod 750 squid
/etc/init.d/squid start
scripts/ldap/delhost-workstation.sh
#!/bin/bash
#Borra un host del directorio LDAP
#Ricardo Salgado Cid
#IESO Galisteo
#
#20/03/11 Release incial ()
if [ $# -ne 1 ]; then
echo "Uso: $0 hostname"
exit
fi
dominio=`hostname -d`
host=$1
dn=$(ldapsearch -xLLL -h ldap -b cn="DHCP Config",dc=instituto,dc=extremadura,dc=es "(&(objectClass=dhcpHost)(cn=$host))" dn | perl -p0e 's/\n //g')
if [ ! "$dn" ] ; then
echo "No hay ningun equipo llamado $host"
exit 1
fi
ip=$(ldapsearch -xLLL -h ldap -b dc="$dominio",ou="hosts",dc=instituto,dc=extremadura,dc=es "(&(|(objectClass=dNSDomain2)(objectClass=dNSDomain))(dc=$host))" | grep aRecord: | cut -d" " -f2)
ip1=$(echo $ip | cut -d"." -f1)
ip2=$(echo $ip | cut -d"." -f2)
ip3=$(echo $ip | cut -d"." -f3)
ip4=$(echo $ip | cut -d"." -f4)
FICHERO=$host.$dominio.ldif
if [ -e $FICHERO ]; then
rm $FICHERO
fi
echo "
dn: dc=$ip4,dc=$ip3,dc=$ip2,dc=$ip1,dc=in-addr,dc=arpa,ou=hosts,dc=instituto,dc=extremadura,dc=es
changetype: delete
dn: dc=$host,dc=$dominio,ou=hosts,dc=instituto,dc=extremadura,dc=es
changetype: delete
dn: cn=$host,cn=group1,cn=INTERNAL,cn=DHCP Config,dc=instituto,dc=extremadura,dc=es
changetype: delete
" > $FICHERO
echo "dn: cn=workstation-hosts, ou=Netgroup,dc=instituto,dc=extremadura,dc=es
changetype: modify" >> $FICHERO
echo "replace: nisNetgroupTriple" >> $FICHERO
ldapsearch -xLLL -h ldap -b ou=Netgroup,dc=instituto,dc=extremadura,dc=es "(cn=workstation-hosts)" | grep nisNetgroupTriple | grep -v "nisNetgroupTriple: ($host," | while read triple
do
echo $triple >> $FICHERO
done
echo "Borrando $host.$dominio de ldap con ip=$ip"
ldapadd -c -x -H ldaps://ldap.$dominio -W -D "cn=admin,ou=People,dc=instituto,dc=extremadura,dc=es" -f $FICHERO
read -p "Intentar borrar tambien los restos en puppet (s/n)?"
if [ $REPLY != "s" ]; then
exit 1
fi
if [ "$(hostname)" = "servidor" ]; then
puppetca --clean $host.$dominio; rm /var/lib/puppet/yaml/facts/$host.$dominio.yaml; rm /var/lib/puppet/yaml/node/$host.$dominio.yaml
else
echo "Es necesaria la contrseña de root del servidor nfs"
ssh root@servidor "puppetca --clean $host.$dominio; rm /var/lib/puppet/yaml/facts/$host.$dominio.yaml; rm /var/lib/puppet/yaml/node/$host.$dominio.yaml"
fi
scripts/ldap/restauraldap.sh
#!/bin/bash
#Ejecutar en el servidor ldap. Restaura el árbol ldap completo de una copia previa del ldip.
#Complementario a copialdap.sh
#Alfonso Pastor. IES Virgen de Guadalupe.
if [ "$1" == "" ]
then
echo "Debe indicar como parametro el fichero ldif".
exit 1
fi
if [ ! -e $1 ]
then
echo "El fichero $1 no existe"
exit 1
fi
echo "Restaurando ldap desde $1"
/etc/init.d/slapd stop
rm /var/lib/ldap/*
slapadd -l $1
chown -R openldap:openldap /var/lib/ldap/
/etc/init.d/slapd start
scripts/ldap/copialdap.sh
#!/bin/bash
#Ejecutar en el servidor ldap. Hace copia de seguridad del arbol ldap en la ruta "/root/scripts/"
#Alfonso Pastor. IES Virgen de Guadalupe.
/etc/init.d/slapd stop
fecha=$(date +%F )
copia="/root/scripts/copia-seguridad-ldap-$fecha.ldif"
slapcat > $copia
/etc/init.d/slapd start
echo "Copiado en $copia".
scripts/ldap/genexpal.sh
#!/bin/sh
# Tiene de entrada un fichero de alumnos descargado de rayuela. Elimina de dicho fichero
# los alumnos que ya est?n en ldap, de tal manera que quedan solamente los nuevos alumnos.
# Este script debe estar en el mismo directorio que el archivo .zip de exportacion
# de alumnos de Rayuela mas reciente (bueno, cualquiera vale, pero lo suyo es tener
# los alumnos al dia).
# Funcionamiento : genexpal.sh Exportacion_Mas_Reciente.zip
rm -f Alumnos_nuevos.xml
rm -r ./NuevaExportacion
clear
echo -n "Contraseña de administrador de la BBDD ldap:"
read pwd
if [ $# -lt 1 ]; then
echo
echo Funcionamiento : genexpal.sh Exportacion_Mas_Reciente.zip
ls -lh
exit 1
fi
if [ ! -f $1 ]; then
echo
echo Funcionamiento : genexpal.sh Exportacion_Mas_Reciente.zip
echo Y ademas tiene que existir $1.
ls -lh
exit 1
fi
error=`unzip -t $1 | grep "No errors detected"`
if [ "$error" = "" ]; then
echo
echo Errores en fichero comprimido $1, abortando...
exit 1
fi
unzip -o $1 -d ./NuevaExportacion/
# Sacamos los nie para no hacer grep sobre un fichero tan gordo todo el tiempo
ldapsearch -w $pwd -xLLL -h ldap -b "ou=People,dc=instituto,dc=extremadura,dc=es" homeDirectory| tr '\n' ' ' | sed 's/dc=es/dc=es\n/g' | grep alumnos | tr '/' ' '| cut -d" " -f6 > estudiantes
#ldapsearch -w $pwd -xLLL -h ldap -b "cn=students,ou=Group,dc=instituto,dc=extremadura,dc=es" member | tr '=,' ' ' | cut -d" " -f3 > estudiantes
while read ident
do
ldapsearch -w $pwd -xLLL -h ldap -b "uid=$ident,ou=People,dc=instituto,dc=extremadura,dc=es" employeeNumber | grep employeeNumber | cut -d" " -f2 >> nies_existentes
done < estudiantes
# Estas tonter?as son para el porcentaje
total_lineas=`wc -l ./NuevaExportacion/Alumnos.xml | cut -d" " -f1`
lineas=1
# Variable de guarda, para saber cu?ndo copiar
copiar=si
clear
echo Empezamos, esto va a tardar un ratillo...
while [ $lineas -le $total_lineas ]
do
linea=`head -$lineas ./NuevaExportacion/Alumnos.xml | tail -1`
etiqueta=`echo $linea | tr '<' '>' | cut -d">" -f2`
tpc=`expr $lineas \* 100 / $total_lineas`
echo -n "Procesando l?nea $lineas...$tpc% completado..."
echo -ne "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"
lineas=`expr $lineas + 1`
if [ "$etiqueta" = "nie" ]; then
valor_nies=`echo $linea | tr '<' '>' | cut -d">" -f3`
if [ "`grep -c "$valor_nies" nies_existentes`" != "0" ]; then
copiar=no
else
copiar=si
echo "<alumno>" >> Alumnos_nuevos.xml
fi
fi
if [ "$copiar" = "si" -a "$etiqueta" != "alumno" ]; then
echo "$linea" >> Alumnos_nuevos.xml
fi
if [ "$copiar" = "no" -a "$etiqueta" = "nombre-fichero" ]; then
fichero_foto=`echo $linea | tr '<' '>' | cut -d">" -f3`
rm -f ./NuevaExportacion/$fichero_foto
fi
if [ "$copiar" = "no" -a "$etiqueta" = "/alumno" ]; then
copiar=si
fi
done
rm -f nies_existentes
#iconv -t ISO_8859-1//TRANSLIT Alumnos_nuevos.xml -o ./NuevaExportacion/Alumnos.xml
cp -f Alumnos_nuevos.xml ./NuevaExportacion/Alumnos.xml
rm -f Alumnos.xml
rm -f estudiantes
cd ./NuevaExportacion
nuevaexp="NuevaExportacionAlumnos`date +%y%m%d`"
zip ../$nuevaexp *
cd ..
rm -r ./NuevaExportacion
echo
echo Exportacion generada : $nuevaexp.zip
echo Contiene `grep -c "<alumno>" Alumnos_nuevos.xml` nuevos alumnos para incluir.
rm -f Alumnos_nuevos.xml
scripts/ldap/renhost-workstation.sh
#!/bin/bash
#Modifica el nombre de un equipo en LDAP
#Ricardo Salgado Cid
#IESO Galisteo
#
#20/03/12 Adaptado a ldaps
#07/10/10 Modificacion para que funcione adecuadamente con los host con los que se uso lwat
#17/09/10 Release incial ()
PASSWORDLDAP=""
#Usa el valor de esta variable como password de ldap en vez de pedirla en cada ocasión.
#Ojo!, utilizar con cuidado
if [ $# -ne 2 ]; then
echo "Uso: $0 nombre_actual nuevo_nombre"
exit
fi
dominio=`hostname -d`
nactual=$1
nnuevo=$2
FICHERO=$nnuevo.$dominio.ldif
if [ -e $FICHERO ]; then
rm $FICHERO
fi
dnactual=$(ldapsearch -xLLL -h ldap -b cn="DHCP Config",dc=instituto,dc=extremadura,dc=es "(&(objectClass=dhcpHost)(cn=$nactual))" dn | perl -p0e 's/\n //g' )
if [ ! "$dnactual" ] ; then
echo "No hay ningun equipo llamado $nactual"
exit 1
fi
if ldapsearch -xLLL -h ldap -b cn="DHCP Config",dc=instituto,dc=extremadura,dc=es "(&(objectClass=dhcpHost)(cn=$nnuevo))" dn | perl -p0e 's/\n //g' > /dev/null ; then
echo "Ya existe un equipo con el nombre $nnuevo"
exit 1
fi
dnnuevo=$(echo $dnactual | sed "s/$nactual/$nnuevo/" )
ip=$(ldapsearch -xLLL -h ldap -b dc="$dominio",ou="hosts",dc=instituto,dc=extremadura,dc=es "(&(|(objectClass=dNSDomain2)(objectClass=dNSDomain))(dc=$nactual))" | grep aRecord: | cut -d" " -f2)
ip1=$(echo $ip | cut -d"." -f1)
ip2=$(echo $ip | cut -d"." -f2)
ip3=$(echo $ip | cut -d"." -f3)
ip4=$(echo $ip | cut -d"." -f4)
echo "$dnactual
changetype: moddn
newrdn: cn=$nnuevo
deleteoldrdn: 1
$dnnuevo
changetype: modify
delete: dhcpStatements
$dnnuevo
changetype: modify
add: dhcpStatements
dhcpStatements: fixed-address $nnuevo
dn: dc=$nactual,dc=$dominio,ou=hosts,dc=instituto,dc=extremadura,dc=es
changetype: moddn
newrdn: dc=$nnuevo
deleteoldrdn: 1
dn: dc=$nnuevo,dc=$dominio,ou=hosts,dc=instituto,dc=extremadura,dc=es
changetype: modify
replace: associatedDomain
associatedDomain: $nnuevo.$dominio
dn: dc=$ip4,dc=$ip3,dc=$ip2,dc=$ip1,dc=in-addr,dc=arpa,ou=hosts,dc=instituto,dc=extremadura,dc=es
changetype: modify
replace: pTRRecord
pTRRecord: $nnuevo.$dominio
" > $FICHERO
#Comprobar si el host tiene la entrada extra que añade lwat
#y en ese caso modificarla tambien
entradalwat=$(ldapsearch -xLLL -h ldap -b ou="hosts",dc=instituto,dc=extremadura,dc=es "(&(objectClass=ipHost)(cn=$nactual))" dn | perl -p0e 's/\n //g')
if [ "$entradalwat" ]; then
echo "$entradalwat
changetype: moddn
newrdn: cn=$nnuevo
deleteoldrdn: 1
">> $FICHERO
fi
echo "dn: cn=workstation-hosts, ou=Netgroup,dc=instituto,dc=extremadura,dc=es
changetype: modify
replace: nisNetgroupTriple" >> $FICHERO
ldapsearch -xLLL -h ldap -b ou=Netgroup,dc=instituto,dc=extremadura,dc=es "(cn=workstation-hosts)" | grep nisNetgroupTriple | grep -v "nisNetgroupTriple: ($nactual," | while read triple
do
echo $triple >> $FICHERO
done
echo "nisNetgroupTriple: ($nnuevo,-,-)" >> $FICHERO
if [ "$PASSWORDLDAP" ]; then
ldapmodify -c -x -H ldaps://ldap.$dominio -w$PASSWORDLDAP -D "cn=admin,ou=People,dc=instituto,dc=extremadura,dc=es" -f $FICHERO
else
ldapmodify -c -x -H ldaps://ldap.$dominio -W -D "cn=admin,ou=People,dc=instituto,dc=extremadura,dc=es" -f $FICHERO
fi
read -p "Intentar eliminar los restos del normbre antiguo en puppet (s/n)?"
if [ $REPLY != "s" ]; then
exit 1
fi
host=$nactual
if [ "$(hostname)" = "servidor" ]; then
puppetca --clean $host.$dominio; rm /var/lib/puppet/yaml/facts/$host.$dominio.yaml; rm /var/lib/puppet/yaml/node/$host.$dominio.yaml
else
echo "Es necesaria la contrseña de root del servidor nfs"
ssh root@servidor "puppetca --clean $host.$dominio; rm /var/lib/puppet/yaml/facts/$host.$dominio.yaml; rm /var/lib/puppet/yaml/node/$host.$dominio.yaml"
fi
scripts/ldap/addhost-workstation.sh
#!/bin/bash
#Añade un host al directorio LDAP
#Ricardo Salgado Cid
#IESO Galisteo
#
#21/03/11 Corregido bug en la comprobacion de si el equipos existe en el Netgroup
# Adaptado para funcionar con ldaps
# Ya no es necesario el hack para modificar el Netgroup
#23/09/09 Corregido problema de compatibilidad con ldap-utils 2.4.x
#24/03/09 Release incial ()
PASSWORDLDAP=""
#Usa el valor de esta variable como password de ldap en vez de pedirla en cada ocasión.
#Ojo!, utilizar con cuidado
if [ $# -ne 3 ]; then
echo "Uso: $0 hostname ip mac"
exit
fi
dominio=`hostname -d`
host=$1
ip=$2
ip1=$(echo $ip | cut -d"." -f1)
ip2=$(echo $ip | cut -d"." -f2)
ip3=$(echo $ip | cut -d"." -f3)
ip4=$(echo $ip | cut -d"." -f4)
mac=$(echo $3 |tr '[:lower:]' '[:upper:]')
FICHERO=$host.$dominio.ldif
if [ -e $FICHERO ]; then
rm $FICHERO
fi
echo "
dn: dc=$ip4,dc=$ip3,dc=$ip2,dc=$ip1,dc=in-addr,dc=arpa,ou=hosts,dc=instituto,dc=extremadura,dc=es
changetype: add
objectclass: dnsdomain2
objectclass: domainrelatedobject
dc: $ip4
associateddomain: $ip4.$ip3.$ip2.$ip1.in-addr.arpa
PTRRecord: $host.$dominio
dn: dc=$host,dc=$dominio,ou=hosts,dc=instituto,dc=extremadura,dc=es
changetype: add
objectclass: dnsdomain2
objectclass: domainrelatedobject
dc: $host
associateddomain: $host.$dominio
ARecord: $ip
dn: cn=$host,cn=group1,cn=INTERNAL,cn=DHCP Config,dc=instituto,dc=extremadura,dc=es
changetype: add
cn: $host
objectClass: top
objectClass: dhcpHost
dhcpHWAddress: ethernet $mac
dhcpStatements: fixed-address $host
" > $FICHERO
echo "dn: cn=workstation-hosts, ou=Netgroup,dc=instituto,dc=extremadura,dc=es
changetype: modify" >> $FICHERO
echo "replace: nisNetgroupTriple" >> $FICHERO
ldapsearch -xLLL -h ldap -b ou=Netgroup,dc=instituto,dc=extremadura,dc=es "(cn=workstation-hosts)" | grep nisNetgroupTriple | grep -v "nisNetgroupTriple: ($host," | while read triple
do
echo $triple >> $FICHERO
done
echo "nisNetgroupTriple: ($host,-,-)" >> $FICHERO
echo "Añadiendo $host.$dominio a ldap con ip=$ip y mac=$mac"
if [ "$PASSWORDLDAP" ]; then
ldapmodify -c -x -H ldaps://ldap.$dominio -w$PASSWORDLDAP -D "cn=admin,ou=People,dc=instituto,dc=extremadura,dc=es" -f $FICHERO
else
ldapmodify -c -x -H ldaps://ldap.$dominio -W -D "cn=admin,ou=People,dc=instituto,dc=extremadura,dc=es" -f $FICHERO
fi
scripts/ldap/limpiarGrupos.php
<?
# Descripción del Script:
# Este script borra de los grupos (clases, departamentos, alumnos y profesores) todas las referencias
# a individuos (members y membersUID) que no existan en LDAP
# Se instala en /var/www del servidor ldap.
# Se llama desde el navegador abriendo http://ldap/limpiarGrupos.php
# Script realizado por:
# - Manuel Mora Gordillo
# - Francisco Méndez Palma
# I.E.S. Santa Eulalia. Mérida
# Septiembre 2009
$host = "localhost"; // Aquí debes poner la ip de tu servidor LDAP
$puerto = 389;
$admin="cn=admin,ou=People,dc=instituto,dc=extremadura,dc=es";
$passwd=""; // Aquí debes poner tu password
$conex=ldap_connect($host,$puerto) or die ("No ha sido posible conectarse al servidor");
if (!ldap_set_option($conex, LDAP_OPT_PROTOCOL_VERSION, 3)){
echo "Falló la configuracion de protocolo version 3";
die();
}
if ($conex){
$r=ldap_bind($conex, $admin, $passwd);
if (!$r){
echo "Upsss, error. Vuelve a intentarlo otra vez.";
die();
}
}
// Obtenemos un listado de todas los individuos que hay en el nodo "People"
$dn = "ou=People,dc=instituto,dc=extremadura,dc=es";
$filtro="uid=*";
$solonecesito = array("uid");
$sr=ldap_search($conex, $dn, $filtro,$solonecesito);
$info = ldap_get_entries($conex, $sr);
$individuosUID = array();
$individuos = array();
for($i=0;$i<count($info);$i++){
$individuosUID[] = $info[$i]["uid"][0];
$individuos[] = "uid=".$info[$i]["uid"][0].",ou=People,dc=instituto,dc=extremadura,dc=es";
}
// Obtenemos todos los grupos (clases, departamentos, alumnos y profesores)
// y revisamos si sus "members" existen, sino lo borramos
$dn = "ou=Group,dc=instituto,dc=extremadura,dc=es";
$filtro="cn=*";
$solonecesito = array("cn","grouptype","member","memberuid");
$sr=ldap_search($conex, $dn, $filtro,$solonecesito);
$info = ldap_get_entries($conex, $sr);
for($i=0;$i<count($info);$i++){
if($info[$i]["grouptype"][0]=="school_class" ||
$info[$i]["grouptype"][0]=="school_department" ||
$info[$i]["grouptype"][0]=="authority_group"){
for($j=0;$j<count($info[$i]["member"]);$j++){
if(trim($info[$i]["member"][$j])!="" && !in_array($info[$i]["member"][$j],$individuos)){
echo "Grupo <b>".$info[$i]["cn"][0]."</b>: el individuo <b>".$info[$i]["member"][$j]."</b> no existe en 'People', lo eliminamos del grupo.<br>";
$tmp = array();
$tmp["member"][0]=$info[$i]["member"][$j];
@ldap_mod_del($conex,"cn=".$info[$i]["cn"][0].",ou=Group,dc=instituto,dc=extremadura,dc=es",$tmp);
}
}
for($j=0;$j<count($info[$i]["memberuid"]);$j++){
if(trim($info[$i]["memberuid"][$j])!="" && !in_array($info[$i]["memberuid"][$j],$individuosUID)){
echo "Grupo <b>".$info[$i]["cn"][0]."</b>: el individuo <b>".$info[$i]["memberuid"][$j]."</b> no existe en 'People', procedemos a eliminarlo del grupo.<br>";
$tmp = array();
$tmp["memberuid"][0]=$info[$i]["memberuid"][$j];
@ldap_mod_del($conex,"cn=".$info[$i]["cn"][0].",ou=Group,dc=instituto,dc=extremadura,dc=es",$tmp);
}
}
}
}
echo "<br><br><br><b>Nota: Los grupos obligatoriamente deben tener al menos un miembro, si el individuo a borrar es el unico del grupo, no se borrara.</b>";
?>
scripts/ldap/alumnos-sin-foto.sh
#!/bin/sh
#Lista los alumnos que hay sin foto en ldap.
ldapsearch -xLLL -h ldap -b "ou=People,dc=instituto,dc=extremadura,dc=es" "(&(objectClass=inetOrgPerson)(!(jpegPhoto=*)))" "homeDirectory" | grep "/home/alumnos" | cut -d"/" -f4
scripts/puestos/regenera_grub.sh
#!/bin/bash
#Para ser ejecutado como root
#Regenera el grub de un equipo que no arranca. Se ejecuta desde un disco de rescate (SystemRescueCD, Clonezilla, etc).
#Alojarlo en el servidor nfs en /var/www/ficheros.
#Bajarlo con wget http://servidor/ficheros/regenera_grub.sh
#Hacerlo ejecutable chmod +x regenera_grub.sh
#Ejecutarlo con los parametros
# $1 = ruta a la particion con Linux. Ej /dev/sda1
# $2 = ruta al disco donde va el grub. Ej /dev/sda
#Alfonso Pastor. IES Virgen de Guadalupe.
if [ $# -ne 2 ]
then
echo "Ejemplo uso: $0 /dev/sda1 /dev/sda"
echo "Siendo /dev/sda1 la partición raiz con Linux y /dev/sda el disco donde instalar Grub"
echo "Las particiones se listan con fdisk -l"
exit 1
fi
particion=$1
disco=$2
echo "Montando particiones..."
mount $particion /mnt
mount --bind /dev /mnt/dev
mount --bind /dev/pts /mnt/dev/pts
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
echo "Regenerando grub...."
chroot /mnt /usr/sbin/grub-install --recheck $disco
chroot /mnt /usr/sbin/update-grub2
echo "Desmontando particiones"
umount /mnt/dev/pts
umount /mnt/dev
umount /mnt/proc
umount /mnt/sys
umount /mnt
echo "Fin"
scripts/puestos/mintldap/nscd.conf
#
# /etc/nscd.conf
#
# An example Name Service Cache config file. This file is needed by nscd.
#
# Legal entries are:
#
# logfile <file>
# debug-level <level>
# threads <initial #threads to use>
# max-threads <maximum #threads to use>
# server-user <user to run server as instead of root>
# server-user is ignored if nscd is started with -S parameters
# stat-user <user who is allowed to request statistics>
# reload-count unlimited|<number>
# paranoia <yes|no>
# restart-interval <time in seconds>
#
# enable-cache <service> <yes|no>
# positive-time-to-live <service> <time in seconds>
# negative-time-to-live <service> <time in seconds>
# suggested-size <service> <prime number>
# check-files <service> <yes|no>
# persistent <service> <yes|no>
# shared <service> <yes|no>
# max-db-size <service> <number bytes>
# auto-propagate <service> <yes|no>
#
# Currently supported cache names (services): passwd, group, hosts, services
#
# logfile /var/log/nscd.log
# threads 6
# max-threads 128
# server-user nobody
# stat-user somebody
debug-level 0
# reload-count 5
paranoia no
# restart-interval 3600
enable-cache passwd yes
positive-time-to-live passwd 600
negative-time-to-live passwd 20
suggested-size passwd 211
check-files passwd yes
persistent passwd yes
shared passwd yes
max-db-size passwd 33554432
auto-propagate passwd yes
enable-cache group no
positive-time-to-live group 3600
negative-time-to-live group 60
suggested-size group 211
check-files group yes
persistent group yes
shared group yes
max-db-size group 33554432
auto-propagate group yes
# hosts caching is broken with gethostby* calls, hence is now disabled
# per default. See /usr/share/doc/nscd/NEWS.Debian.
enable-cache hosts no
positive-time-to-live hosts 3600
negative-time-to-live hosts 20
suggested-size hosts 211
check-files hosts yes
persistent hosts yes
shared hosts yes
max-db-size hosts 33554432
enable-cache services yes
positive-time-to-live services 28800
negative-time-to-live services 20
suggested-size services 211
check-files services yes
persistent services yes
shared services yes
max-db-size services 33554432
scripts/puestos/mintldap/ldap/common-auth.bak
#
# /etc/pam.d/common-auth - authentication settings common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of the authentication modules that define
# the central authentication scheme for use on the system
# (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the
# traditional Unix authentication mechanisms.
#
auth required pam_unix.so nullok_secure
scripts/puestos/mintldap/ldap/ldap.conf
# $OpenLDAP: pkg/ldap/libraries/libldap/ldap.conf,v 1.9 2000/09/04 19:57:01 kurt Exp $
BASE dc=instituto,dc=extremadura,dc=es
#
# LDAP Defaults
#
# See ldap.conf(5) for details
# This file should be world readable but not world writable.
#BASE dc=example, dc=com
#URI ldap://ldap.example.com ldap://ldap-master.example.com:666
#SIZELIMIT 12
#TIMELIMIT 15
#DEREF never
HOST ldap
TLS_REQCERT never
TLS_CACERT /etc/ldap/ssl/ldap-server-pubkey.pem
scripts/puestos/mintldap/ldap/common-password.bak
#
# /etc/pam.d/common-password - password-related modules common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of modules that define the services to be
#used to change user passwords. The default is pam_unix
# The "nullok" option allows users to change an empty password, else
# empty passwords are treated as locked accounts.
#
# (Add `md5' after the module name to enable MD5 passwords)
#
# The "obscure" option replaces the old `OBSCURE_CHECKS_ENAB' option in
# login.defs. Also the "min" and "max" options enforce the length of the
# new password.
password required pam_unix.so nullok obscure min=4 max=8 md5
# Alternate strength checking for password. Note that this
# requires the libpam-cracklib package to be installed.
# You will need to comment out the password line above and
# uncomment the next two in order to use this.
# (Replaces the `OBSCURE_CHECKS_ENAB', `CRACKLIB_DICTPATH')
#
# password required pam_cracklib.so retry=3 minlen=6 difok=3
# password required pam_unix.so use_authtok nullok md5
scripts/puestos/mintldap/ldap/common-session.bak
#
# /etc/pam.d/common-session - session-related modules common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of modules that define tasks to be performed
# at the start and end of sessions of *any* kind (both interactive and
# non-interactive). The default is pam_unix.
#
session required pam_unix.so
scripts/puestos/mintldap/ldap/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
netgroup: files ldap
automount: files ldap
passwd: files ldap [NOTFOUND=return] db
group: files ldap [NOTFOUND=return] db
shadow: files ldap
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
# netgroup: nis
scripts/puestos/mintldap/ldap/common-auth
#
# /etc/pam.d/common-auth - authentication settings common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of the authentication modules that define
# the central authentication scheme for use on the system
# (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the
# traditional Unix authentication mechanisms.
#
auth optional pam_group.so
auth sufficient pam_unix.so shadow nullok_secure
auth required pam_ldap.so use_first_pass
scripts/puestos/mintldap/ldap/common-password
#
# /etc/pam.d/common-password - password-related modules common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of modules that define the services to be
#used to change user passwords. The default is pam_unix
# The "nullok" option allows users to change an empty password, else
# empty passwords are treated as locked accounts.
#
# (Add `md5' after the module name to enable MD5 passwords)
#
# The "obscure" option replaces the old `OBSCURE_CHECKS_ENAB' option in
# login.defs. Also the "min" and "max" options enforce the length of the
# new password.
password sufficient pam_ldap.so
password required pam_unix.so nullok obscure min=4 max=8 md5
# Alternate strength checking for password. Note that this
# requires the libpam-cracklib package to be installed.
# You will need to comment out the password line above and
# uncomment the next two in order to use this.
# (Replaces the `OBSCURE_CHECKS_ENAB', `CRACKLIB_DICTPATH')
#
# password required pam_cracklib.so retry=3 minlen=6 difok=3
# password required pam_unix.so use_authtok nullok md5
scripts/puestos/mintldap/ldap/common-session
#
# /etc/pam.d/common-session - session-related modules common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of modules that define tasks to be performed
# at the start and end of sessions of *any* kind (both interactive and
# non-interactive). The default is pam_unix.
#
session required pam_env.so
session optional pam_foreground.so
session required pam_unix.so
scripts/puestos/mintldap/ldap/nss-ldapd.conf
# /etc/nss-ldapd.conf
# nss-ldapd configuration file. See nss-ldapd.conf(5)
# for details.
# The user and group nslcd should run as.
uid nslcd
gid nslcd
# The location at which the LDAP server(s) should be reachable.
... Diferencia truncada por exceder el máximo tamaño visualizable.

Exportar a: Unified diff