Independientemente del idioma de Windows, ¿cómo puedo hacer que el comando ICACLS configure una carpeta para que tenga acceso completo a todos?

8

Fondo

Di que tengo este comando

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

Esto funciona bien en las versiones en inglés de Windows, pero no parece funcionar en las versiones en francés, dando el siguiente error, probablemente debido a Users ser diferente en francés Everyone se traduce como Tout le monde en Windows, por lo que tampoco es una solución.

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

Que traduce Google como

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

Pregunta

¿Hay algún comando que pueda usar para configurar una carpeta y recursivamente todo su contenido para tener permisos completos para todos los usuarios de una manera que funcione en diferentes idiomas de Windows?

Contenido de toda la web.

Esta página con un problema en gran medida similar habla de cómo Everyone se convierte en Jeder en aleman y Tout le monde en francés.

Geesh_SO
fuente
2
Solo usa el SID: icacls C:\FullyAccessibleFolder /grant S-1-5-32-545:(OI)(CI)F Funciona en todas partes.
Ben
2
@Ben, eso debería ser icacls C:\folder /grant *S-1-5-32-545:(OI)(CI)F, dejaste fuera el asterisco.
Harry Johnston

Respuestas:

10

No funciona en versiones francesas, presumiblemente debido a Users Ser diferente

Tienes tres opciones, detalladas a continuación:

  1. Usa el uso del Portal de idiomas para obtener el nombre traducido

  2. Recuperar el nombre localizado de la Users SID

  3. Utilizar el Users SID con icacls


Opción 1: utilizar el Portal de idiomas (recurso canónico para la terminología de Microsoft)

Una búsqueda de Usuarios devoluciones:

Traducciones en productos de 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

Esto sugiere que el siguiente comando puede funcionar:

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

Opción 2: recuperar el nombre localizado de la Users SID ( S-1-5-32-545 )

SID: S-1-5-32-545

Nombre: Usuarios

Descripción: Un grupo integrado. Después de la   Instalación inicial del sistema operativo, el único miembro es el   Grupo de usuarios autenticados. Cuando una computadora se une a un dominio, el dominio   El grupo Usuarios se agrega al grupo Usuarios en la computadora.

Fuente Identificadores de seguridad conocidos en sistemas operativos Windows

Para recuperar lo localizado. Users Nombre del grupo:

Este simple guion   le dará el nombre real de 'Usuarios' (S-1-5-32-545) grupo en un determinado   ORDENADOR PERSONAL:

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

Póngalo en un archivo con extensión vbs (Asumamos usersName.vbs ).

Ahora ejecuta:

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

Fuente Cacls, Windows 7, permisos completos, nombres locales por wmz


Opción 3: utilizar el Users SID con icacls

Usa el siguiente comando:

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

Fuente de comentario por Harry Johnston

DavidPostill
fuente
He aceptado la respuesta de DavidPostill, ya que lo hace en una verdadera línea de comandos, lo cual es genial cuando se usan scripts de lotes o PS. Al final, creé un pequeño ejecutable en C # que solo toma un camino y hace exactamente lo que necesito. No es tan personalizable como las respuestas aquí, y requiere .NET Framework, pero se adapta muy bien a mi propósito particular. Si alguien está interesado, aquí está la base del código C # con el que terminé yendo. stackoverflow.com/a/35461832/1639615
Geesh_SO
xcacls Parece ser un script que puedes descargar. No hay necesidad; icacls Está integrado en Windows y puede hacer el mismo trabajo.
Harry Johnston
@HarryJohnston Correcto, pero mi respuesta muestra cómo recuperar la versión localizada de Users ... He aclarado la respuesta ya que no necesitamos el xacls parte de la solución citada.
DavidPostill
@HarryJohnston también he añadido usando icacls directamente con crédito para usted.
DavidPostill
7

Debe especificar el grupo de AD no por su nombre, sino por el número SID.
Para grupos estándar como "EveryOne", "Domain Users", etc. hay números SID estandarizados, que se pueden encontrar en la página de MSDN Identificadores de seguridad conocidos (SID) .

Los siguientes son los identificadores relativos más comunes.

enter image description here

La estructura de un SID se describe de la siguiente manera:

Los componentes de un SID son más fáciles de visualizar cuando los SID son   convertido de formato binario a cadena mediante notación estándar:

S-R-X-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 ejemplo, el SID para el grupo de administradores integrado es   representado en notación SID estandarizada como la siguiente cadena:

S-1-5-32-544

Este SID tiene cuatro componentes:

  • Un nivel de revisión (1)

  • Un valor de autoridad de identificador (5, Autoridad NT)

  • Un identificador de dominio (32, Builtin)

  • Un identificador relativo (544, Administradores)

Cómo funcionan los identificadores de seguridad

Tonny
fuente
Vale la pena señalar que todos los usuarios forman parte del grupo de usuarios de forma predeterminada. Entonces, si desea dar "acceso completo: a todas las cuentas de usuario, simplemente use SID S-1-5-32-544y luego modifique la ACL para otorgar todos los permisos al grupo para el archivo o carpeta en cuestión
Ramhound
@Ramhound 544 es Administradores, 545 es Usuarios.
DavidPostill
@DavidPostill - Sí; Copia y pega error.
Ramhound
@Ramhound Mucho mejor. Era lo mejor que podía hacer mientras hablaba por teléfono. Gracias por la edición.
Tonny
3

Si le gustan los scripts de PowerShell pero tiene problemas para recordar los números de los 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

Sé que parece una tonelada de escritura, pero estos identificadores largos se completan mediante pestañas:

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

Todas estas cadenas son identificadores .NET, por lo que no se localizan.

Si quieres el Everyone SID en su lugar, use WorldSid en lugar de BuiltinUsersSid. Para obtener la lista de todos WellKnownSidType opciones, ver MSDN o ejecuta este comando:

[System.Security.Principal.WellKnownSidType].DeclaredFields | select Name
Ben N
fuente
FileSystemAccessRule sin Sid y usando group names ?
Kiquenet
@Kiquenet No estoy del todo seguro de lo que está preguntando, pero si prefiere especificar un nombre de grupo legible, ya no será independiente del idioma. Si estás de acuerdo con eso, puedes eliminar el $sid = alinear y reemplazar $sid en el $rule = línea con una cadena que identifica el grupo.
Ben N