Quelle est la meilleure pratique pour gérer les mots de passe dans les dépôts git?
J'ai un petit script Bash que j'utilise pour accéder à twitter et affiche 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 tiens à commettre ce script pour le repo git et le rendre disponible sur GitHub, mais je me demandais quelle est la meilleure façon de garder mon login/mot de passe privé, tout cela est. Actuellement, le mot de passe est stocké dans le script lui-même. Je ne peux pas l'enlever juste avant que je push car tous les vieux s'engage contiennent le mot de passe. En développement sans mot de passe n'est pas une option. J'imagine que je devrais être à stocker le mot de passe dans un fichier de config, mais j'ai pensé que je voudrais vérifier pour voir si on trouvait un moyen de gérer ce avant j'ai essayé de mettre quelque chose ensemble.
Vous devez vous connecter pour publier un commentaire.
Typique de la façon de le faire est de lire le mot de passe info à partir d'un fichier de configuration. Si votre fichier de configuration est appelé
foobar.config
, alors vous commettez un fichier appeléfoobar.config.example
à l'espace de stockage contenant des données de l'échantillon. Pour exécuter votre programme, vous devez créer un local (pas de suivi) fichier appeléfoobar.config
avec votre réel données de mot de passe.Pour filtrer votre mot de passe existant à partir de la précédente s'engage, voir le GitHub page d'aide sur La suppression des données sensibles.
.gitignore
fichier ne s'applique pas aux dossiers qui sont déjà le référentiel. Par exemple,git add -u
va ajouter un fichier modifié, même si elle est déjà dans.gitignore
.Une approche peut-être de définir le mot de passe (ou clé API) à l'aide d'une variable d'environnement.
Si ce mot de passe est hors de contrôle de révision.
Avec Bash, vous pouvez définir la variable d'environnement à l'aide de
Cette approche peut être utilisée qu'avec l'intégration continue des services comme Travis, votre code (sans mot de passe) stockée dans un GitHub référentiel peut être exécuté par Travis (avec votre mot de passe étant définie à l'aide de la variable d'environnement).
Avec Bash, vous pouvez obtenir la valeur d'une variable d'environnement à l'aide de:
Avec Python, vous pouvez obtenir la valeur d'une variable d'environnement à l'aide de:
PS: sachez que c'est probablement un peu risqué (mais c'est assez fréquent) https://www.bleepingcomputer.com/news/security/javascript-packages-caught-stealing-environment-variables/
PS2: ce
dev.to
article intitulé "Comment stocker de manière sécurisée les clés API" peut être intéressant à lire.Ce Greg a dit mais j'ajouterais 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 d'autres info de config. Ensuite, il est très évident que le réel foobar.config devrait contenir, sans avoir à chercher dans tout le code de valeurs qui doivent être présents dans
foobar.config
et dans quel format ils doivent avoir.Souvent config valeurs peuvent être non évidente, comme la connexion à la base des chaînes et des choses semblables.
On peut utiliser Vault qui la fixe, les magasins, et les contrôles d'accès pour les jetons, les mots de passe, certificats, clés API, etc. Par exemple Ansible utilise le Ansible Voûte qui traite avec des mots de passe ou des certificats utilisés dans les tablettes playbook
Voici une technique que j'utilise:
J'ai créer un dossier dans mon dossier appelé:
.config
Dans ce dossier, je place les fichiers de configuration pour un certain nombre de choses que je veux pour externaliser les mots de passe et les clés.
J'utilise généralement de nom de domaine inverse syntaxe:
com.example.databaseconfig
Ensuite dans le script bash je fais ceci:
La
|| exit 1
provoque le script pour quitter si elle n'est pas en mesure de charger le fichier de configuration.J'ai utilisé cette technique pour bash, python, et des scripts ant.
Je suis assez parano et ne pense pas qu'un .gitignore fichier est suffisamment robuste pour éviter une inadvertance de l'enregistrement. De Plus, il n'y a rien de suivi, donc si un enregistrement ne se produisent pas qu'on pourrait trouver à traiter avec elle.
Si une application nécessite plus d'un fichier que j'ai crée un sous-dossier plutôt qu'un seul fichier.
Traiter avec des mots de passe dans les dépôts seraient traitées de différentes manières en fonction de votre problème.
1. Ne pas le faire.
Et les moyens d'éviter de faire sont couverts dans certaines réponses - .gitignore, config.exemple, etc
ou 2. Faire référentiel accessible uniquement aux personnes autorisées
I. e. les gens qui sont autorisés à connaître le mot de passe.
chmod
et les groupes d'utilisateurs vient à l'esprit; aussi des problèmes comme le devrait Github ou AWS employés le droit de voir les choses si vous hébergez vos dépôts ou des serveurs de l'extérieur?ou 3. Chiffrer les données sensibles (le but de cette réponse)
Si vous souhaitez stocker vos fichiers de configuration contenant des informations sensibles (comme les mots de passe) dans un lieu public, alors il doit être chiffré. Les fichiers peuvent être déchiffrées lorsqu'ils ont été récupérés à partir du référentiel, ou même utilisé directement à partir de leur forme cryptée.
Un exemple javascript solution à l'aide chiffrée des données de configuration est indiqué ci-dessous.
De sorte que vous pouvez récupérer une crypté fichier de configuration de l'écriture de quelques lignes de Javascript.
Noter que de mettre un fichier
config.RSA
dans un dépôt git aboutirait à rendre un fichier binaire et donc à perdre de nombreux avantages de quelque chose comme Git, par exemple, la capacité de cherry pick modifications.La solution qui pourrait être pour chiffrer les paires clé-valeur ou peut-être juste valeurs. Vous pourriez crypter toutes les valeurs, par exemple si vous avez un fichier séparé pour les informations sensibles, ou chiffrer que les valeurs sensibles si vous avez toutes les valeurs dans un fichier. (voir ci-dessous)
Mon exemple ci-dessus est un peu inutile pour tous ceux qui veulent faire un essai avec elle, ou comme un exemple pour démarrer à partir, car elle suppose l'existence de clés RSA et crypté fichier de config
config.RSA
.Alors, voici quelques lignes de code supplémentaires ajoutés pour créer des clés RSA et un fichier de config pour jouer avec.
Chiffrement uniquement les valeurs de
Vous pouvez décrypter un fichier de configuration avec des valeurs chiffrées en utilisant quelque chose comme cela.
Avec chaque élément de configuration sur une ligne distincte (par exemple,
Hello
etGoodbye
ci-dessus), Git reconnaîtra mieux ce qui se passe dans un fichier et enregistre les modifications apportées aux éléments d'information que les différences plutôt que les dossiers complets. Git sera également en mesure de gérer les fusions et les prélèvements cherry etc mieux.Cependant, plus vous voulez de contrôle de version des modifications sensibles de l'information, plus vous vous déplacez vers un COFFRE-fort DÉPÔT de la solution de (2) et loin d'un CHIFFRÉS INFO (3) de la solution.
Si vous êtes en utilisant ruby on rails, le Figaro gem est très bon, facile et fiable. Elle a un faible facteur de maux de tête avec l'environnement de production trop.
Faire confiance, mais vérifier.
Dans
.gitignore
cela permettrait d'exclure un "sécurisé", annuaire de l'opération:Mais je partage @Michael Potter's de la paranoïa. Donc à vérifier .gitignore, voici un Python de test de l'unité que soulèverait un klaxon si cette "sécuriser" le répertoire n'est jamais vérifié. Et de cocher la case, une légitime répertoire est également testées: