2009-02-12 7 views
3

J'ai un serveur écrit en C# qui utilise l'usurpation d'identité.Comment puis-je modifier par programme les attributs de sécurité d'un fichier afin que tout utilisateur peut supprimer le fichier

Je voudrais savoir comment je peux modifier les attributs de sécurité d'un fichier afin que tout utilisateur peut le supprimer.

Mon serveur emprunte l'identité d'un utilisateur, puis crée un fichier temporaire. Plus tard, j'ai besoin de supprimer le fichier mais à ce stade, je ne suis plus l'identité de l'utilisateur qui a créé le fichier et quand une tentative est faite pour supprimer le fichier, une exception est générée. Ma supposition est que, au moment où je crée le fichier, je devrais pouvoir changer les attributs de sécurité pour permettre à n'importe quel utilisateur de supprimer le fichier.

Comment puis-je accomplir ceci (C# préféré mais p/invoke fonctionnera aussi).

Je suis actuellement en utilisant .NET 1.1, donc une méthode qui peut être mis en œuvre 1.1 serait appréciée.

Répondre

4

Il semble que vous souhaitiez utiliser la méthode System.IO.File.SetAccessControl pour ajouter une ACL qui donne au groupe "Tout le monde" intégré la possibilité de supprimer le fichier. La documentation MSDN a un decent sample d'ajouter et de supprimer des enregistrements ACL sur un fichier.

+0

Merci, mais j'ai besoin d'une solution .NET 1.1. – jmatthias

4

Au lieu de permettre à tout le monde supprimer le fichier, pourquoi ne pas ajouter des entrées uniquement pour les personnes qui ont besoin de supprimer le fichier. En fonction de votre message, il s'agirait probablement de votre compte d'utilisateur et du processus d'origine. Autoriser littéralement tout le monde à supprimer le fichier vous ouvre la porte à des problèmes de sécurité.

public static void AllowIdentityToDelete(FileInfo file, string identity) 
{ 
    var rule = new FileSystemAccessRule(
     identity, 
     FileSystemRights.Delete | FileSystemRights.DeleteSubdirectoriesAndFiles, 
     AccessControlType.Allow); 

    var acls = file.GetAccessControl(); 
    acls.AddAccessRule(rule); 
    file.SetAccessControl(acls); 
} 

Vous devrez transmettre l'identité appropriée à l'utilisateur en question.

+0

Merci, mais j'ai besoin d'une solution .NET 1.1. – jmatthias

+0

@jmatthais, Pour .Net 1.1 vous êtes dans un peu de pétrin. Vous devrez PInvoquer les appels de fonction ACL. Cela prend pas mal de travail. Vous pourrez peut-être trouver une bibliothèque en ligne ciblant 1.1 pour les listes de contrôle d'accès – JaredPar

Questions connexes