Quelle est la meilleure pratique pour traiter les mots de passe dans les référentiels git?

J’ai un petit script Bash que j’utilise pour accéder à twitter et afficher une notification Growl dans certaines situations. Quelle est la meilleure façon de gérer le stockage de mon mot de passe avec le script?

Je voudrais commettre ce script sur le repository git et le rendre disponible sur GitHub, mais je me demande quelle est la meilleure façon de garder mon identifiant / mot de passe privé pendant cette opération. Actuellement, le mot de passe est stocké dans le script lui-même. Je ne peux pas l’enlever juste avant que je pousse parce que tous les anciens commits contiendront le mot de passe. Développer sans mot de passe n’est pas une option. J’imagine que je devrais stocker le mot de passe dans un fichier de configuration externe, mais j’ai pensé que je vérifierais s’il y avait un moyen établi pour gérer cela avant d’essayer et de mettre quelque chose ensemble.

La méthode classique consiste à lire les informations de mot de passe à partir d’un fichier de configuration. Si votre fichier de configuration s’appelle foobar.config , vous devez alors foobar.config un fichier appelé foobar.config.example dans le référentiel contenant des exemples de données. Pour exécuter votre programme, vous devez créer un fichier local (non suivi) appelé foobar.config avec vos données de mot de passe réelles .

Pour filtrer votre mot de passe existant des validations précédentes, consultez la page d’aide GitHub sur la suppression des données sensibles .

Une approche peut être de définir un mot de passe (ou une clé API) en utilisant une variable d’environnement. Donc, ce mot de passe est hors contrôle de révision.

Avec Bash, vous pouvez définir la variable d’environnement à l’aide de

 export YOUR_ENV_VARIABLE=your_password 

Cette approche peut être utilisée avec des services d’continuous integration tels que Travis , votre code (sans mot de passe) stocké dans un référentiel GitHub peut être exécuté par Travis (votre mot de passe étant défini à l’aide de la variable d’environnement).

Avec Bash, vous pouvez obtenir la valeur d’une variable d’environnement en utilisant:

 echo $YOUR_ENV_VARIABLE 

Avec Python, vous pouvez obtenir la valeur d’une variable d’environnement en utilisant:

 import os print os.environ['YOUR_ENV_VARIABLE'] 

PS: sachez que c’est probablement un peu risqué (mais c’est une pratique assez courante) https://www.bleepingcomputer.com/news/security/javascript-packages-caught-stealing-environment-variables/

PS2: cet article intitulé “Stockage sécurisé des clés API” https://dev.to/bpedro/how-to-securely-store-api-keys-ab6 peut être intéressant à lire

Ce que Greg a dit mais j’appendais que c’est une bonne idée de vérifier dans un fichier foobar.config-TEMPLATE .

Il doit contenir des exemples de noms, mots de passe ou autres informations de configuration. Ensuite, il est très évident que le vrai foobar.config devrait contenir, sans avoir à chercher dans tout le code pour lequel les valeurs doivent être présentes dans foobar.config et quel format elles devraient avoir.

Souvent, les valeurs de configuration peuvent ne pas être évidentes, comme les chaînes de connexion aux bases de données et autres choses similaires.

On peut utiliser Vault qui sécurise, stocke et contrôle l’access aux jetons, mots de passe, certificates, clés API, etc. Par exemple, Ansible utilise le coffre-fort Ansible Vault qui gère les mots de passe ou les certificates utilisés dans les playbooks.

Si vous utilisez du rbuy sur rails, le joyau Figaro est très bon, facile et fiable. Il a également un faible facteur de maux de tête dans l’environnement de production.