Quelle que soit la langue de Windows, comment puis-je faire en sorte que la commande ICACLS définisse un dossier pour avoir un accès complet à tous?

9

Contexte

Dis que j'ai cette commande

icacls C:\FullyAccessibleFolder /grant Users:(OI)(CI)F

Cela fonctionne bien dans les versions anglaises de Windows, mais ne semble pas fonctionner dans les versions françaises, ce qui donne l'erreur suivante, probablement en raison de Userssa différence en français. Everyoneest traduit comme Tout le mondedans Windows, ce n'est donc pas une solution non plus.

Users: Le mappage entre les noms de compte et les ID de sécurité n'a pas été effectué.

Google se traduit par

Users: The mapping between account names and security IDs was not performed.

Question

Existe-t-il une commande que je peux utiliser pour définir un dossier et récursivement tout son contenu pour avoir des autorisations complètes pour tous les utilisateurs d'une manière qui fonctionnerait dans différentes versions linguistiques de Windows?

Contenu provenant du Web

Cette page avec un problème largement similaire explique comment Everyonedevient Jederen allemand et Tout le mondeen français.

Geesh_SO
la source
2
Utilisez simplement le SID: icacls C:\FullyAccessibleFolder /grant S-1-5-32-545:(OI)(CI)F fonctionne partout.
Ben
2
@Ben, ça devrait être icacls C:\folder /grant *S-1-5-32-545:(OI)(CI)F, tu as omis l'astérisque.
Harry Johnston

Réponses:

10

Ne fonctionne pas dans les versions françaises, probablement en raison de Userssa différence

Vous avez trois options, détaillées ci-dessous:

  1. Utilisez le portail de langue pour obtenir le nom traduit

  2. Récupérer le nom localisé du UsersSID

  3. Utilisez le UsersSID avecicacls


Option 1: utiliser le portail linguistique (ressource canonique pour la terminologie Microsoft)

Une recherche d' utilisateurs renvoie:

Traductions dans les produits Microsoft localisés

    English Translation         Product
    Users   Utilisateurs        Windows 7
    Users   des utilisateurs    Windows 7
    Users   Utilisateurs        Windows 8 Modern Voice
    Users   Utilisateurs        Windows 8
    Users   Utilisateurs        Windows 8.1
    USERS   UTILISATEURS        Windows 8.1
    Users   Utilisateurs        Windows 10
    Users   des utilisateurs    Windows 10
    Users   Utilisateurs        Windows 10 Anniversary Update
    users   utilisateurs        Windows 10 Anniversary Update

Cela suggère que la commande suivante peut fonctionner:

icacls C:\FullyAccessibleFolder /grant Utilisateurs:(OI)(CI)F

Option 2: récupérer le nom localisé du UsersSID ( S-1-5-32-545)

SID: S-1-5-32-545

Nom: Utilisateurs

Description: Un groupe intégré. Après l'installation initiale du système d'exploitation, le seul membre est le groupe Utilisateurs authentifiés. Lorsqu'un ordinateur rejoint un domaine, le groupe Utilisateurs du domaine est ajouté au groupe Utilisateurs sur l'ordinateur.

Source identificateurs de sécurité bien connues dans les systèmes d'exploitation de Windows

Pour récupérer le Usersnom du groupe localisé :

Ce script simple vous donnera le nom réel du groupe «Utilisateurs» (S-1-5-32-545)sur un PC donné:

    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    Set objAccount = objWMIService.Get ("Win32_SID.SID='S-1-5-32-545'")
    Wscript.Echo objAccount.AccountName

Mettez-le dans un fichier avec l'extension vbs (supposons usersName.vbs).

Maintenant, lancez:

echo Y|for /f "delims=" %i in ('cscript -Nologo usersName.vbs') do cacls foldername /G "%i":F

Source Cacls, Windows 7, autorisations complètes, noms locaux par wmz


Option 3: utilisez le UsersSID avecicacls

Utilisez la commande suivante:

icacls C:\FullyAccessibleFolder /grant *S-1-5-32-545:(OI)(CI)F

Commentaire de la source par Harry Johnston

DavidPostill
la source
J'ai accepté la réponse de DavidPostill car elle le fait d'une véritable manière en ligne de commande, ce qui est excellent lorsque vous utilisez des scripts batch ou PS. En fin de compte, j'ai créé un petit exécutable en C # qui prend juste un chemin et fait exactement ce dont j'ai besoin. Ce n'est pas aussi personnalisable que les réponses ici, et cela nécessite .NET Framework, mais cela convient très bien à mon objectif particulier. Si quelqu'un est intéressé, voici la base du code C # avec lequel j'ai fini par aller. stackoverflow.com/a/35461832/1639615
Geesh_SO
xcaclssemble être un script que vous pouvez télécharger. Il n'y a pas besoin; icaclsest intégré à Windows et peut faire le même travail.
Harry Johnston
@HarryJohnston Correct, mais ma réponse montre comment récupérer la version localisée de Users... J'ai clarifié la réponse car nous n'avons pas besoin de la xaclspartie de la solution citée.
DavidPostill
@HarryJohnston J'ai également ajouté l'utilisation icaclsdirecte avec crédit pour vous.
DavidPostill
7

Vous devez spécifier le groupe AD non pas par son nom, mais par le numéro SID.
Pour les groupes standard tels que "EveryOne", "Domain Users", etc., il existe des numéros SID normalisés, qui se trouvent sur la page MSDN. Identificateurs de sécurité (SID) connus .

Voici les identifiants relatifs les plus courants.

entrez la description de l'image ici

La structure d'un SID est décrite comme suit:

Les composants d'un SID sont plus faciles à visualiser lorsque les SID sont convertis du format binaire au format chaîne en utilisant la notation standard:

SRX-Y1-Y2-Yn-1-Yn

    Component                   Definition

    S                         Indicates that the string is a SID
    R                         Revision level
    X                         Identifier authority value
    Y            A series of subauthority values, where n is the number of values

Par exemple, le SID du groupe Administrateurs intégré est représenté en notation SID normalisée sous la forme de la chaîne suivante:

S-1-5-32-544

Ce SID a quatre composants:

  • Un niveau de révision (1)

  • Une valeur d'autorité d'identification (5, NT Authority)

  • Un identifiant de domaine (32, Builtin)

  • Un identifiant relatif (544, Administrateurs)

Fonctionnement des identificateurs de sécurité

Tonny
la source
Il convient de souligner que tous les utilisateurs font partie du groupe d'utilisateurs par défaut. Donc, si vous souhaitez donner "un accès complet: à tous les comptes d'utilisateurs, utilisez simplement SID S-1-5-32-544, puis modifiez l'ACL pour accorder toutes les autorisations au groupe pour le fichier ou le dossier en question
Ramhound
@Ramhound 544est Administrateurs, 545c'est Utilisateurs.
DavidPostill
@DavidPostill - Oui; Copiez et collez l'erreur.
Ramhound
@Ramhound Beaucoup mieux. C'était le mieux que je pouvais faire en étant au téléphone. Merci pour l'édition.
Tonny
3

Si vous aimez les scripts PowerShell mais avez du mal à vous souvenir des numéros des SID:

$acl = Get-Acl .\myfolder
$sid = New-Object System.Security.Principal.SecurityIdentifier ([System.Security.Principal.WellKnownSidType]::BuiltinUsersSid, $null)
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule ($sid, 'FullControl', 'ObjectInherit,ContainerInherit', 'None', 'Allow')
$acl.AddAccessRule($rule)
Set-Acl .\myfolder $acl

Je sais que cela ressemble à une tonne de frappe, mais ces longs identificateurs sont complétés par des tabulations:

  • System.Security.Principal.SecurityIdentifier de securityi
  • System.Security.Principal.WellKnownSidType de wellknownsi
  • System.Security.AccessControl.FileSystemAccessRule de filesystem

Toutes ces chaînes sont des identificateurs .NET, donc elles ne sont pas localisées.

Si vous souhaitez Everyoneplutôt le SID, utilisez WorldSidà la place de BuiltinUsersSid. Pour obtenir la liste de toutes les WellKnownSidTypeoptions, voir MSDN ou exécutez cette commande:

[System.Security.Principal.WellKnownSidType].DeclaredFields | select Name
Ben N
la source
FileSystemAccessRule sans Sid et en utilisant group names?
Kiquenet
@Kiquenet Je ne suis pas tout à fait sûr de ce que vous demandez, mais si vous préférez spécifier un nom de groupe lisible par l'homme, il ne sera plus indépendant de la langue. Si vous êtes OK avec cela, vous pouvez supprimer la $sid =ligne et remplacer $siddans la $rule =ligne avec une chaîne identifiant le groupe.
Ben N