Question Listing DACL

Plus d'informations
il y a 17 ans 1 mois #4120 par Bredin Samuel
Listing DACL a été créé par Bredin Samuel
Bonjour,


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.

Plus d'informations
il y a 17 ans 1 mois #4137 par Bredin Samuel
Réponse de Bredin Samuel sur le sujet Re:Listing DACL
Bonjour tout le monde,


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 \&quot;identity impersonate\&quot;
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.

Plus d'informations
il y a 17 ans 1 mois #4138 par Bredin Samuel
Réponse de Bredin Samuel sur le sujet Re:Listing DACL
Re,

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, &amp;hToken))
{
return RTN_ERR_EN_PRIV;
}

// Get the LUID for the privilege on the target (or local) system
if (! LookupPrivilegeValue (m_sTargetSystemName, sPrivilege, &amp;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, &amp;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.

Plus d'informations
il y a 17 ans 1 mois #4143 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Listing DACL
Mephisto écrit:

Je vois que je n'intéresse personne. Dommage !

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é ;)
Mephisto écrit:

Est ce que je chauffe ou je gèle ?

Tu es assez près du foyer, je pense :P
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 \&quot;que\&quot; d'appel d'API Win32. En même temps le domaine de la sécurité sous NT c'est pas le plus facile :S
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.

Plus d'informations
il y a 17 ans 1 mois #4146 par Bredin Samuel
Réponse de Bredin Samuel sur le sujet Re:Listing DACL
Bonjour Laurent,

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 \&quot;advapi32.dll\&quot;

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.

Plus d'informations
il y a 17 ans 1 mois #4147 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Listing DACL
Avant d'aller plus loin il y a ce post qui concerne ce sujet.
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:

La loi interdit d'avoir un droit même de liste sur ce dossier.

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 ?
Mephisto écrit:

Donc pour conclure pas de modification de droit possible.

Fallait tenté :)
Mephisto écrit:

Apparemment cette API n'est pas encapsulée dans le Framework.

Exact, à toi les joies du P/Invoke :laugh:
Mephisto écrit:

Maintenant il faut trouvé comment s'en servir.

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.
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.

Temps de génération de la page : 0.066 secondes
Propulsé par Kunena