Question

Dans Ruby on Rails applications de base de données.yml est un fichier texte qui stocke les identifiants de base de données.

Quand j'déployer mon application Rails, j'ai un après déployer rappel dans mon Capistrano une recette qui crée un lien symbolique au sein de l'application /le répertoire de configuration de la base de données.fichier yml.Le fichier lui-même est stocké dans un répertoire séparé à l'extérieur de la norme Capistrano /communiqués de structure de répertoire.Je chmod 400 le fichier donc il ne soit lisible que par l'utilisateur qui l'a créé.

  • Est-ce suffisant pour le verrouiller?Si non, que faites-vous d'autre?
  • Est ce que quelqu'un cryptage de base de données.yml fichiers?
Était-ce utile?

La solution

Vous voudrez également vous assurer que votre SSH système est sécurisé pour empêcher les gens de se connecter comme votre Capistrano bot.Je vous suggère de restreindre l'accès protégé par mot de passe paires de clés.

Le chiffrement du .yml fichier sur le serveur est inutile, puisque vous avez à donner le bot la clé, ce qui serait stocké ...sur le même serveur.Le cryptage sur votre machine, est probablement une bonne idée.Capistrano peut déchiffrer le message avant de l'envoyer.

Autres conseils

La façon dont j'ai abordé ce problème est de mettre la base de données de mot de passe dans un fichier avec des autorisations en lecture seule pour l'utilisateur je lance mon application comme.Puis, dans la base de données.yml j'utilise ERB pour lire le fichier:

production:
  adapter: mysql
  database: my_db
  username: db_user
  password: <%= begin IO.read("/home/my_deploy_user/.db") rescue "" end %>

Fonctionne un régal.

Jetez un oeil à cette github solution: https://github.com/NUBIC/bcdatabase.bcdatabase fournit chiffré magasin où les mots de passe peuvent être séparés de la fichiers yaml.

bcdatabase

bcdatabase d'une bibliothèque et d'utilité qui fournit la base de données de configuration gestion des paramètres pour Ruby on Rails des applications.Il fournit un moyen simple mécanisme permettant de séparer de la base de données les attributs de configuration de code source de l'application, de sorte que il n'y a pas de tentation pour vérifier les mots de passe dans le contrôle de version système.Et il centralise les les paramètres d'un serveur unique, de sorte que ils peuvent être facilement partagés entre de multiples applications et facilement mise à jour par un administrateur unique.

Même si vous fixez la base de données.fichier yml, les gens peuvent toujours écrire qui utilise les mêmes informations d'identification si ils peuvent changer le code de votre application.

Une autre façon de regarder ceci:l'application web ont beaucoup d'accès à la base de données.Si la valeur est true bas les autorisations.Donner juste assez d'autorisations de l'application.De cette façon, un attaquant ne peut faire ce que l'application web serait capable de le faire.

Si vous êtes très préoccupé par la sécurité du fichier yml, je dois demander:Il est stocké dans votre contrôle de version?Si oui, c'est un autre point où un attaquant peut obtenir à elle.Si vous faites un checkout/checkin sur les non-SSL, quelqu'un pourrait l'intercepter.

Aussi, avec certains de contrôle de version (svn, pour exampl), même si vous l'enlever, il est toujours là dans l'histoire.Donc, même si vous avez retiré à un certain moment dans le passé, il est toujours une bonne idée de changer les mots de passe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top