Independentemente da linguagem do Windows, como posso fazer com que o comando ICACLS defina uma pasta para ter acesso total a todos?

8

Plano de fundo

Digamos que eu tenha este comando

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

Isso funciona bem nas versões em inglês do Windows, mas parece não funcionar nas versões em francês, apresentando o seguinte erro, presumivelmente devido a Users ser diferente em francês. Everyone é traduzido como Tout le monde no Windows, o que também não é uma solução.

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

Que o Google traduz como

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

Pergunta

Existe um comando que eu possa usar para definir uma pasta e recursivamente todo o seu conteúdo para ter permissões completas para todos os usuários de uma maneira que funcione em diferentes versões de idioma do Windows?

Conteúdo de toda a web

Esta página com um problema muito semelhante fala sobre como Everyone se torna Jeder em alemão e Tout le monde em francês.

    
por Geesh_SO 08.02.2017 / 14:56

3 respostas

10

Não funciona nas versões em francês, presumivelmente devido a Users ser diferente

Você tem três opções, detalhadas abaixo:

  1. Use o Portal de idiomas para obter o nome traduzido

  2. Recupere o nome localizado do Users SID

  3. Use o Users SID com icacls

Opção 1: Use o Portal de idiomas (recurso canônico para a terminologia da Microsoft)

Uma pesquisa por Usuários retorna:

Translations in Localized Microsoft Products

    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

Isso sugere que o seguinte comando pode funcionar:

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

Opção 2: recuperar o nome localizado do Users SID ( S-1-5-32-545 )

SID: S-1-5-32-545

Name: Users

Description: A built-in group. After the initial installation of the operating system, the only member is the Authenticated Users group. When a computer joins a domain, the Domain Users group is added to the Users group on the computer.

Fonte Identificadores de segurança conhecidos em Sistemas Operacionais Windows

Para recuperar o nome do grupo Users localizado:

This simple script will give you actual name of 'Users' (S-1-5-32-545) group on a given PC:

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

Put it into a file with vbs extension (Let's assume usersName.vbs).

Now run:

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

Fonte Cacls, Windows 7, permissões completas, nomes locais por wmz

Opção 3: use o Users SID com icacls

Use o seguinte comando:

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

Comentário da fonte por Harry Johnston

    
por 08.02.2017 / 15:31
6

Você precisa especificar o grupo AD não pelo nome, mas pelo número SID.
Para grupos padrão como "EveryOne", "Usuários do Domínio", etc., há números SID padronizados, que podem ser encontrados na página do MSDN Identificadores de segurança conhecidos (SIDs) .

Os seguintes são os identificadores relativos mais comuns.

AestruturadeumSIDédescritadaseguinteforma:

ThecomponentsofaSIDareeasiertovisualizewhenSIDsareconvertedfrombinarytostringformatbyusingstandardnotation:

S-R-X-Y1-Y2-Yn-1-Yn

ComponentDefinitionSIndicatesthatthestringisaSIDRRevisionlevelXIdentifierauthorityvalueYAseriesofsubauthorityvalues,wherenisthenumberofvalues

Forexample,theSIDforthebuilt-inAdministratorsgroupisrepresentedinstandardizedSIDnotationasthefollowingstring:

S-1-5-32-544

ThisSIDhasfourcomponents:

  • Arevisionlevel(1)

  • Anidentifierauthorityvalue(5,NTAuthority)

  • Adomainidentifier(32,Builtin)

  • Arelativeidentifier(544,Administrators)

Como funcionam os identificadores de segurança

    
por 08.02.2017 / 15:37
3

Se você gosta de scripts do PowerShell, mas tem problemas para lembrar números de SIDs:

$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

Sei que parece uma tonelada de digitação, mas esses identificadores longos são preenchidos por guias:

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

Todas essas strings são identificadores .NET, portanto, não são localizadas.

Se você quiser o Everyone SID, use WorldSid no lugar de BuiltinUsersSid . Para obter a lista de todas as opções de WellKnownSidType , consulte o MSDN ou execute este comando:

[System.Security.Principal.WellKnownSidType].DeclaredFields | select Name
    
por 08.02.2017 / 20:54