Question
Listing DACL
- Bredin Samuel
- Auteur du sujet
- Hors Ligne
- Membre senior
-
- Messages : 52
- Remerciements reçus 0
Je cherche à réaliser un outil effectuant un export des acl d'un dossier avec ses sous-dossiers, pour un utilisateur donné.
Je sais qu'il existe la commande Get-Acl mais elle ne convient pas.
Mon problème est que ce dossier est un dossier privé, n'ayant des droits que pour l'utilisateur propriétaire.
En cherchant du coté du Framework je n'ai pas trouvé plus que la classe System.Security.AccessControl.
N'ayant aucun droit sur ce dossier, j'essaie d'exécuter la commande en utilisant le privilège Backup/Restore à la façon Security Explorer ou SetAcl.
J'aimerais faire ça proprement en utilisant le framework.
Auriez-vous une piste ?<br><br>Message édité par: Mephisto, à: 19/02/09 18:06
Connexion ou Créer un compte pour participer à la conversation.
- Bredin Samuel
- Auteur du sujet
- Hors Ligne
- Membre senior
-
- Messages : 52
- Remerciements reçus 0
Je vois que je n'intéresse personne. Dommage !
J'ai eu un peu de temps aujourd'hui.
Apparemment il faudrait, en théorie, faire une montée en privilèges (Backup/Restore).
Il me semble avoir trouvé un rapport avec \"identity impersonate\"
Donc emprunter le jeton d'accès de l'utilisateur Backup/Restore. (Je crois)
msdn.microsoft.com/fr-fr/library/w070t6ka.aspx
Je posterais des nouvelles sur le sujet.
Connexion ou Créer un compte pour participer à la conversation.
- Bredin Samuel
- Auteur du sujet
- Hors Ligne
- Membre senior
-
- Messages : 52
- Remerciements reçus 0
Je viens de trouver un code qui permettrait cette montée en privilège.
Mais (oui il y a un mais), c'est du C++.
Je n'ai jamais vu de C++ avant aujourd'hui.
Est ce que quelqu'un pourrait traduire quelques chose de ce code :
[code:1]DWORD CSetACL::«»SetPrivilege (CString sPrivilege, BOOL fEnable)
{
HANDLE hToken = NULL; // handle to process token
TOKEN_PRIVILEGES tkp; // pointer to token structure
// Get the current process token handle
if (! OpenProcessToken (GetCurrentProcess (), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
{
return RTN_ERR_EN_PRIV;
}
// Get the LUID for the privilege on the target (or local) system
if (! LookupPrivilegeValue (m_sTargetSystemName, sPrivilege, &tkp.Privileges[0].Luid))
{
CloseHandle (hToken);
return RTN_ERR_EN_PRIV;
}
// One privilege to set
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = (fEnable ? SE_PRIVILEGE_ENABLED : 0);
// Enable the privilege
if (! AdjustTokenPrivileges (hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES) NULL, 0) || GetLastError ())
{
CloseHandle (hToken);
return RTN_ERR_EN_PRIV;
}
CloseHandle (hToken);
return RTN_OK;
}[/code:1]
Est ce que je chauffe ou je gèle ?
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Ce n'est pas tout à fait ça, soit on a la réponse et on la donne soit faut creuser et avoir le temps de le faire. Ensuite sur les forums on peut s'appropier les problèmes des autres mais pour certains c'est plus risquéJe vois que je n'intéresse personne. Dommage !
Mephisto écrit:
Tu es assez près du foyer, je penseEst ce que je chauffe ou je gèle ?
Pour le C++ ce n'est pas trop gênant, moi non plus je ne connais pas ce langage, mais ici il ne s'agit \"que\" d'appel d'API Win32. En même temps le domaine de la sécurité sous NT c'est pas le plus facile
Concernant la traduction, soit les API sont encapsulées dans des classes .NET, soit faut passer par du P/Invoke .
Mais n'est-il possible d'augmenter légérement les droits pour lires ces ACL et seulement cela ?
Si tu es admin tu devrais au moins avoir la possibilité de faire un inventaire de la configuration des droits sans pour autant avoir la possibilité de modifier quoi que soit, à moins que cela soit ultra-confidentiel.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Bredin Samuel
- Auteur du sujet
- Hors Ligne
- Membre senior
-
- Messages : 52
- Remerciements reçus 0
Mais n'est-il possible d'augmenter légérement les droits pour lires ces ACL et seulement cela ?
En fait non, l'export se fera sur le répertoire privé d'un utilisateur. La loi interdit d'avoir un droit même de liste sur ce dossier.
Ce dossier itinérant est sur un Filer NetApp, donc géré par l'administration Unix (Dont je ne fais parti).
Donc pour conclure pas de modification de droit possible.
Pour le code plus haut, j'avais trouvé que c'était une API WIN32 utilisant la fonction AdjustTokenPrivileges :
msdn.microsoft.com/en-us/library/aa375202(VS.85).aspx
Apparemment cette API n'est pas encapsulée dans le Framework.
Par contre elle est dans la librairie \"advapi32.dll\"
Maintenant il faut trouvé comment s'en servir.<br><br>Message édité par: Mephisto, à: 20/02/09 14:24
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
J'y ajouterais ces liens :
Manipulate Privileges in Managed Code Reliably, Securely, and Efficiently
Access Control Lists
Running Process without Security Warning in Internet Explorer 7 (pour celui-ci j'ai un doute)
Mephisto écrit:
A propos de cette loi, tu peux nous en dire plus sur le sujet ou nous communiquer un lien. Tous les admins peuvent se retrouver dans ce cas ou c'est seulement dans ton environnement ?La loi interdit d'avoir un droit même de liste sur ce dossier.
Mephisto écrit:
Fallait tentéDonc pour conclure pas de modification de droit possible.
Mephisto écrit:
Exact, à toi les joies du P/InvokeApparemment cette API n'est pas encapsulée dans le Framework.
Mephisto écrit:
Rien de bien de compliqué par rapport à ce que tu veux faire. Le plus malaisé est de connaitre les correspondances de type entre le C-C# et PowerShell et pour certaines API le mode de passage des paramètres, voir la manipulation de pointeur.Maintenant il faut trouvé comment s'en servir.
J'avais envisagé de rédiger une petit document sur ce point mais faute de temps c'est resté à l'état de projet.
De plus certaines API nécessitent de prendre en charge la libération mémoire.
Réfléchi bien avant de te lancer, le mieux serait de réaliser ce traitement avec un langage compilé ce qui permettrait de déterminer si c'est possible sous PS, et je n'ai pas dit facile à faire.
Toujours partant ?
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Listing DACL