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

9

fundo

Diga que tenho 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, dando o seguinte erro, provavelmente devido a Usersser diferente em francês. Everyoneé traduzido como Tout le mondeno Windows, então 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é.

Qual Google traduz como

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

Questão

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

Conteúdo de toda a web

Esta página com um problema amplamente semelhante fala sobre como Everyonefica Jederem alemão e Tout le mondeem francês.

Geesh_SO
fonte
2
Basta usar o SID: icacls C:\FullyAccessibleFolder /grant S-1-5-32-545:(OI)(CI)F funciona em qualquer lugar.
187 Ben Ben
2
@ Ben, isso deve ser icacls C:\folder /grant *S-1-5-32-545:(OI)(CI)F, você deixou de fora o asterisco.
Harry Johnston

Respostas:

10

Não funciona nas versões francesas, provavelmente devido a Usersser diferente

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

  1. Use o portal Use the Language para obter o nome traduzido

  2. Recupere o nome localizado do UsersSID

  3. Use o UsersSID comicacls


Opção 1: Use o portal de idiomas (recurso canônico da Microsoft Terminology)

Uma pesquisa por Usuários retorna:

Traduções em produtos Microsoft localizados

    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 UsersSID ( S-1-5-32-545)

SID: S-1-5-32-545

Nome: Usuários

Descrição: um grupo interno. Após a instalação inicial do sistema operacional, o único membro é o grupo Usuários Autenticados. Quando um computador ingressa em um domínio, o grupo Usuários do Domínio é adicionado ao grupo Usuários no computador.

Fonte Bem conhecido identificadores de segurança em sistemas operacionais Windows

Para recuperar o Usersnome do grupo localizado :

Este script simples fornecerá o nome real do (S-1-5-32-545)grupo 'Usuários' em um determinado PC:

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

Coloque-o em um arquivo com extensão vbs (vamos assumir usersName.vbs).

Agora execute:

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

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


Opção 3: use o UsersSID comicacls

Use o seguinte comando:

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

Comentário da fonte por Harry Johnston

DavidPostill
fonte
Aceitei a resposta do DavidPostill, pois ela é feita de maneira verdadeira na linha de comando, o que é ótimo ao usar scripts em lote ou PS. No final, eu criei um pouco de executável em C #, que apenas pega um caminho e faz exatamente o que eu preciso. Não é tão personalizável quanto as respostas aqui e requer o .NET Framework, mas atende muito bem ao meu objetivo específico. Se alguém estiver interessado, aqui está a base do código C # que acabei usando. stackoverflow.com/a/35461832/1639615
Geesh_SO 8/17/17
xcaclsparece ser um script que você pode baixar. Não há necessidade; icaclsestá embutido no Windows e pode fazer o mesmo trabalho.
Harry Johnston
@HarryJohnston Correto, mas minha resposta está mostrando como recuperar a versão localizada de Users... Esclareci a resposta, pois não precisamos da xaclsparte da solução citada.
DavidPostill
@HarryJohnston Eu também adicionei usando icaclsdiretamente com crédito para você.
DavidPostill
7

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

A seguir estão os identificadores relativos mais comuns.

insira a descrição da imagem aqui

A estrutura de um SID é descrita da seguinte maneira:

Os componentes de um SID são mais fáceis de visualizar quando os SIDs são convertidos do formato binário em formato de string usando a notação padrão:

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

Por exemplo, o SID do grupo Administradores interno é representado na notação SID padronizada como a seguinte sequência:

S-1-5-32-544

Este SID possui quatro componentes:

  • Um nível de revisão (1)

  • Um valor da autoridade identificadora (5, NT Authority)

  • Um identificador de domínio (32, interno)

  • Um identificador relativo (544, Administradores)

Como funcionam os identificadores de segurança

Tonny
fonte
Vale ressaltar que todos os usuários fazem parte do grupo de usuários por padrão. Então, se você quiser dar "acesso completo: a todos contas de usuário, basta usar SID S-1-5-32-544, e, em seguida, modificar o ACL para dar todas as permissões para o grupo para o arquivo ou pasta em questão
Ramhound
@ Ramhound 544é Administradores, 545é Usuários.
DavidPostill
@DavidPostill - Sim; Erro de copiar e colar.
Ramhound
@ Ramhound Muito melhor. Foi o melhor que pude fazer enquanto estava ao telefone. Obrigado pela edição.
Tonny
3

Se você gosta de scripts do PowerShell, mas não consegue lembrar os números dos 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

Eu sei que parece uma tonelada de digitação, mas esses identificadores longos são preenchidos por tabulação:

  • 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, para que não sejam localizadas.

Se você deseja o EveryoneSID, use WorldSidno lugar de BuiltinUsersSid. Para obter a lista de todas as WellKnownSidTypeopções, consulte o MSDN ou execute este comando:

[System.Security.Principal.WellKnownSidType].DeclaredFields | select Name
Ben N
fonte
FileSystemAccessRule sem Sid e usando group names?
Kiquenet
@ Kiquenet Não sei bem o que você está perguntando, mas se você preferir especificar um nome de grupo legível por humanos, isso não será mais independente do idioma. Se você $sid =concordar com isso, poderá remover a linha e substituí $sid-la $rule =por uma sequência que identifique o grupo.
Ben N