Daily Archives: 20 septiembre 2014

Migrando cuentas de usuario en LDAP

20 septiembre 2014

Hace tiempo ya que vengo observando un molesto problema con los identificadores numéricos de usuarios (uid) dentro de la red. Sus valores son lo bastante bajos como para colisionar con los usuarios normales que crean algunos paquetes, especialmente aquél que me fuerza a crear la instalación de una nueva máquina y que por el momento (hasta que no tenga automatizado dicho proceso) no puedo evitar.

Necesitaba efectuar un cambio y mover todos los valores numéricos a un rango válido pero fuera de uso. Lo que he hecho ha sido lo siguiente:

  • Instalar el paquete ldap-account-manager y habilitarlo como servicio en https://admin.venexma.net/lam.
  • Crear un perfil que incluyese atributos para una cuenta POSIXy una inetOrgPerson para disponer también de correo electrónico y teléfono móvil.
  • Volver a crear los grupos y los usuarios, ambos con valores numéricos por encima de 10000.
  • Añadir un servicio de cambio de contraseñas para los usuarios:
  • Comenzar el proceso de cambio y  testeo individualmente.
Proceso de cambio

El proceso de cambio de identificador de usuario consiste en:

  • Tomar nota del identificador antiguo y del nuevo.
  • Eliminar la entrada antigua del directorio.
  • Asignar una contraseña a la nueva
  • Buscar archivos asignados al identificador antiguo y cambiarlos por el nuevo:
    • Buscar y reemplazar en los archivos compartidos y los archivos propios en red.
    • Buscar y reemplazar en los archivos de su máquina personal.

El script que empleo para ello es el siguiente:

#!/bin/bash

set -e

#   Variables
VERSION=0.2
LOGFILE="/tmp/$(basename $0).log"

#   Parámetros
OLD_UID=$1
NEW_UID=$2
OLD_GID=$3
NEW_GID=$4

if [ $# -ne 4 ]; then
cat <<EOF >&2
$0 - $VERSION

uso: $0 old_uid new_uid old_gid new_gid

Busca en el directorio actual los archivos que pertenezcan al identificador
antiguo (old_uid) y los cambia al nuevo (new_uid). Realiza después la misma
operación con el grupo antiguo (old_gid) y el nuevo (new_gid).

Directorio actual: $(pwd)
Archivo de registro: $LOGFILE

EOF
exit 1
fi

echo «${0}: Buscando archivos en $(pwd)»

cat <<EOF >$LOGFILE
— $(date)
$(pwd)
cambio de UID ${OLD_UID} a ${NEW_UID}
cambio de GID ${OLD_GID} a ${NEW_GID}

EOF

echo -e «tcambiando usuario propietario …»
find . -user $OLD_UID -print -exec chown $NEW_UID {} ; | tee -a $LOGFILE

echo -e «tcambiando grupo propietario …»
find . -group $OLD_GID -print -exec chown $NEW_GID {} ;

echo «${0}: proceso registrado en $LOGFILE»
exit 0

[/sourcecode]