En esta ocasión veremos como poder cifrar nuestras contraseñas en scripts bajo GNU/Linux mediante OpenSSL.
Sin más preámbulos comenzamos.
Instalación OpenSSL
apt get openssl sshpass
En primer lugar, vamos a ver cómo cifrar la contraseña ( ‘eBq82d3d3.#232413123ybW0d.-dL8veq8M9’ ) y volcar esta en un archivo de texto.
echo 'eBq82d3d3.#232413123ybW0d.-dL8veq8M9' | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 -salt -pass pass:'Fft@8#9xbepF!VFH.-P4JOidx' > .clave.creb
Explicación del comando
- echo ‘eBq82d3d3.#232413123ybW0d.-dL8veq8M9’: Envio la contraseña
- enc -aes-256-cbc : el tipo de codificación
- -md sha512 : Resumen del mensaje (hash)
- -a : Aplica codificación base-64 después de la fase de cifrado y antes de la fase de descifrado.
- -pbkdf2 : utiliza el algoritmo algoritmo PBKDF2 (Función de derivación de clave basada en contraseña 2).
- -iter 100000 : establece el número de cálculos que utilizará PBKDF2.
- -salt : Empleamos salt para que la salida del hash siempre sea diferente.
- -pass pass:’Fft@8#9xbepF!VFH.-P4JOidx» : La contraseña que necesitaremos para descifrar la contraseña encriptada (2413123ybW0d.-dL8veq8M9′).
- > .clave.creb: Guardamos la salida en un archivo de texto.
Si leemos ahora el archivo de texto .clave.creb nos muestra un hash en base-64
U2FsdGVkX18c4alBzI/HqsC/H0Rc8UvY8pIOF2urnyIW3C/JEM0WxD1JsyJzIPhMoi+gNpkBHSx2Y42puQEzwQ==
Para poder descifrar la contraseña lanzamos el siguiente comando
cat clave.cred | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass:'Fft@8#9xbepF!VFH.-P4JOidx'
eBq82d3d3.#232413123ybW0d.-dL8veq8M9
Ejemplo de uso
Configuramos el archivo /root/jobs/clave.creb
user00001
U2FsdGVkX18c4alBzI/HqsC/H0Rc8UvY8pIOF2urnyIW3C/JEM0WxD1JsyJzIPhMoi+gNpkBHSx2Y42puQEzwQ==
Configuramos los permisos de lectura
chown root:root /root/jobs/.clave.creb
chmod 400 /root/jobs/.clave.creb
Creamos nuestro script /root/jobs/uploadfiles.sh
#!/bin/bash
USER=`head -n 1 /root/jobs/.clave.creb`
PASSWORD=`tail -1 /root/jobs/.clave.creb | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass:'Fft@8#9xbepF!VFH.-P4JOidx'`
IP=192.168.1.100
SRCDIR=/root/jobs/files/*.csv
sshpass -p $PASSWORD sftp $USER@$IP:$SRCDIR
Configuramos los permisos del scrript
chown root:root /root/jobs/uploadfiles.sh
chmod 500 /root/jobs/uploadfiles.sh
:wq!
Discupa la posible pregunta absura rokitoh pero… ¿qué ventajas tendría guardarla cifrada?
Entiendo la utilidad de guardarla en .clave.creb: no hardcodear contraseñas y dar permisos; pero no veo ninguna mejora en guardarla cifrada en el archivo y hardcodear una clave de descifrado en el script. De hecho le veo inconvenientes.
Muchas gracias, un saludo