Gestión de contraseñas en el repositorio de código

El otro día me topé con un post interesante de John Resig (creador de la biblioteca JQuery). así que he decidido compartirlo un poco.

¿Cómo gestionar las contraseñas en el repositorio de código?

Normalmente lo que se hace es crear un archivo de configuración en blanco, por ejemplo conf/sample-setting.json que tiene una estructura básica pero ningún dato confidencial.

// Copy to conf/settings.json
// and fill these in with your login details!
{
  "db": {
    "username": "",
    "password": ""
  }
}

Así si alguien necesita los detalles se le envían por correo electrónico (MAL) o coge los datos del super Excel de contraseñas (MAL) o en el mejor de los casos estarán en Keepass o similar.

John cuenta que aprendió una técnica (en los comentarios del post hay una interesante discusión) puede ser una buena solución.

La idea es mantener una versión cifrada del archivo de configuración en el código fuente y a continuación, proporcionar un medio por el cual un usuario pueda cifrar y descifrar los datos.

En este caso podemos usar el mismo archivo de configuración que antes, pero ahora relleno.

Lo primero será asegurarse de que este archivo es ignorao, pra ello debemos insertar esta linea en el archivo .gitignore:

conf / setting.json

Ahora lo que hacemos es crear un archivo de configuración con los datos reales:

conf/settings.json (* Do not check this in to source control!!)

{
  "db": {
    "username": "cool_guy",
    "password": "A1B2C3"
  }
}

Por último, tendremos que crear un script (por ejemplo Makefile) para que un usuario pueda cifrar y descifrar el archivo. Este script utiliza OpenSSL, en particular CAST5.

OpenSSL lee los archivos correspondientes (dependiendo de si estamos cifrando o descifrando), entonces nos pedirá una contraseña para cifrar/descifrar: Aquí dejo el archivo:

Makefile

. PHONY: encrypt_conf decrypt_conf _pwd_prompt
 
CONF_FILE = conf / settings.json
 
# "Privado" tarea para la eco instrucciones
_pwd_prompt:
@ Echo "Contact jeresig@gmail.com la contraseña."
 
# Para crear conf / settings.json
decrypt_conf: _pwd_prompt
openssl CAST5-cbc-d-en $ {} CONF_FILE. CAST5-out $ {} CONF_FILE
chmod 600 $ {} CONF_FILE
 
# Para actualizar conf / settings.json
encrypt_conf: _pwd_prompt
openssl CAST5-cbc-e-en $ {} CONF_FILE-out $ {} CONF_FILE. CAST5

Teniendo esto el siguiente paso es simple:

make encrypt_conf

Al hacerlo deberemos poner la contraseña con la que se cifra el archivo de configuración:

Contact XXXg@gmail.com for the password.
enter cast5-cbc decryption password:

Escribe la contraseña y NO LA OLVIDES, porque es “imposible” de recuperar.

Llegados a este punto tendremos un archivo tal que así: conf/setting.json.cast5 ahora solo tenemos que confirmar los cambios:

git add .gitignore Makefile conf/settings.json.cast5

git commit -m “Adding in an encrypted config file.”

Ahora cada vez que alguien descarga el código fuente necesita rellenar el archivo vacío del principio o bien obtener la contraseña anterior.

Para finalizar solo nos queda poder descifrar el archivo de configuración.

make decrypt_conf

Si alguna vez deseamos cambiar la contraseña, solo tenemos que ejecutar make encrypt_conf y confirmar el nuevo archivo conf/settings.json.cast5

Existen un par de proyectos interesantes para poder gestionar todo esto, los conozco porque están en los comentarios del blog y me han parecido interesantes.

passw3rd

Alojado aquí: https://github.com/oreoshake/passw3rd

tpkg

Tambien en github: http://tpkg.github.com/

 

Anuncios

Comenta la entrada

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s