¿Cuál es la mejor práctica para tratar con contraseñas en repositorios git?


Tengo un pequeño script de Bash que uso para acceder a Twitter y mostrar una notificación de Growl en ciertas situaciones. ¿Cuál es la mejor manera de manejar el almacenamiento de mi contraseña con el script?

Me gustaría enviar este script al repositorio de git y ponerlo a disposición en GitHub, pero me pregunto cuál es la mejor manera de mantener mi nombre de usuario/contraseña privada mientras hago esto. Actualmente la contraseña se almacena en el propio script. No puedo eliminarlo justo antes de empujar porque todas las confirmaciones antiguas contendrá la contraseña. Desarrollar sin la contraseña no es una opción. Me imagino que debería estar almacenando la contraseña en un archivo de configuración externo, pero pensé en verificar si había una forma establecida de manejar esto antes de intentar armar algo.

Author: Harry B, 2010-03-07

5 answers

La forma típica de hacer esto es leer la información de la contraseña de un archivo de configuración. Si su archivo de configuración se llama foobar.config, entonces enviaría un archivo llamado foobar.config.example al repositorio, que contiene datos de muestra. Para ejecutar su programa, debe crear un archivo local (no rastreado) llamado foobar.config con sus datos de contraseña reales.

Para filtrar tu contraseña existente de confirmaciones anteriores, consulta la página de ayuda de GitHub en Removing sensitive data.

 199
Author: Greg Hewgill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-07 20:46:25

Un enfoque puede ser establecer una contraseña (o clave API) utilizando una variable de entorno. Así que esta contraseña está fuera de control de revisión.

Con Bash, puede establecer la variable de entorno usando

export YOUR_ENV_VARIABLE=your_password

Este enfoque se puede usar con servicios de integración continua como Travis, su código (sin contraseña) almacenado en un repositorio GitHub puede ser ejecutado por Travis (con su contraseña configurada usando la variable de entorno).

Con Bash, puede obtener valor de una variable de entorno usando:

echo $YOUR_ENV_VARIABLE

Con Python, puede obtener el valor de una variable de entorno usando:

import os
print os.environ['YOUR_ENV_VARIABLE']

PD: tenga en cuenta que probablemente es un poco arriesgado (pero es una práctica bastante común) https://www.bleepingcomputer.com/news/security/javascript-packages-caught-stealing-environment-variables/

PS2: este artículo titulado" Cómo almacenar claves API de forma segura " https://dev.to/bpedro/how-to-securely-store-api-keys-ab6 puede ser interesante para leer

 22
Author: scls,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-31 08:22:18

Lo que Greg dijo pero yo añadiría que es una buena idea para comprobar en un archivo foobar.config-TEMPLATE.

Debe contener nombres de ejemplo, contraseñas u otra información de configuración. Entonces es muy obvio lo que el verdadero foobar.config debe contener, sin tener que buscar en todo el código para qué valores deben estar presentes en foobar.config y qué formato deben tener.

A menudo los valores de configuración pueden no ser obvios, como cadenas de conexión de bases de datos y cosas similares.

 16
Author: Prof. Falken,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:41

Se puede usar Vault que asegura, almacena y controla el acceso a tokens, contraseñas, certificados, claves API, etc. Por ejemplo Ansible utiliza el Ansible Vault que se ocupa de las contraseñas o certificados utilizados en los libros de jugadas

 3
Author: El Ruso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-07 11:09:43

Si estás usando ruby on rails, la gema Figaro es muy buena, fácil y confiable. También tiene un factor de dolor de cabeza bajo con el entorno de producción.

 1
Author: ahnbizcad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-07 11:02:22