2010-09-06 6 views
0

J'ai une application python conçue pour fonctionner comme un service sur Linux, et on m'a demandé de l'installer sur une machine Windows XP dans un bureau où il n'y a pas de machines Linux (pour moi, cela rend bizarre et déroutant place car je n'ai pratiquement aucune expérience de développement pour Windows).Comment stocker en toute sécurité des informations d'identification de base de données pour une application Windows?

Sous Linux, l'application a son propre utilisateur et le fichier d'informations d'application et de base de données réside dans un dossier chiffré accessible uniquement par cet utilisateur. (Je tiens à préciser que je ne suis pas un cryptologue, et que s'il y a déjà des erreurs de sécurité flagrantes dans cette configuration, je suis très heureux de les avoir signalées!)

Comment puis-je obtenir un niveau équivalent de sécurité par des moyens similaires ou différents sur une machine Windows XP? C'est-à-dire, comment puis-je empêcher ceux qui ont accès à l'ordinateur ou au disque de modifier le programme ou de lire les informations d'identification? Un peu d'arrière-plan: la fenêtre Windows Host est une station de travail utilisée tous les jours par les utilisateurs avec des privilèges non administratifs. Les actifs sécurisés sont des données personnelles à peu près aussi sensibles que, par exemple, un rapport d'école. L'application est destinée à être utilisée par environ 10 personnes qui s'authentifient auprès de l'application avec des mots de passe individuels (stockés salés et hachés dans la base de données).

Il y a une question similaire qui a reçu la réponse:

on Windows you would store the credentials in the registry in a location protected by an ACL

Cependant, il ne touche pas sur l'aspect de la protection des fichiers de programme, et en outre, il semble supposer un niveau d'expérience Windows supérieur à celui que j'apprécie actuellement :) Je n'ai aucune idée de la façon de protéger les éléments de registre avec une liste de contrôle d'accès, ni comment je pourrais alors accéder aux clés protégées de mon programme. Des instructions simples pour un développeur dans un environnement inconnu seraient grandement appréciées!

+0

Je crois que cette question serait plus appropriée pour http://SuperUser.com puisque ce que vous devez faire n'implique aucun codage. –

+0

J'ai imaginé la possibilité de solutions qui nécessiteraient un nouveau code pour accéder aux données sécurisées stockées dans un format différent, par exemple. une clé de registre protégée. Je suis heureux que la question soit migrée si d'autres s'accordent sur le fait que ce serait plus approprié ailleurs. –

+1

En fait, je pense que le plus simple est de simplement stocker les données dans un fichier sous le home-répertoire pour l'utilisateur (l'application aura besoin de son propre utilisateur dans Windows ainsi pour que cela fonctionne bien). Btw je suis désolé mais je n'ai pas assez de rep pour voter pour le migrer vers http://SuperUser.com –

Répondre

2

Votre question n'est pas claire sur ce que fait votre application et quelles sont vos exigences en matière de sécurité. Je vais faire quelques hypothèses, et fournir une réponse basée sur eux. Si ces hypothèses sont incorrectes, veuillez clarifier dans un commentaire et je mettrai à jour.

Je suppose que vous avez une application qui:

  • stocke des données sensibles dans une base de données stockées dans un SGBD installé sur le poste de travail
  • est installé sur un poste de travail partagé
  • chaque utilisateur a son propre connexion (non-admin)
  • permet à différents utilisateurs de se connecter et interragissent avec leurs données
  • utilisateur exécute applicaiton qui se connecte à un service
  • service se connecte avec la base de données, fournit des données aux utilisateurs
  • service est exécuté sous son propre compte utilisateur

Si cela est correct, alors vous ne devriez pas avoir beaucoup question.

Le service peut s'exécuter sous n'importe quel compte, mais il serait assez facile de l'exécuter sous l'une des normes (Local Machine ou Network Service). Configurez la base de données afin que seul ce compte puisse y accéder. Dans Sql Server, j'accorde seulement ce compte d'utilisateur (et admins sur la boîte) les droits de connexion et d'accès à la base de données.

C'est la seule sécurité dont vous avez besoin, si les utilisateurs ne sont pas des administrateurs. Maintenant, quand le frontend se connecte au service, l'utilisateur peut fournir le nom d'utilisateur/mot de passe et le service peut s'authentifier contre les mots de passe salés et hachés stockés dans la base de données. Tout ceci est sécurisé tant que 1) chaque utilisateur a son propre login 2) les communications sont sécurisées (en utilisant des pipes nommés ou SSL) et 3) aucun virii ou keyloggers ne s'exécute sous les identifiants d'un administrateur.


Vous pouvez configurer votre service pour ce compte, il fonctionne sous en exécutant services.msc (ou un clic droit sur MyComputer et en sélectionnant Gérer ou en cliquant sur les services dans le menu Outils d'administration dans le Panneau de configuration ou probablement dans un nombre de manières différentes). Appeler la liste des services, faites un clic droit sur votre application et cliquez sur Propriétés.

De là, faites-le ressembler à ceci: alt text

+0

Toutes vos hypothèses corrigent jusqu'à ce que "le service fonctionne sous son propre compte d'utilisateur" et seulement alors parce que je n'avais aucune idée si les services pourraient être exécutés en tant qu'utilisateurs spécifiques. Savez-vous comment je peux spécifier quel utilisateur un service est exécuté en tant que? Réponse vraiment utile, merci! –

+0

Oui, vous pouvez facilement configurer un service Windows pour qu'il s'exécute sous n'importe quel compte d'utilisateur. Ajout d'un snappy pour ça. Je n'arrive pas à trouver les documents friggen partout en ligne! – Will

Questions connexes