Une de mes applications Rails va dépendre d'une clé secrète en mémoire, donc toutes ses fonctions ne seront disponibles qu'une fois que l'administrateur aura accédé à une certaine page et téléchargé la clé valide. Le problème est que cette clé doit être stockée de façon sécurisée, donc aucun autre processus sur la même machine ne devrait pouvoir y accéder (ainsi memcached et le système de fichiers ne conviennent pas). Une bonne idée serait simplement de le stocker dans une variable de configuration de l'application, mais les instances nouvellement générées n'auront pas accès à cette variable. Avez-vous des idées pour l'implémenter sur RubyEE/Apache/mod_passenger?Stockage d'une clé partagée pour l'application Rails
Répondre
Il n'y a vraiment aucun moyen d'atteindre cet objectif. (c'est le même problème que tous les systèmes DRM)
Vous ne pouvez pas garder les choses secrètes du système d'exploitation. Votre application doit avoir la clé quelque part en mémoire et le noyau du système d'exploitation peut lire n'importe quel emplacement de mémoire qu'il veut.
Vous devez pouvoir approuver le système d'exploitation, ce qui signifie que vous pouvez également faire confiance au système d'exploitation pour appliquer correctement les autorisations d'accès aux fichiers. Cela signifie que vous pouvez stocker la clé dans un fichier que seul le processus rails-user peut lire. Pensez-y de cette façon: même si vous n'aviez aucune clé, qu'est-ce qui empêche un attaquant sur le serveur de simplement changer le code de l'application lui-même pour accéder à la fonctionnalité désactivée?
Cryptez-vous lourdement dans le système de fichiers?
Qu'en est-il de le traiter comme un mot de passe normal, et en utilisant un salted hash? Une fois l'utilisateur authentifié, il a accès aux fonctions du site.
Cette clé doit être disponible pendant toute la durée de vie de l'application, car elle sera utilisée pour crypter/décrypter des informations. –
Je voudrais utiliser le système de fichiers, avec un accès en lecture uniquement au propriétaire du fichier, et m'assurer que le processus ruby est le seul processus appartenant à cet utilisateur. (en utilisant chmod 400 file
)
Vous pouvez obtenir plus complexe que cela, mais tout se résume à utiliser les utilisateurs et les autorisations UNIX.
- 1. Localisation partagée pour asp.net, javascript et silverlight?
- 2. Bibliothèque partagée pour iPhone et BlackBerry
- 3. VB6 - Ouvrir le fichier pour l'écriture partagée
- 4. Exemple de mémoire partagée pour Symbian
- 5. Stockage distribué de BLOB pour .NET?
- 6. Remplissage du modèle pour une vue partagée, incorporation d'une vue partagée dans une autre vue
- 7. Sémaphore de mémoire partagée
- 8. Ecriture en mémoire partagée
- 9. Flickr API Stockage de clés
- 10. Visual Studio et mémoire partagée
- 11. Arrêt de Rails pour Rails
- 12. Système de stockage personnalisé pour GridFS (MongoDB)?
- 13. cadres multiplateformes pour le stockage + métadonnées?
- 14. Stockage dict rapide et indexable pour Python
- 15. C# classe séparée pour le stockage
- 16. Couche de stockage locale pour Entity Framework?
- 17. Désactivation de l'insertion de clé json dans Rails
- 18. Utilisation de VPIM et stockage des contacts
- 19. Différentes méthodes d'accès à Azure stockage
- 20. Accès au stockage Azure sans fournir de clé ni de nom de compte dans la configuration
- 21. Sphinx pensant: Attribut manquant pour clé étrangère
- 22. Méthode partagée ne pas appeler Constructeur partagé
- 23. taille de fichier de la bibliothèque partagée
- 24. SQL Server « fournisseur de mémoire partagée » Erreur
- 25. Compilation de bibliothèque partagée dynamique avec g ++
- 26. Stockage isolé Silverlight
- 27. Stockage de photos Quandry
- 28. Stockage persistant Cocoa/MacOSX
- 29. Mot de passe protégeant un environnement de stockage intermédiaire de rails
- 30. Stockage persistant iPhone
Le fait que le noyau puisse accéder à la clé est bon pour moi, je ne veux simplement pas qu'il soit accessible aux processus des autres utilisateurs. S'il y avait une zone de mémoire partagée accessible à toutes les instances de Rails, je le garderais là. Mais il me semble que chaque instance accède uniquement à sa propre copie de données. –