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/