Une attribution massive de droits aux utilisateurs de domaines provenant de diffĂ©rentes forĂȘts

Il semble que j'aie ce karma : réaliser des tùches standards de maniÚre non triviale. Si quelqu'un a une vision différente du problÚme, je vous invite à en discuter pour traiter la question.

Un beau matin, une tĂąche intĂ©ressante est apparue : attribuer des droits Ă  des groupes d'utilisateurs sur diffĂ©rents partages, contenant des sous-dossiers de projets avec des dossiers de documents. Tout se passait bien et un script a Ă©tĂ© Ă©crit pour attribuer des droits sur les dossiers. Puis, il s'est avĂ©rĂ© que les groupes devaient contenir des utilisateurs de diffĂ©rents domaines, de diffĂ©rentes forĂȘts (pour ceux qui ont oubliĂ© ce que c'est). Supposons que le partage lui-mĂȘme est hĂ©bergĂ© sur un dispositif Synology, enregistrĂ© dans le domaine FB, forĂȘt PSI. TĂąche : autoriser les utilisateurs domaines d'une autre forĂȘt Ă  accĂ©der au contenu de ce partage, de maniĂšre trĂšs sĂ©lective.

Le cahier des charges prenait forme peu Ă  peu comme suit :

  • 2 forĂȘts : forĂȘt PSI, forĂȘt TG.

    Une attribution massive de droits aux utilisateurs de domaines provenant de diffĂ©rentes forĂȘts

  • Dans chaque forĂȘt, il y a 3 domaines : PSI (ZG, PSI, FB) ; TG (TG, HU, KC).
  • Entre les forĂȘts, des relations de confiance existent, Synology voit tous les groupes de sĂ©curitĂ© dans toutes les forĂȘts.
  • Des comptes d'administration du domaine FB avec des droits FullControl doivent obligatoirement ĂȘtre prĂ©sents sur les partages et les dossiers/sous-dossiers.
  • Les noms des dossiers partagĂ©s doivent ĂȘtre systĂ©matisĂ©s. La direction s'est occupĂ©e de l'accord sur les ID de projets, j'ai dĂ©cidĂ© de lier les noms des groupes de sĂ©curitĂ© aux ID des projets.
  • Les dossiers de projets dans les partages systĂšme doivent contenir une structure prĂ©parĂ©e Ă  l'avance dans un fichier .xlsx, avec les privilĂšges d'accĂšs correspondants (R/RW/NA, oĂč NA signifie aucun accĂšs)

    Une attribution massive de droits aux utilisateurs de domaines provenant de diffĂ©rentes forĂȘts

  • Il doit ĂȘtre possible de restreindre les droits des utilisateurs/membres d'un projet Ă  certains rĂ©pertoires de ce projet. Pour d'autres rĂ©pertoires/projets, l'utilisateur peut ne pas avoir d'accĂšs, selon son appartenance aux groupes.
  • Lors de la crĂ©ation d'un dossier de projet, des groupes dans les domaines correspondants avec des noms correspondant aux ID des projets doivent ĂȘtre créés de maniĂšre aussi automatique que possible.

Remarques sur le cahier des charges

  • La configuration des relations de confiance ne fait pas partie du cahier des charges
  • L'ID du projet contient des chiffres et des lettres latines
  • Les rĂŽles des utilisateurs des projets pour tous les domaines ont des noms types
  • Un fichier .xlsx avec les dossiers et les droits d'accĂšs (matrice d'accĂšs) doit ĂȘtre prĂ©parĂ© avant le dĂ©but de la mise en Ɠuvre de l'ensemble du projet
  • Lors de la mise en Ɠuvre de projets, il est possible de crĂ©er des groupes d'utilisateurs dans les domaines correspondants
  • L'automatisation est rĂ©alisĂ©e par l'utilisation des outils d'administration standard de MS Windows.

Mise en Ɠuvre du cahier des charges.

AprĂšs la formalisation de ces exigences, une pause tactique a Ă©tĂ© prise pour tester les mĂ©thodes de crĂ©ation de rĂ©pertoires et d'attribution des droits. Il Ă©tait prĂ©vu d'utiliser uniquement PowerShell afin de ne pas compliquer le projet. Comme je l'ai dĂ©jĂ  mentionnĂ©, l'algorithme du script devait ĂȘtre relativement simple :

  • Nous enregistrons des groupes avec un nom dĂ©rivĂ© de l'ID du projet (par exemple KC40587) et les rĂŽles correspondants indiquĂ©s dans la matrice d'accĂšs : KC40587-EN- pour l'ingĂ©nieur ; KC40587-PM – pour le chef de produit, etc.
  • Nous obtenons les SID des groupes créés.
  • Nous enregistrons le dossier du projet et l'ensemble correspondant de rĂ©pertoires (la liste des sous-dossiers dĂ©pend du partage dans lequel il est créé et est dĂ©finie dans la matrice d'accĂšs).
  • Nous attribuons les droits d'accĂšs aux nouveaux sous-rĂ©pertoires du projet aux groupes selon la matrice d'accĂšs.

Les difficultés rencontrées lors de la premiÚre étape :

  • IncomprĂ©hension de la maniĂšre de dĂ©finir la matrice d'accĂšs dans le script (actuellement, un tableau multidimensionnel est mis en Ɠuvre, mais un moyen de le remplir en fonction du contenu d'un fichier .xlsx / matrice d'accĂšs est recherchĂ©).

    Une attribution massive de droits aux utilisateurs de domaines provenant de diffĂ©rentes forĂȘts

  • IncapacitĂ© Ă  dĂ©finir les droits d'accĂšs sur les partages SMB sur les stockages Synology Ă  l'aide de PoSH (https://social.technet.microsoft.com/Forums/en-US/3f1a949f-0919-46f1-9e10-89256cf07e65/error-using-setacl-on-nas-share?forum=winserverpowershell), ce qui a entraĂźnĂ© une perte considĂ©rable de temps et la nĂ©cessitĂ© d'adapter tout cela pour des scripts utilisant l'outil d'Ă©dition des droits icacls, ce qui a exigĂ© la crĂ©ation d'un dĂ©pĂŽt intermĂ©diaire pour des fichiers texte et cmd.

Dans le mode actuel, l'exécution des fichiers cmd est contrÎlée manuellement, lorsque cela est nécessaire pour enregistrer un dossier pour le projet.

Une attribution massive de droits aux utilisateurs de domaines provenant de diffĂ©rentes forĂȘts

Il est Ă©galement apparu que le script doit ĂȘtre exĂ©cutĂ©, y compris pour l'enregistrement de groupes dans d'autres forĂȘts (nous avons utilisĂ© le terme Cross-domains), et qu'il peut y avoir une relation non seulement de 1 Ă  1, mais aussi de 1 Ă  plusieurs.

Une attribution massive de droits aux utilisateurs de domaines provenant de diffĂ©rentes forĂȘts

Cela signifie que l'accĂšs aux ressources d'un domaine quelconque peut maintenant ĂȘtre revendiquĂ© par des groupes d'autres cross-domaines, y compris d'une forĂȘt voisine. Pour garantir l'uniformitĂ©, il a Ă©tĂ© dĂ©cidĂ© de crĂ©er une structure symĂ©trique dans l'OU de tous les domaines desservis de toutes les forĂȘts (ovales verticaux noirs). Comme on dit, dans l'armĂ©e, tout doit ĂȘtre dans le dĂ©sordre, mais uniformĂ©ment :

Une attribution massive de droits aux utilisateurs de domaines provenant de diffĂ©rentes forĂȘts

Ainsi, lors de l'enregistrement du projet 80XXX dans le domaine TG, le script exécute :

1. la création de l'OU (ovales rouges horizontaux) correspondante dans ce domaine et dans les cross-domaines, c'est-à-dire dans les domaines dont les employés doivent avoir accÚs à cette ressourc.

2. le remplissage de l'OU avec des groupes nommĂ©s comme <SRC_domain><DST_domain><ID_project>-, oĂč :

  • SRC_domain – cross-domaine, dont les employĂ©s auront accĂšs aux ressources du domaine DST
  • DST_domain – domaine, dont les ressources doivent en fait ĂȘtre accessibles, c'est-Ă -dire la raison pour laquelle tout cela a Ă©tĂ© mis en place
  • <ID_project> — numĂ©ro de projet
  • ROLES – noms des rĂŽles Ă©numĂ©rĂ©s dans la matrice d'accĂšs.

3. la lecture du tableau SID de tous les groupes de tous les domaines concernés et sa sauvegarde pour la transmission ultérieure des données dans un fichier définissant les droits sur un sous-dossier spécifique du projet

4. génération de fichiers sources (paramÚtre /restore) avec un ensemble de droits pour une utilisation par l'utilitaire icacKC en mode exécutable « icacKC "as-nasNNKCProjects" /restore C:TempKCKC40XXKC40XX.txt »

5. création d'un fichier CMD, combinant toutes les commandes icacls exécutables pour tous les dossiers du projet

Une attribution massive de droits aux utilisateurs de domaines provenant de diffĂ©rentes forĂȘts

Comme mentionné précédemment, l'exécution du fichier exécutable se fait manuellement et l'évaluation des résultats d'exécution se fait également manuellement.

Difficultés rencontrées au final :

  • si le dossier du projet contient dĂ©jĂ  un grand nombre de fichiers, l'exĂ©cution de la commande icacls sur les volumes existants peut prendre un temps considĂ©rable et, dans certains cas, entraĂźner un Ă©chec (par exemple en cas de chemins de fichiers longs) ;
  • en plus du paramĂštre /restore, il a fallu ajouter des lignes avec le paramĂštre /reset au cas oĂč les dossiers n'Ă©taient pas créés, mais transfĂ©rĂ©s depuis des dossiers dĂ©jĂ  existants, sans droits d'hĂ©ritage depuis la racine ;
  • une partie du script pour crĂ©er des groupes a dĂ» ĂȘtre exĂ©cutĂ©e sur un dc alĂ©atoire de chaque forĂȘt, le problĂšme concerne les comptes administratifs pour chaque arbre.

Conclusion générale : il est trÚs étrange qu'il n'y ait pas encore d'outils sur le marché avec une telle fonctionnalité. Il semble possible de réaliser une telle fonctionnalité sur la base du portail Sharepoint.
Le fait qu'il n'existe pas la possibilité d'utiliser des utilitaires PoSH pour assigner des droits sur des dossiers sur des appareils sinology reste également incompréhensible.

Je suis prĂȘt Ă  partager le script, en crĂ©ant un projet sur github, si cela intĂ©resse quelqu'un.

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster