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
- 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
- Para cifrar y descifrar la contraseña, usamos otra contraseña adicional
- Mostramos el contenido del fichero vault.txt para demostrar que la contraseña se ha guardado de manera encriptada
- 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
Mi pasión por la tecnología me lleva constantemente a explorar las últimas tendencias y aplicaciones, buscando siempre formas de implementar soluciones innovadoras que mejoren la eficiencia. En puerto53.com comparto contenido valioso para ayudar a otros profesionales y entusiastas de la informática a navegar y dominar el complejo mundo de la tecnología. Mi especialidad en Linux RedHat.
Más sobre mí en el este enlace,