Recuperar el acceso al iBMC de un Huawei 1288H V5 desde Linux con ipmitool

  Linux

Recuperar el acceso al iBMC de un Huawei 1288H V5 desde Linux con ipmitool

Hace poco me encontré con un Huawei FusionServer 1288H V5 al que tenía acceso como root desde el sistema operativo, pero del que no disponía de la contraseña del iBMC.

El servidor funcionaba perfectamente, por lo que reiniciarlo únicamente para entrar en la BIOS y cambiar la contraseña del iBMC no era precisamente la opción que más me apetecía.

Como el sistema operativo tenía acceso al BMC mediante IPMI, decidí comprobar hasta dónde podía llegar utilizando ipmitool.

Al final fue posible cambiar la contraseña del usuario Administrator del iBMC directamente desde Linux, sin conocer la contraseña anterior y sin reiniciar el servidor.

Comprobar que tenemos acceso al BMC desde Linux

Lo primero es comprobar si ipmitool está instalado:

which ipmitool
ipmitool -V

Si está disponible, podemos comprobar si el sistema operativo tiene comunicación local con el BMC:

ipmitool mc info

En mi caso obtuve una salida similar a esta:

Device ID                 : 1
Device Revision           : 1
Firmware Revision         : 5.04
IPMI Version              : 2.0
Manufacturer ID           : 2011
Device Available          : yes
Provides Device SDRs      : yes
Additional Device Support :
    Sensor Device
    SDR Repository Device
    SEL Device
    FRU Inventory Device
    IPMB Event Generator
    Chassis Device

Esto ya confirma algo importante: el sistema operativo puede comunicarse directamente con el controlador de gestión.

Listar los usuarios del iBMC

El siguiente paso fue comprobar qué usuarios estaban configurados en el iBMC:

ipmitool user list 1

La salida mostraba algo similar a esto:

ID  Name             Callin  Link Auth  IPMI Msg   Channel Priv Limit
1                    true    true       true       NO ACCESS
2   Administrator    true    true       true       ADMINISTRATOR
3                    true    true       true       NO ACCESS
4                    true    true       true       NO ACCESS
5                    true    true       true       NO ACCESS
...

Lo importante aquí es identificar el ID del usuario, no solamente su nombre.

En este caso:

ID 2 = Administrator

Por tanto, cualquier operación posterior sobre el usuario Administrator tenía que realizarla utilizando el ID 2.

Cambiar la contraseña de Administrator

En principio el cambio es tan sencillo como ejecutar:

ipmitool user set password 2 'NUEVA_CONTRASEÑA'

Sin embargo, aquí fue donde me encontré con la parte interesante del problema.

En los primeros intentos el iBMC rechazaba el cambio y aparecían errores similares a:

IPMI command failed
Set User Password command failed (user 2)

Esto puede hacer pensar inicialmente que el iBMC no permite modificar la contraseña desde el sistema operativo, que el usuario está bloqueado o incluso que es obligatorio entrar en BIOS para recuperar el acceso.

En mi caso no era ninguna de esas cosas.

El problema estaba relacionado con la política de complejidad de contraseñas del iBMC.

Al utilizar una contraseña que cumplía correctamente los requisitos de complejidad, el comando funcionó:

ipmitool user set password 2 'CONTRASEÑA_COMPLEJA'

Evidentemente, no pongo aquí la contraseña utilizada. Lo recomendable es utilizar una contraseña suficientemente larga que combine mayúsculas, minúsculas, números y caracteres especiales.

Una vez aceptado el comando, no es necesario modificar nada más en el usuario Administrator, ya que mantiene su ID y sus privilegios de administrador.

Podemos comprobarlo nuevamente con:

ipmitool user list 1

Y deberíamos seguir viendo:

2   Administrator    true    true       true       ADMINISTRATOR

Probar el acceso al iBMC

Una vez modificada la contraseña, ya podemos probar el acceso desde la interfaz web del iBMC o mediante SSH.

Por SSH:

ssh Administrator@IP_DEL_IBMC

Introducimos la nueva contraseña y, si todo ha ido correctamente, recuperaremos el acceso al controlador de gestión.

Una prueba interesante: crear un usuario temporal

Durante las pruebas también quise comprobar si el problema podía estar relacionado con una restricción para administrar usuarios del iBMC desde el propio sistema operativo.

Como había IDs disponibles, utilicé temporalmente el ID 3 para crear un usuario de prueba:

ipmitool user set name 3 rescueadmin

Al volver a consultar los usuarios:

ipmitool user list 1

el nuevo usuario aparecía correctamente:

3   rescueadmin      true    true       true       NO ACCESS

Esto demostraba que el iBMC estaba aceptando operaciones de administración de usuarios mediante IPMI desde el sistema operativo.

Para establecer una contraseña al usuario:

ipmitool user set password 3 'CONTRASEÑA_COMPLEJA'

Si quisiéramos utilizar realmente esta cuenta, además habría que habilitarla:

ipmitool user enable 3

Y asignarle privilegios en el canal correspondiente:

ipmitool channel setaccess 1 3 callin=on link=on ipmi=on privilege=4

Después podemos comprobar el resultado:

ipmitool user list 1

El usuario debería aparecer entonces con privilegios de administrador.

En mi caso finalmente no fue necesario utilizar este usuario, porque conseguí modificar directamente la contraseña del usuario Administrator.

Eliminar el usuario temporal

Como el usuario rescueadmin solamente se había creado para hacer pruebas, lo eliminé una vez recuperado el acceso.

Primero lo deshabilitamos:

ipmitool user disable 3

Y después eliminamos su nombre:

ipmitool user set name 3 ""

Finalmente comprobamos que todo ha quedado limpio:

ipmitool user list 1

El ID 3 debería volver a aparecer vacío y sin privilegios:

3                    true    true       true       NO ACCESS

Conclusión

Si tenemos acceso root al sistema operativo de un Huawei FusionServer 1288H V5 pero hemos perdido la contraseña del iBMC, merece la pena comprobar el acceso IPMI local antes de plantearnos reiniciar el servidor.

En este caso fue posible recuperar completamente el acceso ejecutando unos pocos comandos desde Linux.

El procedimiento básico terminó reduciéndose a:

# Comprobar que ipmitool está disponible
which ipmitool
ipmitool -V

# Comprobar comunicación con el BMC
ipmitool mc info

# Listar usuarios del iBMC
ipmitool user list 1

# Identificar el ID de Administrator
# En este caso era el ID 2

# Establecer una nueva contraseña
ipmitool user set password 2 'NUEVA_CONTRASEÑA_COMPLEJA'

# Verificar usuarios y privilegios
ipmitool user list 1

# Probar acceso SSH
ssh Administrator@IP_DEL_IBMC

El detalle que más tiempo me hizo perder fue que un error al ejecutar user set password no significaba necesariamente que el iBMC estuviera bloqueando la modificación de usuarios desde Linux.

En este caso concreto, el problema era simplemente que la contraseña que estaba intentando establecer no cumplía los requisitos de complejidad esperados por el iBMC.

Al utilizar una contraseña adecuada, el cambio se realizó correctamente.

Y lo más importante: todo el procedimiento se realizó sin reiniciar el servidor, sin entrar en BIOS y sin afectar al sistema operativo ni a las aplicaciones que estaban ejecutándose.

Chuleta de comandos

Para tener todo el procedimiento resumido:

# ============================================
# Huawei FusionServer 1288H V5
# Recuperación de acceso al iBMC desde Linux
# ============================================

# Comprobar ipmitool
which ipmitool
ipmitool -V


# Obtener información del BMC
ipmitool mc info


# Listar usuarios del canal 1
ipmitool user list 1


# Ejemplo:
#
# ID  Name             Channel Priv Limit
# 1                    NO ACCESS
# 2   Administrator    ADMINISTRATOR
# 3                    NO ACCESS
#
# En este ejemplo Administrator tiene ID 2.


# Cambiar la contraseña de Administrator
#
# IMPORTANTE:
# Utilizar una contraseña que cumpla la política
# de complejidad configurada en el iBMC.

ipmitool user set password 2 'NUEVA_CONTRASEÑA_COMPLEJA'


# Verificar
ipmitool user list 1


# Probar acceso remoto
ssh Administrator@IP_DEL_IBMC


# ============================================
# OPCIONAL: crear un usuario temporal
# ============================================

# Utilizar un ID que esté libre
ipmitool user set name 3 rescueadmin


# Asignar contraseña
ipmitool user set password 3 'CONTRASEÑA_COMPLEJA'


# Habilitar usuario
ipmitool user enable 3


# Asignar privilegios de administrador
ipmitool channel setaccess 1 3 callin=on link=on ipmi=on privilege=4


# Comprobar
ipmitool user list 1


# ============================================
# ELIMINAR EL USUARIO TEMPORAL
# ============================================

ipmitool user disable 3

ipmitool user set name 3 ""


# Comprobar que ha desaparecido
ipmitool user list 1

Nota de seguridad

Este procedimiento requiere privilegios elevados en el sistema operativo y acceso local al BMC.

Precisamente por eso, disponer de acceso root a un servidor físico debe considerarse también un posible camino hacia su interfaz de gestión hardware.

Después de recuperar el acceso es recomendable revisar los usuarios existentes:

ipmitool user list 1

y asegurarse de que no hayan quedado cuentas temporales, usuarios desconocidos o privilegios que ya no sean necesarios.

También es recomendable guardar la nueva contraseña del iBMC en el gestor de credenciales utilizado por la organización y evitar dejar contraseñas en scripts, históricos de shell o documentación técnica.