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

Windows Discussion :

Créer un fichier modifiable par utilisateur limité


Sujet :

Windows

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 70
    Points : 42
    Points
    42
    Par défaut Créer un fichier modifiable par utilisateur limité
    Bonjour,

    mon titre n'est peut-être pas très explicite.
    Je crée un service qui tourne sous le compte SYSTEM (et j'ai besoin qu'il le reste).
    A un moment donné, j'aimerais créer un fichier qui soit modifiable par un utilisateur même limité.

    Le problème actuellement est que l'utilisateur limité ne peut pas modifier un fichier créé par le service.

    Savez-vous comment s'en sortir dans ce cas là ?

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je vois deux solutions:
    • La plus simple, c'est de créer un fichier modifiable par absolument tout le monde: Il suffit de créer le fichier avec un descripteur de sécurité, mais aucune ACL.
    • Sinon, faire un fichier avec un contrôle plus fin.

    Sinon, il reste la solution d'utiliser une commande (tu sais, system(), CreateProcess() etc.) pour changer les droits du fichier après l'avoir créé: Renseigne-toi sur la commande cacls. Normalement, tu peux juste taper cacls /? dans l'invite de commandes...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 70
    Points : 42
    Points
    42
    Par défaut
    Merci pour vos réponses.
    Je voudrais utiliser la première méthode, mais en fait, comme il s'agit en fait d'une copie de fichier (je pensais pas que ça changerait quelque chose quand j'ai posé la question), le fichier est déjà créé et je voudrai lui donner les droits.
    J'ai essayé de mettre les DACL et SACL à null comme le conseille Médinoc en utilisant la fonctions SetSecurityInfo mais je tombe alors sur une erreur 5 (acces denied).
    Allez comprendre !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 70
    Points : 42
    Points
    42
    Par défaut
    Voilà mon code.
    C'est du python, mais les fonctions win32 fonctionnent pareil.

    path est le path du fichier créé (puis fermé comme il se doit)

    handle = win32file.CreateFile(path, win32con.GENERIC_READ|win32con.GENERIC_WRITE , 0 , None , win32con.OPEN_EXISTING , win32con.FILE_ATTRIBUTE_NORMAL, 0)
    ObjectType = win32security.SE_FILE_OBJECT
    SecurityInfo = win32security.DACL_SECURITY_INFORMATION
    Owner = None
    Group = None
    Dacl = None
    Sacl = None
    win32security.SetSecurityInfo(handle, ObjectType, SecurityInfo, Owner, Group, Dacl, Sacl)
    win32api.CloseHandle(handle)
    J'aimerais bien savoir pourquoi j'ai un access denied au niveau de SetSecurityInfo alors que mon service devrait avoir tous les droits.

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Un service peut lire toucher à ce à quoi il n'est pas censé toucher, mais pour ça il faut activer les privilèges correspondants.

    Mais en fait, je pense que tu n'as tout simplement pas demandé les bons droits dans ton createfile. Essaie en demandant WRITE_DACL ou un truc du genre...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 70
    Points : 42
    Points
    42
    Par défaut
    Enorme ! Ca marche!
    En effet, je n'avais pas activé les bons privilèges dans CreateFile.
    WRITE_DAC tout seul n'a pas eu l'air de suffir, mais avec STANDARD_RIGHTS_ALL, j'ai pu faire ce que je voulais du fichier, il a été bien incapable de se défendre.

    Merci vraiment pour ton aide! Sans toi j'y étais encore demain.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 04/04/2014, 10h20
  2. Réponses: 1
    Dernier message: 23/02/2014, 09h04
  3. [XL-2003] Créer un fichier htm par ligne du tableau
    Par familledacp dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/10/2011, 11h06
  4. Créer un fichier protégé par mot de passe
    Par Damiendupont dans le forum Général Python
    Réponses: 2
    Dernier message: 29/03/2008, 19h27
  5. [Serveur de fichier] Acces par utilisateur
    Par T0xF0x dans le forum Windows Serveur
    Réponses: 4
    Dernier message: 25/04/2007, 18h02

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