Herramientas personales

TechNotes:Automatizar alta de usuarios mediante useradd

De DeisterWiki

Saltar a: navegación, buscar

Los usuarios de la aplicación WebStudio que requieran realizar operaciones transaccionales, por ejemplo sobre sistemas ERP, deberán tener una identificación única en los servidores de bases de datos. Salvo si dispone de un sistema de autentificación mediante LDAP o Active Directory cada usuario deberá disponer de una entrada única y específica en la tabla de usuarios del sistema /etc/passwd. En este documento se explican los pasos que pueden realizarse para sistematizar la creación automática de usuarios en dicha tabla.


Contenido

[editar] 1 Cambios de configuración para otorgar permiso sudo useradd al usuario informix

Un método para facilitar la creación de usuarios físicos en los sistemas de bases de datos consiste en delegar el permiso de ejecución del comando useradd al usuario informix, facilitando la invocación de la orden sudo /usr/sbin/useradd desde el sistema WebStudio durante el proceso de alta de nuevos usuarios.


[editar] 1.1 Modificar el fichero /etc/default/useradd

El siguiente ajuste es opcional, anula la emisión de email automatico en la ejecución de useradd :

CREATE_MAIL_SPOOL=no


[editar] 1.2 Modificar el fichero /etc/sudoers

Incluya las siguientes líneas para evitar interacción tty :

## Desactivar tty al usuario informix para evitar el error de sistema : 
##     sudo: sorry, you must have a tty to run sudo !
Defaults:informix !requiretty


Incluya las siguientes líneas para otorgar permisos de ejecución al usuario informix para los comandos relacionados :

## INTERPRETACIÓN DE LOS PARÁMETRES sudo : 
##    %informix - Todos los usuarios del grupo informix
##    ALL=      - Desde cualquier Host/IP
##    (ALL)     - Pueden convertirse en cualquier usuario
##    NOPASSWD  - Sin requerir contraseña
##    : usr/sbin/useradd, /usr/sbin/userdel, /usr/sbin/usermod
##              - La lista de las aplicaciones separadas por coma a las que tienen acceso.
## useradd from informix
%informix ALL=(ALL)    NOPASSWD: /usr/sbin/useradd, /usr/sbin/userdel, /usr/sbin/usermod


[editar] 1.3 Autentificar permiso SSH a otros servidores

Generalmente en la mayoría de configuraciones existirán más de un servidor de bases de datos, sobre los cuales también deberemos proceder a crear los mismos usuarios.


La invocación de creación de usuarios siempre se realiza desde el servidor principal, es decir, desde el servidor donde esté instalada la base de datos de configuración (wic_conf). La shell de entrada, ejecutada desde WebStudio, es la /CONFIG/SCRIPTS/wic_useradd.sh (ver en el siguiente apartado). Esta shell, caso de que deba crearse el usuario en un servidor distinto al principal, ejecutará una shell de mismo nombre en el servidor indicado en su primer parámetro de entrada. La ejecución se realiza mediante invocación de la instrucción siguiente :

ssh $SERVER -t "/CONFIG/SCRIPTS/wic_useradd.sh '"$1"' '"$2"' '"$3"' '"$4"' '"$5"'"


Para evitar la introducción de la password durante la conexión con ssh procederemos a autentificar al usuario informix desde el servidor principal en los restantes servidores. Ejemplo:


[editar] 1.3.1 Generar las claves RSA (private/public) de autentificación en el servidor principal

[informix@SRVPRIMARY ~]$ ssh-keygen

[editar] 1.3.2 Autentificar el servidor de réplica SRVHDR

Ahora procederemos a copiar la clave pública al servidor de réplica:

[informix@SRVPRIMARY ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub SRVHDR

Comprobación de conexión al servidor (sin password) :

[informix@SRVPRIMARY ~]$ ssh informix@SRVHDR

[editar] 1.3.3 Autentificar el servidor de DataWareHouse SRVDWH

Ahora procederemos a copiar la clave pública al servidor de DataWareHouse :

[informix@SRVPRIMARY ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub SRVDWH

Comprobación de conexión al servidor (sin password) :

[informix@SRVPRIMARY ~]$ ssh informix@SRVDWH

[editar] 2 Instalación de la shell wic_useradd.sh

Debe instalar la shell wic_useradd.sh en el directorio /CONFIG/SCRIPTS de cada uno de los servidores de bases de datos.


Realice las modificaciones que sean necesarias para informar a la shell el nombre de cada uno de los servidores de bases de datos y cualquier otro cambio que crea conveniente.


Realice pruebas de funcionamiento operativo ejecutando la shell desde el usuario informix, por ejemplo :

[informix@SRVPRIMARY ~]$ /CONFIG/SCRIPTS/wic_useradd.sh  primary  user_test  "User test name"  passwd  deister

La shell espera cinco parámetros de entrada, según :

  1. SERVER
  2. USERNAME
  3. COMMENT
  4. PASSWORD
  5. GROUP


#!/bin/bash
 
# ------------------------------------------------------------------------------
# wic_useradd.sh
# ------------------------------------------------------------------------------
FILE_OUT=/tmp/ifmx_useradd.log
#rm -rf $FILE_OUT
 
ARGS=$#
if [ $ARGS != 5 ];then
    echo "HOST:[$HOSTNAME] - Incorrect number of arguments. Expected [5] , Received [${ARGS}]" >> $FILE_OUT
    echo "HOST:[$HOSTNAME] - Incorrect number of arguments. Expected [5] , Received [${ARGS}]"
    exit 1
fi
 
SERVER="$1"
USERNAME="$2"
COMMENT="$3"
PASSWORD="$4"
GROUP="deister"
 
echo "================================================================================" >>  $FILE_OUT
echo "SHELL: $0               `date` "                                                  >>  $FILE_OUT
echo "Server:[$SERVER]  Username:[$USERNAME]  Comment:[$COMMENT]  Group:[$GROUP]"       >>  $FILE_OUT
 
 
# ------------------------------------------------------------------------------
#  
# ------------------------------------------------------------------------------
if [ "$SERVER" == "primary" -o $SERVER == "$HOSTNAME" ]; then
 
    # ------------------------------------------------------------------------------
    # Crypt password : 
    # ------------------------------------------------------------------------------
    PASS=$(/usr/bin/perl -e 'print crypt($ARGV[0], "password")' $PASSWORD)
 
    /bin/egrep "^${USERNAME}:" /etc/passwd >/dev/null
    EXISTS_USER=$?
    if [ $EXISTS_USER -eq 0 ]; then
        # el echo es solo para test y verificar lo que se intenta ejecutar
        # echo "sudo /usr/sbin/usermod -c "$COMMENT" -p $PASS $USERNAME" >> $FILE_OUT
        # sudo /usr/sbin/usermod -c "$COMMENT" -p $PASS $USERNAME       2>> $FILE_OUT
        echo "HOST:[$HOSTNAME] - User $USERNAME already exists."         >> $FILE_OUT
        exit 0
    else
        # el echo es solo para test y verificar lo que se intenta ejecutar
        echo "sudo /usr/sbin/useradd -g $GROUP -M -s /sbin/nologin -c "$COMMENT" -p $PASS $USERNAME" >> $FILE_OUT
        sudo /usr/sbin/useradd -g $GROUP -M -s /sbin/nologin -c "$COMMENT" -p $PASS $USERNAME        2>> $FILE_OUT
    fi
    RETURN=$?
 
else
 
    SRVHDR="SRVHDR"       # Servidor HDR
    SRVDWH="SRVDWH"       # Servidor Datawarehouse 
    if [ "$SERVER" == "$SRVHDR" -o "$SERVER" == "$SRVDWH" ]; then
        # En el echo ponemos [params list] en vez de $* para no hacer visible la password !
        echo "ssh $SERVER -t /CONFIG/SCRIPTS/wic_useradd.sh [params list...]" >> $FILE_OUT
        ssh $SERVER -t "/CONFIG/SCRIPTS/wic_useradd.sh '"$1"' '"$2"' '"$3"' '"$4"' '"$5"'"
        RETURN=$?
    else
        echo "HOST:[$HOSTNAME] - Incorrect server: $SERVER"  >> $FILE_OUT
        echo "HOST:[$HOSTNAME] - Incorrect server: $SERVER"
        exit 1
    fi
 
fi
 
 
if [ $RETURN -ne 0 ]; then
    echo "HOST:[$HOSTNAME] - Error adding/modifying user: $RETURN"  >> $FILE_OUT
    echo "HOST:[$HOSTNAME] - Error adding/modifying user: $RETURN"
    exit $RETURN
else
    exit 0
fi

[editar] 3 Activar la invocación automática de la shell wic_useradd.sh

Para que el proceso de creación de usuarios invoque la shell wic_useradd.sh debe proceder a instalar en la base de datos wic_conf el programa SPL wic_useradd. El código original de este programa está catalogado en el diccionario de sistema wic con el nombre wic_useradd_sample. Simplemente debe proceder a cambiar el nombre wic_useradd_sample por wic_useradd e instalarlo manualmente en la base de datos wic_conf.


Con el SPL instalado, cuando se ejecute el proceso de creación de usuarios desde la función Copia de cualquiera de los formularios wic_user o wic_dbms_users, se procederá a ejecutar la shell wic_useradd.sh para cada uno de los servidores en función de las bases de datos a las que deba acceder el usuario.


En la base de datos de control y configuración (wic_conf), la definición del servidor de bases de datos principal debe tener informado el servidor secundario (mirror). Sin esta característica los usuarios físicos no se crearán en el secundario.


Atención, la password del usuario físico será facilitada desde el servidor WebStudio, habiéndose generado de forma aleatoria y encriptada.