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

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

- 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Ă©).

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

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.

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 :

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

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



