Dans mon environnement, j'ai plusieurs projets qui impliquent l'exécution de rapports d'audit NTFS ACL et diverses activités de nettoyage ACL sur un certain nombre de serveurs de fichiers. Il y a deux raisons principales pour lesquelles je ne peux pas effectuer ces activités localement sur les serveurs:Existe-t-il une API pour définir une liste de contrôle d'accès NTFS uniquement sur un dossier particulier sans que les autorisations ne soient versées?
1) Je n'ai pas d'accès local aux serveurs car ils sont détenus et administrés par une autre société.
2) Ils sont SNAP NAS servers qui exécutent un système d'exploitation Linux modifié (appelé GuardianOS) donc même si je pouvais obtenir un accès local, je ne suis pas sûr de la disponibilité des outils pour effectuer les opérations dont j'ai besoin. Avec cela, j'ai fini par lancer mon propre outil de rapport d'audit ACL qui recurait le système de fichiers en commençant à un chemin de haut niveau spécifié et crachait un rapport HTML sur tous les groupes/utilisateurs rencontrés sur les listes de contrôle d'accès ainsi que l'affichage des modifications apportées aux autorisations lors de la descente de l'arborescence. En développant cet outil, j'ai découvert que les frais généraux du réseau constituaient la pire partie de l'exécution de ces opérations et que, en multi-threading du processus, je pouvais obtenir des performances nettement supérieures.
Cependant, je suis toujours bloqué pour trouver un bon outil pour effectuer les modifications et le nettoyage ACL. Vos outils standard prêts à l'emploi (cacls, xcacls, Explorer) semblent être mono-thread et subissent des pénalités de performance significatives lorsqu'ils traversent le réseau. J'ai envisagé de lancer mon propre programme de configuration d'ACL qui est multithread mais la seule API que je connais est la substance .NET FileSystemAccessRule et le problème est que si je place les permissions sur un dossier, il veut automatiquement "couler" les autorisations vers le bas. Cela cause un problème parce que je veux faire le "coulant" moi-même en utilisant le multi-threading. Je sais que NTFS "autorise" les autorisations héritées à être incohérentes parce que je l'ai vu où un dossier/fichier est déplacé sur le même volume entre deux dossiers parents avec des autorisations héritées différentes et conserve les anciennes autorisations comme "héritées" .
Les questions
1) Est-il possible de définir une ACL qui applique au dossier en cours et tous les enfants (votre standard « applique aux fichiers, dossiers et sous-dossiers » ACL), mais sans le automatiquement vers les objets enfants? Fondamentalement, je veux pouvoir dire à Windows que "Oui, cette ACL devrait être appliquée aux objets enfants mais pour l'instant, il suffit de la définir directement sur cet objet". Pour être clair comme du cristal, je connais les options ACL pour appliquer à "ce dossier seulement" mais ensuite je perds l'héritage qui est une exigence pour que l'option ne soit pas valide pour mon cas d'utilisation. 2) Quelqu'un connaît-il de bons algorithmes ou méthodologies pour effectuer des modifications de listes de contrôle d'accès d'une manière multithread? Mon intuition est que toute traversée récursive du système de fichiers devrait fonctionner en théorie, surtout si vous ne faites que définir une nouvelle ACL sur un dossier de haut niveau et que vous voulez juste "nettoyer" tous les sous-dossiers. Vous devez marquer la nouvelle liste de contrôle d'accès au niveau supérieur, puis revenir en arrière en supprimant toutes les entrées de contrôle d'accès explicites, puis en "transférant" les autorisations héritées. ServerIl s'agit d'une question à partially duplicated de la part de ServerFault, parce que c'est vraiment un administrateur système et un problème de programmation, mais je demandais si quelqu'un connaissait des outils capables de configurer rapidement les ACL sur le réseau.)