# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

Bucle de password expirado en ldap nativo RHEL contra Sun LDAP


Me ha resultado difícil concretar el problema en tan poco espacio en el título. La situación es la siguiente:

  • Sun LDAP Server
  • Cliente Red Hat Enterprise Linux con LDAP nativo configurado contra el servidor de Sun

La configuración del LDAP Nativo en Red Hat es relativamente sencilla, únicamente lanzamos el authconfig-tui o pasamos los parámetros correspondientes al comando authconfig. Una vez configurado, ya deberíamos poder autenticarnos con los usuarios del LDAP.

En este caso concreto, todo funcionaba correctamente a excepción de la autenticación. Si hacíamos su desde root a cualquier usuario del LDAP funcionaba, la salida del comando getent passwd o getent shadow mostraba todos los usuarios, podíamos hacer ldapsearch, etc.

Con la autenticación, nos pedía continuamente cambiar la password porque había expirado:

$ ssh test@10.0.0.15
You are required to change your LDAP password immediately.
Warning: Your password has expired, please change it now
...
...

Por lo que sea, los servidores Solaris en nuestro caso hacían caso omiso a los atributos de expiración, llevabamos años sin problemas, pero RHEL sí que los revisaba. Todo debería haber funcionado una vez cambiada la clave, pero los servidores RHEL seguían pidiendo continuamente que se cambiara (en Solaris sí que se accedía con la nueva clave).

Para poder acceder correctamente desde Red Hat (y creo que desde cualquier máquina Linux) hay que prestar especialmente atención a estos atributos de LDAP para cada usuario:

shadowMax:
shadowMin:
shadowWarning:

Si están presentes, es necesario que su valor este vacío (no 0) para solucionar el problema. O eso, o especificar una expiración de 99999 en shadowMax… una vez cambiado accederéis sin problemas vía ssh  y con el resto de autenticación.

Comando chage: tiempo de vida de claves y usuarios en GNU/Linux


Hace un tiempo vimos como establecer la caducidad de claves en Linux con el comando passwd. Hoy vamos a aprender otra forma de hacerlo, en este caso con el comando chage, con el que además podemos especificar la caducidad de la cuenta de un usuario concreto, no sólo de su clave.

Echando un vistazo a la ayuda del comando vemos claramente la función de cada uno de los parámetros:

$ chage --help
Modo de uso: chage [opciones] [USUARIO]

Opciones:
  -d, --lastday ULTIMO_DÍA      establece el último cambio de clave a
                                ULTIMO_DÍA
  -E, --expiredate FECHA_EXP    establece la fecha de caducidad de la
                                cuenta a FECHA_EXP
  -h, --help                    muestra este mensaje de ayuda y termina
  -I, --inactive INACTIV        desactiva la cuenta después de INACTIV
                                días desde la fecha de expiración
  -l, --list                    muestra la información de envejecimiento
                                de la cuenta
  -m, --mindays DÍAS_MIN        establece el número mínimo de días antes
                                de cambiar la clave a DÍAS_MIN
  -M, --maxdays DÍAS_MAX        establece el número máximo de días antes
                                de cambiar la clave a DÍAS_MAX
  -W, --warndays DÍAS_AVISO     establece el número de días de aviso
                                a DÍAS_AVISO

Como podéis ver, se puede especifica la fecha exacta en la que expirará la clave de acceso, los días permitidos tras la expiración de la cuenta hasta que se desactiva por completo, los días de aviso, etc. Vamos a ver unos ejemplos:

Cambiar la fecha de expiración de la cuenta al día 2011-9-28 al usuario foo

# chage -E 2011-9-28 foo

Listamos los atributos de caducidad especificados para esta cuenta:

# chage -l foo
Último cambio de contraseña					: sep 07, 2011
La contraseña caduca					: nunca
Contraseña inactiva					: nunca
La cuenta caduca						: sep 28, 2011
Mínimo número de días entre cambios de contraseña		: 0
Máximo número de días entre cambios de contraseña		: 99999
Número de días de aviso antes de que caduque la contraseña	: 7

Cambiar número de días entre cambios de clave (15) y la caducidad por inactividad de la clave (150)

# chage -m 15 -M 15 -I 150 foo
# chage -l foo
Último cambio de contraseña					: sep 07, 2011
La contraseña caduca					: sep 22, 2011
Contraseña inactiva					: feb 19, 2012
La cuenta caduca						: sep 28, 2011
Mínimo número de días entre cambios de contraseña		: 15
Máximo número de días entre cambios de contraseña		: 15
Número de días de aviso antes de que caduque la contraseña	: 7

Obligar a cambiar la clave en el próximo intento de acceso

# chage -d 0 foo

Configurar la caducidad de claves en Linux


El otro día aprendimos a securizar la gestión de claves en Linux mediante PAM, pero olvidé comentar un punto importante dentro de la gestión de contraseñas en un sistema GNU/Linux, se trata de la caducidad y expiración de claves de usuario.

Mediante passwd podemos forzar que la clave de un usuario caduque pasados X días., Así mismo, también podemos configurar el número de días que el usuario será avisado antes del cambio obligado de clave y el número de días una vez pasado este límite hasta que la cuenta se desactive.

Estos tres parámetros son los siguientes:

-x, --maxdays DÍAS_MÁX        establece a DÍAS_MÁX el número máximo de días antes del cambio de la contraseña
-w, --warndays DÍAS_AVISO     establece los días de aviso de expiración a DÍAS_AVISO
-i, --inactive INACTIVO       establece la inactividad de la contraseña tras su expiración a INACTIVO

Vamos a poner un ejemplo, si quisieramos que la clave del usuario “pruebas” caducara pasados 180 días, que le avisara durante los cinco últimos días de validez de la clave, y que si tras pasados 15 días sin modificar la clave se bloqueara, utilizaríamos la siguiente línea de comandos:

# passwd pruebas -x 180 -w 5 -i 15

Regenerar clave de administrador de iLO sin saber la password


Si hemos perdido la clave del usuario Administrator en una iLO y no queremos reiniciar el sistema para cambiar la clave o generar un nuevo usuario, podemos regenerarla (sin conocer la actual) desde la línea de comandos del servidor (GNU/Linux) en cuestión.

Lo primero que necesitamos es tener instalado hponcfg (revisad este artículo para su instalación: Cambiar password de HP iLO desde Linux).

Después utilizamos el siguiente XML para solicitar una nueva clave de Administrador contra la iLO:

<RIBCL VERSION="2.0">
<LOGIN USER_LOGIN="adminname" PASSWORD="password">
<USER_INFO MODE="write">
<MOD_USER USER_LOGIN="Administrator">
<PASSWORD value="aqui_la_clave"/>
</MOD_USER>
</USER_INFO>
</LOGIN>
</RIBCL>

No es necesario especificar el usuario admin y su clave actual, eso lo dejamos tal y como está. Únicamente cambiamos el valor PASSWORD aqui_la_clave. Una vez modificado el XML lo ejecutamos contra la iLO:

# hponcfg -f resetpass.xml

Ya deberíais poder acceder a la iLO con los nuevos datos.

Cambiar parámetros de red HP iLO desde Linux


Seguimos repasando algunas de las posibilidades que nos ofrece hponcfg, utilidad que permite cambiar desde el sistema operativo GNU/Linux la configuración de la iLO (Integrated Lights-Out) de servidores HP Proliant.

En este caso vamos a ver como modificar los parámetros de red (IP, máscara, puerta de enlace, etc) que se utilizan para posteriormente acceder a la web de gestión iLO.

Seguimos utilizando los ejemplos en formato XML de HP Lights-Out XML PERL Scripting Sample for Linux. A continuación el utilizado para realizar modificaciones en los parámetros de red:

<!--         RIBCL Sample Script for HP Lights-Out Products          -->
<!--Copyright (c) 2003,2010 Hewlett-Packard Development Company, L.P.-->
<!-- Description:  This is a sample XML script to configure the      -->
<!--               network settings for following devices:           -->
<!--                 Integrated Lights-Out 3 (iLO 3)                 -->
<!--                 Integrated Lights-Out 2 (iLO 2)                 -->
<!--                 Integrated Lights-Out (iLO)                     -->
<!--                 Remote Insight Lights-Out Edition II (RILOE II) -->
<!-- NOTE:  You will need to replace the USER_LOGIN and PASSWORD     -->
<!--        and other values inside the quotation marks with values  -->
<!--        that are appropriate for your environment.               -->
<!--        Double check all values before executing this script.    -->
<!--        Incorrect or mismatched network settings may cause you   -->
<!--        to lose the ability to connect to your Lights-Out device.-->
<!--        Use CPQLOCFG.EXE ver 2.26 or greater with this script.   -->
<!--        This script was written for iLO 3 firmware version 1.00  -->
<!--        release.                                                 -->
<!--        See "HP Integrated Lights-Out Management Processor       -->
<!--        Scripting and Command Line Resource Guide" for more      -->
<!--        information on scripting and the syntax of the RIBCL     -->
<!--        XML.                                                     -->
<!--        Firmware support infomation for this script:             -->
<!--            iLO 3 - All versions.                                -->
<!--            iLO 2 - All versions.                                -->
<!--              iLO - All versions.                                -->
<!--         RILOE II - All versions.                                -->
<RIBCL VERSION="2.0">
<LOGIN USER_LOGIN="adminname" PASSWORD="password">
<RIB_INFO MODE="write">
<MOD_NETWORK_SETTINGS>
<!--        Firmware support infomation for next 4 tags :      -->
<!--            iLO 3 - All versions.                          -->
<!--            iLO 2 - All versions.                          -->
<!--              iLO - All versions.                          -->
<!--         RILOE II - None.                                  -->
<ENABLE_NIC value="Yes"/>
<REG_DDNS_SERVER value="Yes"/>
<PING_GATEWAY value="No"/>
<DHCP_DOMAIN_NAME value="Yes"/>
<!--        Firmware support infomation for next 22 tags :     -->
<!--            iLO 3 - All versions.                          -->
<!--            iLO 2 - All versions.                          -->
<!--              iLO - All versions.                          -->
<!--         RILOE II - All versions.                          -->
<SPEED_AUTOSELECT value="YES"/>
<NIC_SPEED value="100"/>
<FULL_DUPLEX value="Yes"/>
<DHCP_ENABLE value="No"/>
<IP_ADDRESS value="172.20.60.152"/>
<SUBNET_MASK value="255.255.255.0"/>
<GATEWAY_IP_ADDRESS value="172.20.60.1"/>
<DNS_NAME value="demoilo"/>
<DOMAIN_NAME value="internal.com"/>
<DHCP_GATEWAY value="Yes"/>
<DHCP_DNS_SERVER value="Yes"/>
<DHCP_WINS_SERVER value="Yes"/>
<DHCP_STATIC_ROUTE value="Yes"/>
<REG_WINS_SERVER value="Yes"/>
<PRIM_DNS_SERVER value="0.0.0.0"/>
<SEC_DNS_SERVER value="0.0.0.0"/>
<TER_DNS_SERVER value="0.0.0.0"/>
<PRIM_WINS_SERVER value="0.0.0.0"/>
<SEC_WINS_SERVER value="0.0.0.0"/>
<STATIC_ROUTE_1 DEST="0.0.0.0" GATEWAY="0.0.0.0"/>
<STATIC_ROUTE_2 DEST="0.0.0.0" GATEWAY="0.0.0.0"/>
<STATIC_ROUTE_3 DEST="0.0.0.0" GATEWAY="0.0.0.0"/>
<!--        Firmware support infomation for next 4 tags :      -->
<!--            iLO 3 - All versions.                          -->
<!--            iLO 2 - None.                                  -->
<!--              iLO - None.                                  -->
<!--         RILOE II - None.                                  -->
<DHCP_SNTP_SETTINGS value="Yes"/>
<SNTP_SERVER1 value="0.0.0.0"/>
<SNTP_SERVER2 value="0.0.0.0"/>
<TIMEZONE value="America/Anchorage"/>
<!-- This tag can be used on an iLO blade server to force iLO  -->
<!-- to attempt to get an IP address from the signal backplane -->
<!-- in a server enclosure.  The IP address must be set prior  -->
<!-- with Mod_Enc_Bay_IP_Settings.xml                          -->
<!--        Firmware support infomation for next tag:          -->
<!--            iLO 3 - All versions.                          -->
<!--            iLO 2 - All versions.                          -->
<!--              iLO - All versions.                          -->
<!--         RILOE II - None.                                  -->
<!--
<ENCLOSURE_IP_ENABLE VALUE="Yes"/>
-->
<!--        Firmware support infomation for next tag:          -->
<!--            iLO 3 - None.                                  -->
<!--            iLO 2 - None.                                  -->
<!--              iLO - None.                                  -->
<!--         RILOE II - All versions.                          -->
<!--
<WEB_AGENT_IP_ADDRESS value="192.168.0.1"/>
-->
</MOD_NETWORK_SETTINGS>
</RIB_INFO>
</LOGIN>
</RIBCL>

En este XML tenemos que modificar primero los datos de conexión como administrador USER_LOGIN y PASSWORD y posteriormente a los parámetros que cada uno necesitemos modificar (IP_ADDRESS, SUBNET_MASK, GATEWAY_IP_ADDRESS…).

Si únicamente necesitáis cambiar los valores básicos, ahí va un script reducido y más fácil de entender:

<RIBCL VERSION="2.0">
<LOGIN USER_LOGIN="xxxxxxxx" PASSWORD="xxxxxxx">
<RIB_INFO MODE="WRITE" >
<MOD_NETWORK_SETTINGS>
<IP_ADDRESS VALUE = "192.168.0.100"/>
<SUBNET_MASK VALUE = "255.255.255.0"/>
<GATEWAY_IP_ADDRESS VALUE = "192.168.0.1"/>
<PRIM_DNS_SERVER value = "192.168.0.222"/>
<DHCP_ENABLE VALUE = "N"/>
</MOD_NETWORK_SETTINGS>
</RIB_INFO>
</LOGIN>
</RIBCL>

Una vez modificado todo el script a conveniencia lo ejecutamos contra la aplicación:

# hponcfg -f cambio-red.xml

Si en la salida de ejecución del comando recibimos “Script succeeded” el cambio debería haber funcionado y ya podríamos acceder con los nuevos datos.

Cambiar password de HP iLO desde Linux


Hponcfg es una utilidad que forma parte del HP Proliant Support Pack y que nos permite gestionar desde el sistema operativo todos los parámetros de iLO (Integrated Lights-Out) de servidores HP Proliant. Una vez descargado simplemente se instala como cualquier rpm:

#rpm -i hponcfg-3.0.0-0.noarch.rpm

Hoy vamos a ver como modificar la clave de acceso a la interfaz web de gestión de iLO sin tener que reiniciar el sistema y hacerlo en el arranque.

HP nos ofrece una serie de scripts en formato XML de ejemplo (HP Lights-Out XML PERL Scripting Sample for Linux) que podemos utilizar para realizar todas estas labores. Iré mostrando estos días los que me parecen más interesantes.

Para cambiar la clave de un usuario de acceso a iLO utilizaremos el siguiente script XML:

<!--         RIBCL Sample Script for HP Lights-Out Products          -->
<!--Copyright (c) 2003,2010 Hewlett-Packard Development Company, L.P.-->
<!-- Description:  This is a sample XML script to change a user's    -->
<!--               password in the database of local users on        -->
<!--               following devices:                                -->
<!--                 Integrated Lights-Out 3 (iLO 3)                 -->
<!--                 Integrated Lights-Out 2 (iLO 2)                 -->
<!--                 Integrated Lights-Out (iLO)                     -->
<!--                 Remote Insight Lights-Out Edition II (RILOE II) -->
<!-- NOTE:  You will need to replace the values inside the quote     -->
<!--        marks with values that are appropriate for your          -->
<!--        environment.                                             -->
<!--        Use CPQLOCFG.EXE ver 2.26 or greater with this script    -->
<!--        This script was written for iLO 3 firmware version 1.00. -->
<!--        release.                                                 -->
<!--        See "HP Integrated Lights-Out Management Processor       -->
<!--        Scripting and Command Line Resource Guide" for more      -->
<!--        information on scripting and the syntax of the RIBCL     -->
<!--        XML.                                                     -->
<!--        Firmware support infomation for this script:             -->
<!--            iLO 3 - All versions.                                -->
<!--            iLO 2 - All versions.                                -->
<!--              iLO - All versions.                                -->
<!--         RILOE II - All versions.                                -->
<RIBCL VERSION="2.0">
<LOGIN USER_LOGIN="adminname" PASSWORD="password">
<USER_INFO MODE="write">
<MOD_USER USER_LOGIN="username">
<PASSWORD value="newpassword"/>
</MOD_USER>
</USER_INFO>
</LOGIN>
</RIBCL>

Como véis es bastante sencillo, solo tenemos que especificar los datos de acceso del usuario administrador actual y posteriormente elegir los nuevos datos del usuario a modificar. Finalmente ejecutamos el script del siguiente modo:

# hponcfg -f cambio-clave.xml

Si en la salida de ejecución del comando recibimos “Script succeeded” el cambio debería haber funcionado y ya podríamos acceder con los nuevos datos.

MySQL: Conectar al servidor sin escribir el password


A través del fichero de configuración MySQL my.cnf (Linux) my.ini (Windows) podemos establecer ciertas directivas que se aplicarán a los clientes que se conecten al servicio MySQL. Estas directivas han de configurarse dentro de la sección [client].

Antes de nada, hay que asegurarse que el fichero my.cnf solamente tenga lectura y escritura para el propietario:

-rw------- 1 root root 310 may 26  2008 my.cnf

Algo muy interesante y que nos ahorra tiempo es la opción de configurar que cuando nos conectamos como cliente al servidor MySQL no nos pida contraseña, para ello añadimos las siguientes opciones en la sección [client] del my.cnf:

[client]
user = my_user
password = my_password
port = 3306
host = localhost

Simplemente estableced el usuario, la clave, el puerto y el host desde el que queréis conectaros (en mi caso en local), reiniciad el servicio SQL y ya podréis acceder sin escribir la clave al cliente MySQL, ejemplo:

# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7496
Server version: 5.0.81-community MySQL Community Edition (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

Otra forma es creando un fichero en nuestra $HOME con el nombre .my.cnf y que contenga estas directivas:

# cat /root/.my.cnf
[client]
user="xxxx"
pass="xxxx"

psql: Acceder al prompt de PostgreSQL sin contraseña


A continuación os indico el modo de acceder a la shell de PostgreSQL (psql) sin necesidad de escribir la contraseña, os será útil a la hora de utilizar la shell unix + psql para la creación de scripts.

Para acceder a PSQL sin clave tenéis que crear un fichero llamado .pgpass en vuestra home (/home/usuario, /root/,…). El contenido del fichero es el siguiente:

hostname:port:database:username:password

Podéis utilizar el * en cualquiera de los puntos para por ejemplo, tener acceso a todas las bases de datos. Posteriormente simplemente cambiad cada parámetro por el que deseéis y finalmente asignadle los siguientes permisos:

chmod 0600 ~/.pgpass