Tengo un pequeño script 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 lo hago. Actualmente, la contraseña se almacena en el script mismo. No puedo eliminarlo justo antes de presionar porque todas las confirmaciones antiguas contendrán la contraseña. Desarrollar sin 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 y armar algo.
.gitignore
archivo no se aplica a los archivos rastreados que ya están en el repositorio. Por ejemplo,git add -u
agregará un archivo modificado incluso si ya está en.gitignore
.Un enfoque puede ser establecer una contraseña (o clave API) utilizando una variable de entorno. Entonces esta contraseña está fuera de control de revisión.
Con Bash, puede establecer variables de entorno utilizando
Este enfoque se puede usar con servicios de integración continua como Travis , su código (sin contraseña) almacenado en un repositorio de GitHub puede ser ejecutado por Travis (con su contraseña configurada usando la variable de entorno).
Con Bash, puede obtener el valor de una variable de entorno utilizando:
Con Python, puede obtener el valor de una variable de entorno utilizando:
PD: tenga en cuenta que probablemente sea 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
dev.to
artículo titulado "Cómo almacenar claves API de forma segura" puede ser interesante de leer.fuente
Lo que Greg dijo pero agregaría que es una buena idea registrar 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 debe contener el foobar.config real, sin tener que buscar en todo el código qué valores deben estar presentes
foobar.config
y en qué formato deben tener.A menudo, los valores de configuración pueden no ser obvios, como cadenas de conexión de base de datos y cosas similares.
fuente
El manejo de las contraseñas en los repositorios se manejaría de diferentes maneras dependiendo de cuál sea su problema exacto.
1. No lo hagas.
Y algunas formas de evitar hacerlo están cubiertas: .gitignore, config.example, etc.
o 2. Hacer que el repositorio sea accesible solo para personas autorizadas
Es decir, personas a las que se les permite conocer la contraseña.
chmod
y grupos de usuarios vienen a la mente; ¿También problemas como los empleados de Github o AWS deberían poder ver cosas si aloja sus repositorios o servidores de forma externa?o 3. Cifre los datos confidenciales (propósito de esta respuesta)
Si desea almacenar sus archivos de configuración que contienen información confidencial (como contraseñas) en una ubicación pública, entonces debe cifrarse. Los archivos pueden descifrarse cuando se recuperan del repositorio, o incluso usarse directamente desde su forma cifrada.
A continuación se muestra un ejemplo de solución de JavaScript para usar datos de configuración cifrados.
Para que pueda recuperar un archivo de configuración cifrado escribiendo solo unas pocas líneas de Javascript.
Tenga en cuenta que poner un archivo
config.RSA
en un repositorio de git lo convertiría efectivamente en un archivo binario y, por lo tanto, perdería muchos de los beneficios de algo como Git, por ejemplo, la capacidad de elegir cambios en él.La solución a eso podría ser encriptar pares de valores clave o quizás solo valores. Puede encriptar todos los valores, por ejemplo, si tiene un archivo separado para información confidencial, o encriptar solo los valores sensibles si tiene todos los valores en un archivo. (vea abajo)
Mi ejemplo anterior es un poco inútil para cualquiera que quiera hacer una prueba con él, o como un ejemplo para comenzar, ya que supone la existencia de algunas claves RSA y un archivo de configuración cifrado
config.RSA
.Aquí hay algunas líneas adicionales de código agregadas para crear claves RSA y un archivo de configuración para jugar.
Cifrar solo valores
Puede descifrar un archivo de configuración con valores cifrados usando algo como esto.
Con cada elemento de configuración en una línea separada (por ejemplo,
Hello
yGoodbye
superior), Git reconocerá mejor lo que está sucediendo en un archivo y almacenará los cambios en los elementos de información como diferencias en lugar de archivos completos. Git también podrá gestionar fusiones y selecciones de cerezas, etc. mejor.Sin embargo, cuanto más desee controlar los cambios de versión a información confidencial, más se moverá hacia una solución de REPOSITORIO SEGURO (2) y más lejos de una solución de INFORMACIÓN ENCRITADA (3).
fuente
Se puede usar Vault, que asegura, almacena y controla el acceso a tokens, contraseñas, certificados, claves API, etc. Por ejemplo, Ansible usa Ansible Vault, que trata con contraseñas o certificados usados en libros
fuente
Aquí hay una técnica que uso:
Creo una carpeta en mi carpeta de inicio llamada:
.config
En esa carpeta coloco los archivos de configuración para cualquier cantidad de cosas que quiero externalizar contraseñas y claves.
Normalmente uso la sintaxis de nombre de dominio inverso, como:
com.example.databaseconfig
Luego, en el script bash, hago esto:
Esto
|| exit 1
hace que la secuencia de comandos salga si no puede cargar el archivo de configuración.Usé esa técnica para bash, python y scripts de hormigas.
Soy bastante paranoico y no creo que un archivo .gitignore sea lo suficientemente robusto como para evitar un registro inadvertido. Además, no hay nada que lo controle, por lo que si se realizara un registro, nadie se enteraría de cómo hacerlo.
Si una aplicación en particular requiere más de un archivo, creo una subcarpeta en lugar de un solo archivo.
fuente
Si usa rubí sobre rieles, la gema de Figaro es muy buena, fácil y confiable. También tiene un bajo factor de dolor de cabeza con el entorno de producción.
fuente
Confiar pero verificar.
En
.gitignore
esto excluiría un directorio "seguro" del repositorio:Pero comparto la paranoia de @ Michael Potter . Entonces, para verificar .gitignore, aquí hay una prueba de unidad de Python que generaría un klaxon si este directorio "seguro" alguna vez se registra. Y para verificar la verificación, también se prueba un directorio legítimo:
fuente