Linux / machine-id: consultar el identificador y preparar imágenes para clonar
machine-id identifica una instalación de Linux basada en systemd y se guarda normalmente en /etc/machine-id. Suele mantenerse al reiniciar o cambiar el nombre del host. Al clonar un servidor o una máquina virtual (VM), debe preparar la imagen para que las instancias no compartan el identificador.
¿Qué es machine-id?
machine-id es un valor de 128 bits que se usa para identificar el sistema local. Normalmente, el archivo /etc/machine-id lo almacena en 32 caracteres hexadecimales en minúscula más un salto de línea. systemd establece este valor durante el proceso de instalación o en el primer arranque, y después lo usa en los arranques posteriores.
Este valor no es un nombre de servidor fácil de reconocer por una persona. Mientras que el nombre del host es un nombre que el administrador puede establecer o cambiar, machine-id se usa como identificador de la instancia del sistema operativo. Para cambiar el nombre del host, consulte Cambiar el nombre del host en Rocky Linux.
Además, machine-id es diferente del número de serie del hardware o de la dirección MAC de la tarjeta de red. El valor no cambia solo con el reemplazo del hardware o la modificación de la configuración de red. El formato y el comportamiento de inicialización se describen en el manual machine-id(5) de systemd.
Comprobar el machine-id actual
Para verificar el valor actual en un sistema que administra, ejecute el siguiente comando.
cat /etc/machine-id
Una instalación inicializada muestra normalmente 32 caracteres hexadecimales en minúscula y un salto de línea; el valor no puede ser todo ceros. Si el archivo está vacío o no existe, no escriba inmediatamente una cadena improvisada. Compruebe primero si se trata de una imagen, un contenedor o un sistema de archivos de solo lectura y cómo se inicializa durante el arranque.
No se recomienda pegar el ID real tal cual en publicaciones, registros públicos o pantallas de solicitud de soporte. La documentación de systemd considera este valor como información de identificación que no debe exponerse directamente a entornos no confiables, especialmente en la red. Si la aplicación necesita crear un identificador fijo que pueda ser público, no use el original machine-id directamente, sino que considere un método de identificador derivado usando claves específicas para cada propósito.
¿Cambiará si se reinicia o se cambia el nombre del host?
Por lo general, no cambia. machine-id no se genera cada vez que se inicia el sistema, sino que es un identificador persistente asignado a la instancia de instalación del sistema. Es independiente del nombre del host, dirección IP y dirección MAC.
Por lo tanto, si dos servidores con nombres diferentes tienen el mismo machine-id, podría ser una señal de que se debe revisar un proceso de replicación o inicialización, en lugar de solo un duplicado de nombre de host. Por el contrario, tener el mismo nombre de host no significa necesariamente que machine-id también sea igual.
Cuando sea necesario inicializar el machine-id
Un caso representativo es cuando se utiliza una imagen de sistema operativo como base para múltiples máquinas virtuales, instancias en la nube o contenedores. Si se clona tal cual el disco de un sistema ya instalado, /etc/machine-id también se copiará, lo que permitirá que diferentes instancias usen el mismo ID. Para que cada nueva instancia tenga un ID único, es necesario inicializar la imagen original destinada a clonación mientras está apagada y preparar que durante el primer arranque de cada clon se configure un ID nuevo.
Por otro lado, no es necesario inicializar un servidor que se está utilizando normalmente solo por el motivo de querer cambiar el valor. Proceda únicamente cuando haya una razón clara, como una duplicación de ID o la creación de un procedimiento de distribución de imágenes. systemd explica que podría haber identificadores de red derivados de este valor. Se recomienda también consultar la guía de creación segura de imágenes de systemd.
Comportamiento en el primer arranque según el estado del archivo
Los métodos para vaciar o eliminar /etc/machine-id no son exactamente iguales. Primero debe definir hasta qué punto se ejecutará la inicialización.
| Estado del archivo de la imagen | Tratamiento del identificador | Determinación del primer arranque por systemd |
|---|---|---|
| Archivo ausente | Intento de inicialización con las fuentes disponibles durante el arranque | Se considera el primer arranque |
Contiene uninitialized |
Intento de inicialización con las fuentes disponibles durante el arranque | Se considera el primer arranque |
| Existe pero tiene 0 bytes | Intento de inicialización con las fuentes disponibles durante el arranque | No se considera el primer arranque |
| ID existente válido | Uso del valor existente | No se considera el primer arranque |
La tabla describe la detección automática habitual. La opción del núcleo systemd.condition_first_boot= puede modificar esa detección, y una configuración explícita de systemd.machine_id= puede sustituir el identificador del archivo. Inicializar un archivo vacío no garantiza por sí solo un valor aleatorio diferente: revise también el ID de D-Bus y los UUID que proporciona la plataforma virtual.
Si se considera el primer arranque, se pueden ejecutar inicializaciones adicionales para unidades, etc., designadas como ConditionFirstBoot=yes. Los archivos vacíos permiten generar un nuevo ID sin iniciar este proceso de primer arranque. En sistemas de archivos de solo lectura, puede ser necesario montar temporalmente el ID sobre el archivo mediante bind mount, por lo que también se debe verificar si eliminar el archivo es un método adecuado. Para obtener reglas detalladas, consulte machine-id(5) First Boot Semantics.
Procedimiento para inicializar desde una imagen para clonación
El procedimiento siguiente presupone una imagen confiable y apagada, cuyo sistema de archivos raíz está montado en /mnt/image-root desde otro sistema de gestión. Sustituya esa ruta por el montaje real y compruebe también su origen: no debe ser el sistema activo del host. Antes de escribir con tee o truncate, verifique que el archivo y sus directorios padre no sean enlaces que resuelvan fuera de la imagen. Si no puede garantizar ese límite, deténgase y use una herramienta de preparación de imágenes adecuada. Estos comandos no deben aplicarse al /etc/machine-id del servidor en ejecución.
- Apague la VM o la imagen original y haga una copia de seguridad o un snapshot. Si modifica la plantilla que sirve de base a varios servidores, conserve también el original.
- Monte la imagen en un sistema de gestión separado. Verifique con el siguiente comando si
/mnt/image-rootes el punto de montaje de la imagen real y observe el estado de los dos archivos ID.
findmnt --mountpoint /mnt/image-root
ls -l /mnt/image-root/etc/machine-id /mnt/image-root/var/lib/dbus/machine-id
Si findmnt no identifica el montaje esperado, no continúe. D-Bus es un sistema de comunicación entre procesos; su archivo /var/lib/dbus/machine-id puede ser un enlace hacia /etc/machine-id o un archivo normal independiente. Examine los dos objetos dentro de la imagen: un archivo separado con el valor anterior puede hacer que systemd lo reutilice.
Para ejecutar también la inicialización del primer arranque
Si systemd debe reconocer la primera ejecución en una imagen escribible, verifique nuevamente el punto de montaje antes de eliminar los archivos dentro de la imagen.
sudo rm -- /mnt/image-root/etc/machine-id
O si se trata de una imagen cuyo archivo debe mantenerse, puede registrar uninitialized y un salto de línea como se muestra a continuación. Solo elija uno de los dos métodos.
printf 'uninitialized\n' | sudo tee /mnt/image-root/etc/machine-id > /dev/null
Si /var/lib/dbus/machine-id es un archivo normal separado y se ha guardado un ID anterior, este archivo también debe inicializarse. Solo ejecute el siguiente comando para la imagen finalizada si ha confirmado con ls -l ejecutado previamente que no es un enlace simbólico.
sudo rm -- /mnt/image-root/var/lib/dbus/machine-id
Si es un enlace simbólico, no ejecute el comando anterior y verifique el destino al que apunta el enlace y la configuración de la distribución. systemd puede reutilizar un ID de D-Bus separado si /etc/machine-id está vacío o no existe, por lo que es importante verificar la relación de las dos rutas.
Para crear solo un ID nuevo y evitar la primera operación de arranque
Para establecer solo un nuevo ID sin volver a ejecutar las unidades exclusivas del primer arranque, deje el archivo dentro de la imagen como un archivo vacío.
sudo truncate -s 0 -- /mnt/image-root/etc/machine-id
En este caso, systemd puede establecer un nuevo ID porque el archivo está vacío, pero no lo considerará como un primer arranque. También se puede aplicar dejar un archivo vacío en una imagen de solo lectura. Incluso si se elige este método, si el archivo de ID de D-Bus separado aún contiene el valor anterior, será necesario revisar e inicializar según el apartado anterior. También verifique el comportamiento de la herramienta de creación de imágenes y la relevancia de la unidad de primer arranque.
Después del trabajo, desmonte la imagen normalmente y arranque el clon. Si distribuye la imagen a múltiples dispositivos, compare cada /etc/machine-id solo dentro del entorno de gestión para ver si son diferentes. No deje los valores reales en documentos públicos ni en registros. Simplemente ejecutar systemd-machine-id-setup no genera siempre un ID aleatorio. Esta herramienta puede reutilizar valores existentes como el ID de D-Bus. El orden de operación se encuentra en el manual de systemd-machine-id-setup(1).
Significado y limitaciones de los dos comandos más comunes
Los dos comandos siguientes se muestran para analizar sus efectos, no como una receta para ejecutar en un servidor activo. No los copie en el sistema de gestión: la preparación de una imagen debe realizarse dentro de la copia apagada, con el punto de montaje y las rutas ya verificados.
sudo truncate -s 0 /etc/machine-id
sudo rm -f /var/lib/dbus/machine-id
El primer comando vacía el archivo /etc/machine-id a 0 bytes sin eliminarlo. En el siguiente arranque, systemd puede establecer un nuevo ID, pero, como se muestra en la tabla anterior, un archivo vacío no se considera el primer arranque, por lo que no es adecuado para ejecutar unidades exclusivas del primer arranque. Tampoco cambia inmediatamente el ID que ya está siendo usado por systemd y los servicios en ejecución solo con este comando.
El segundo comando elimina la ruta de ID de D-Bus. Si este archivo es un archivo normal separado que contiene el ID anterior, puede ser necesario para evitar la reutilización. Sin embargo, si la ruta apunta a un enlace simbólico /etc/machine-id, rm -f solo elimina el enlace. Debido a -f, no se mostrará un error aunque el archivo no exista, por lo que no se debe asumir que ambos ID se han inicializado correctamente solo por haber ejecutado el comando.
No se recomienda copiar y ejecutar ambos comandos directamente en un servidor en funcionamiento. Primero, verifique la relación entre archivos y enlaces con ls -l /etc/machine-id /var/lib/dbus/machine-id, y si se trata de una imagen clonada, procese desde la imagen detenida como se mencionó anteriormente. Después de la inicialización, debe iniciar cada clon para verificar si se guardó el nuevo ID y si los servicios funcionan correctamente. systemd puede usar otros ID proporcionados por el entorno además del ID de D-Bus cuando /etc/machine-id está vacío. Consulte la secuencia de inicialización de machine-id(5).
Si se detecta un ID duplicado en un servidor en funcionamiento
No se recomienda eliminar o vaciar directamente /etc/machine-id en el servidor en funcionamiento y luego continuar usando el servicio. Los procesos en ejecución pueden recordar la ID existente y el estado del diario, la red o las aplicaciones podría verse afectado. Primero, verifique qué servidor es el original y cuál es la réplica, luego decida cuál réplica va a modificar y planifique el tiempo de inactividad.
Después de asegurar la copia de seguridad de los servicios y datos afectados, detenga la réplica y realice el procedimiento de modificación de la imagen del disco en un entorno separado, lo cual es más seguro. Luego, arranque y verifique si se ha establecido una nueva ID, si no se superpone con otros servidores y si la conexión de red y los servicios relevantes funcionan correctamente. Si está preparando la plantilla completa de la VM, también debe manejar las claves de host SSH, semillas aleatorias, nombres de host, etc., para cada instancia, además de machine-id. El procedimiento de creación de plantillas de VM de Red Hat explica el uso de virt-sysprep. Esta herramienta puede reinicializar otros estados del sistema, por lo que debe usarla después de verificar el objetivo y la tarea a realizar.
Preguntas frecuentes
¿Se puede usar machine-id como contraseña o token de autenticación?
No. Es un identificador del sistema, no una clave secreta para autenticar usuarios. No debe exponer el valor original al exterior y tampoco debe diseñarse como contraseña.
¿Si los valores son iguales, significa que los dos sistemas son completamente iguales?
No se puede afirmar eso de manera categórica. Es posible que el mismo ID se haya copiado durante el proceso de clonación, por lo que se debe verificar la configuración real del sistema y el proceso de distribución de la imagen.
Si cambio el nombre del host con hostnamectl, ¿también cambia el machine-id?
No. El nombre del host y machine-id son valores distintos con propósitos y ubicaciones de almacenamiento diferentes. Cambiar solo el nombre del host no genera un nuevo /etc/machine-id.
En una imagen para clonación, ¿es correcto eliminar los archivos o simplemente vaciarlos?
Para que se ejecuten las unidades de primer arranque, el archivo ausente o el contenido uninitialized son distintos de un archivo de cero bytes. El archivo vacío permite inicializar el ID sin activar por sí solo esa detección de primer arranque. Elija según su imagen y sus requisitos de solo lectura, revise D-Bus y las fuentes de identidad de la plataforma y compruebe el resultado en cada clon.




