Encriptar passwords para utilizar en scripts de BASH

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 

Lo que hacemos es salt hashear el password y agregar un password random que nos servirá como desencriptador. Luego enviamos la llave generada a .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.

#!/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í.

#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)


Espero que les sirva. 



0 comentarios:

Copyright (C) 2019 - Chica de Sistemas. Con la tecnología de Blogger.

Páginas