Automatizar tareas en Linux con scripts en BASH es algo maravilloso. En algunos casos necesitamos desarrollar algún script que se conecte a otro server, o que utilice la función SUDO (Super User DO, o "hacer como super user") pero esto revelaría el password de la cuenta en la lista de SUDOers, por lo cual, una buena manera de aumentar el nivel de seguridad, es salt-hasheando el password.
Antes de comenzar, si no están muy en tema con saltear hashes, les recomiendo mi artículo ¿Cómo funcionan las contraseñas y por qué recomiendo SALT HASH? explico en profundidad que es saltear un hash y por qué está buenisimo.
Para poder utilizar passwords con salt hash necesitaremos que nuestro sistema cuente con openssl y sshpass. Ambas disponibles en RHEL 8
DEBIAN
sudo apt install openssl
sudo apt install sshpass
RHEL/CENTOS/FEDORA
dnf (o yum) install openssl
dnf (o yum) install sshpass
En el siguiente ejemplo, el password de mi user sería miPassword:
echo 'miPassword' | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 -salt -pass pass:'PassParaDesencriptar' > .llave.txt
chmod 600 llave.txt
(notese el . para hacer el archivo oculto)
Una vez que tenemos la llave guardada y chmodeada para que solo nosotras/os tengamos acceso, podemos pasar a desarrollar nuestro script.
#Si utilizaremos el script para conectarnos a otro server, podemos asignar el host a otra variable
enc -aes-256-cbc: El tipo de encoder. Utilicé el standard avanzado de encriptación. llave cifrada de 256 bits con block chaining.
#!/bin/bash
# Hacemos algunas variables para poder conectarnos o sudear
USUARIO=alexia
MIPASS=$(cat .llave.txt | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass:'PassParaDesencriptar')
#si el proposito es correr una serie de comandos con sudo se puede utilizar el formato
echo $MIPASS | sudo -S comandos aquí.
echo $MIPASS | sudo -S comandos aquí.
#Si utilizaremos el script para conectarnos a otro server, podemos asignar el host a otra variable
SERVIDOR=otroserver0004srv
sshpass -p $MIPASS ssh -T $USUARIO@$SERVIDOR
#comandos en el server remoto aqui
Parametros:
enc -aes-256-cbc: El tipo de encoder. Utilicé el standard avanzado de encriptación. llave cifrada de 256 bits con block chaining.
-md sha512: el tipo de hash. Utilizo el algorítmo criptográfico SHA512.
-a: Este parametro le dice a OpenSSL que aplique el encoding de tipo Base64 antes y después del proceso de encriptado y desencriptado.
-pbkdf2: Utilizando una función derivada 2 basada en un password hace virtualmente imposible la obtención de la clave a través de un ataque de fuerza bruta.
-iter 100000: Asigna el numero de calculos que hará la función pbkdf2.
-salt: se le agrega un salt random al password hasheado que hará imposible desencriptarlo, aun si conocen parcialmente el password de tu cuenta.
-pass pass: ’PassParaDesencriptar’: El password que usaremos para desencriptar el password. (No es el password de la cuenta)
-salt: se le agrega un salt random al password hasheado que hará imposible desencriptarlo, aun si conocen parcialmente el password de tu cuenta.
-pass pass: ’PassParaDesencriptar’: El password que usaremos para desencriptar el password. (No es el password de la cuenta)
Espero que les sirva.
0 comentarios:
Publicar un comentario