2009-05-31 8 views
2

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

3

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?

+0

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. –

0

Cryptez-vous lourdement dans le système de fichiers?

0

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.

+0

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. –

1

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.

Questions connexes