-
perdu dans les ACL
Bonjour à tous !
Voila, je viens du monde Linux et je suis un peu perdu dans les ACL, ACE, SID...
J'ai un petit souci :
J'ai un programme qui créé un fichier. Les droits effectifs de ce programme étant ceux d'Utilisateurs, mon fichier créé a pour proprietaire l'utilisateur courant.
J'aimerais juste changer cela en disant que le propriétaire du fichier créé est administeur, et que l'utilisateur a juste le droit d'écrie dans le fichier (enfin, n'a pas le droit de lire, ni d'executer le fichier)
en gros sous linux ca donnerait :
chmod 662 monfichier
chown root:root monfichier
#>ls -l monfichier
rw-rw--w- root:root monfichier
Et enfin, comment connaitre le nom du propriétaire du fichier ?
Merci de votre aide!
-
Rien à voir avec le C++, c'est de la prog Windows.
Connaitre le propriétaire: GetFileSecurity() + GetSecurityDescriptorOwner().
Changer le propriétaire: SetSecurityDescriptorOwner(), mais il faut un privilège pour ça:
- Si tu es admin et que tu veux que le fichier devienne "à toi", tu dois utiliser le privilège Take Ownership (SE_TAKE_OWNERSHIP_NAME) (les admin ont ce privilège, mais il faut l'activer).
- Si le fichier t'appartient et que tu veux le "donner" à quelqu'un, tu dois utiliser le privilège Restore (SE_RESTORE_NAME) (les utilisateurs normaux n'ont pas ce privilège, les admins si).
- Si j'ai bien compris, l'interdiction de "donner" un fichier est utile dès qu'il est question de quotas: Il ne faut pas que quelqu'un puisse "donner" un fichier à un autre à son insu...
Tu peux activer ou désactiver un privilège avec AdjustTokenPrivileges().
Quant aux ACLs, c'est un peu plus compliqué. Il y a des fonctions du genre SetEntriesInAcl(), SetSecurityDescriptorDacl(), etc. En fait, en ce qui concerne les ACLs, tu aura plus vite fait d'utiliser les outils présents (notamment l'outil en ligne de commande cacls.exe, qui a l'avantage d'être disponible même sous XP familial).