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:
- Instalar el paquete self-service-password.
- Crear un servidor virtual en https://usuarios.venexma.net.
- 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]