IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Portée de l'impersonation et accès fichiers


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Par défaut Portée de l'impersonation et accès fichiers
    Bonjour

    je rencontre un problème sur une application en C#/C++:
    j'ai un service "ServiceAgent" qui execute une dll en c# "maDLL"; cette DLL va ensuite appeler une autre dll en c++.
    ServiceAgent est un service, et est donc lancé via le compte SYSTEM. Mais avec un mécanisme d'impersonation, ServiceAgent a récuperé des droits utilisateurs "user1".
    Or dans "maDLL", on doit acceder des fichiers sur un serveur distant \\Server. "user1" y a accès mais pas le compte SYSTEM.

    Mon problème est le suivant:
    Dans les couches "hautes" de maDLL, je vois bien l'impersonation et je peux accéder aux fichiers sur \\Server. Cependant dans les couches basses en c++, je n'ai plus accès aux fichiers sur \\Server et l'impersonation est désactivée (OpenThreadToken me retourne no token).


    Est ce que ça vous dit quelque chose ? Comment puis je étendre l'impersonation à tout mon code ?

    Merci d'avance

    Romain

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Par défaut
    Bonjour,

    j'ai pas mal avancé sur le sujet, je posterai une réponse exhaustive sur le sujet bientôt.
    Cependant dans un cas similaire, je veux lancer un nouveau process en c# mais je n'arrive pas a attribuer a ce process les droits nécessaires. Comment dois je faire ?
    J'ai essayé en passant par CreateProcessAsUser mais j'ai une erreur "Le type du jeton est inadéquat pour ce genre d'utilisation". Est ce que ca vous dit quelque chose ?

    Merci
    Romain

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Il me semble que le problème n'est pas vraiment lié à C#... sur ce genre de questions, tu auras sans doute plus de réponses sur le forum Windows

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Par défaut
    Dans ce cas précis, il s'agissait de lancer un nouveau process avec des droits supplémentaires. Les commandes basiques c# Process.Start() ne permettent pas à ma connaissance de passer des droits supplémentaires au process lancé, il faut faire des manipulations plus complexe.

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Par défaut
    Du coup j'ai résolu mon problème entre temps.

    Voici la solution:
    En c#, quand on créée un process, pour lui passer des droits d'accès récuperés par impersonation:

    1. récuperer l'identité avec WindowsPrincipal et WindowsIdentity

    2. Dupliquer le jeton de sécurité

    - importer la méthode de l'api Win32 DuplicateTokenEx
    Attention aux paramètres:
    IntPtr hExistingToken: identity.token
    DWORD dwDesiredAccess: MAXIMUM_ALLOWED
    int SECURITY_IMPERSONATION_LEVEL : 2 (SecurityImpersonation)
    int TOKEN_TYPE: 1 (TokenPrimary)
    out IntPtr: duplicateToken


    3. Lancer le process a l'aide de duplicate token
    (méthode de l'API Win32)

    Je ne détaille pas, toutes les infos pour bien utiliser ces méthodes sont sur le net ...

    Dites moi si ces infos sont utiles, je fermerai le fil de discussion ensuite.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Accès fichiers Internet
    Par joujou_le_fou dans le forum Windows Forms
    Réponses: 5
    Dernier message: 04/08/2004, 12h49
  2. [tomcat]acces fichier dans contexte
    Par krollette dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 23/01/2004, 14h17
  3. pb service NT / accès fichier
    Par gord's dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 24/07/2003, 17h20
  4. [Kylix] accés fichiers
    Par sdoura dans le forum EDI
    Réponses: 4
    Dernier message: 08/10/2002, 19h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo