Cómo Encriptar y Desencriptar contraseñas con OpenSSL dentro de scripts en Bash

Es muy habitual generar automatismos con scripts bash que realicen ciertas funciones. Por ejemplo, entrar en una base de datos con su usuario y contraseña correspondiente para ejecutar un programa pl/sql.

Ver tutorial de programación en bash

El problema habitual es que los usuarios y las contraseñas se guardan sin ningún tipo de seguridad dentro del script, lo que puede provocar un problema de vulnerabilidad si un usuario malintencionado se hace con el acceso al script.

La solución pasa por encrptar y desencriptar las contraseñas dentro del propio script.

Veámos un ejemplo sencillo.

Código fuente del script

# cat crypt.sh
#!/bin/bash

# Contraseña secreta, por ejemplo, de una base de datos
PASSWD=S3cr3T

# Contraseña que usamos para el cifrado y el descrifrado
CRYPTPASSWD=D3crypT

echo
echo Contraseña que queremos encriptar: $PASSWD
echo

echo Contraseña que usamos para el cifado y el descifrado:
echo $CRYPTPASSWD
echo

echo Vamos a encriptar la contraseña en el fichero vault.txt con openssl
echo $PASSWD | openssl enc -aes-256-cbc -md sha512 -a -salt -pass pass:$CRYPTPASSWD > vault.txt
echo Ya hemos encriptado la contraseña
echo

echo "Mostramos el contenido del fichero cifrado (vault.txt)":
cat vault.txt
echo

echo Ahora vamos a desencriptar la contraseña almacenada en el fichero vault.txt:
cat vault.txt | openssl enc -aes-256-cbc -md sha512 -a -salt -pass pass:$CRYPTPASSWD -d
echo
#

Explicación del script

  1. Encriptamos una contraseña con OpenSSL y la guardamos en el fichero vault.txt. Lo vemos con el comando: echo $PASSWD | openssl enc -aes-256-cbc -md sha512 -a -salt -pass pass:$CRYPTPASSWD > vault.txt
  2. Para cifrar y descifrar la contraseña, usamos otra contraseña adicional
  3. Mostramos el contenido del fichero vault.txt para demostrar que la contraseña se ha guardado de manera encriptada
  4. Leemos el fichero vault.txt y utilizamos la contraseña de des/cifrado para mostrar su contenido original y lo mostramos en pantalla. Lo vemos con el comando: cat vault.txt | openssl enc -aes-256-cbc -md sha512 -a -salt -pass pass:$CRYPTPASSWD -d

Funcionamiento del script

# ./crypt.sh

Contraseña que queremos encriptar: S3cr3T

Contraseña que usamos para el cifado y el descifrado:
D3crypT

Vamos a encriptar la contraseña en el fichero vault.txt con openssl
Ya hemos encriptado la contraseña

Mostramos el contenido del fichero cifrado (vault.txt):
U2FsdGVkX1/Jpy1UJlWW/aN3A0o0nRhCfeoYXanGB4k=

Ahora vamos a desencriptar la contraseña almacenada en el fichero vault.txt:
S3cr3T

#

Ahora que conoces cómo cifrar contraseñas con OpenSSL, dentro del script puedes escribir la contraseña cifrada y llamar a una función para desencriptarla.

No olvides de asignar permisos de sólo lectura para el propietario del fichero vault.txt, según el ejemplo anterior.

Te puede interesar

¿Qué es un certificado SSL?

COMPÁRTEME

Deja un comentario