¿Cómo otorgar permiso a los usuarios para un directorio usando la línea de comandos en Windows?

Respuestas:

420

A partir de Vista, caclsestá en desuso. Aquí están las primeras líneas de ayuda:

C:\>cacls
NOTE: Cacls is now deprecated, please use Icacls.

Displays or modifies access control lists (ACLs) of files

Deberías usar icaclsen su lugar. Así es como le otorga a John el control total sobre la D:\testcarpeta y todas sus subcarpetas:

C:\>icacls "D:\test" /grant John:(OI)(CI)F /T

Según la documentación de MS:

  • F = Control total
  • CI = Herencia de contenedor: este indicador indica que los contenedores subordinados heredarán esta ACE.
  • OI = Heredar objeto: este indicador indica que los archivos subordinados heredarán la ACE.
  • /T= Aplicar de forma recursiva a archivos y subcarpetas existentes. ( OIy CIsolo se aplica a archivos y subcarpetas nuevos). Crédito: comentario de @AlexSpence.

Para obtener la documentación completa, puede ejecutar " icacls" sin argumentos o ver la documentación de Microsoft aquí y aquí

Călin Darie
fuente
44
Felipe: Los parámetros (OI) y (CI) hacen que esto sea recursivo
Chris Miller
22
Tuve problemas con el acceso denegado al intentar cambiar los permisos en la interfaz de usuario del explorador de Windows. Agregar el indicador / T al final reemplazó los objetos existentes y pude resolver el problema por mí. C:> icacls "D: \ test" / grant John: (OI) (CI) F / T
Alex Spence
9
@AlexSpence ¡Gran punto! El / T es necesario para actualizar los permisos de los archivos y carpetas existentes . (OI) y (CI) solo se aplican a los archivos y carpetas creados en el futuro.
Jesse
55
Procedente del mundo * nix y se utiliza para 'chown / chmod' para dar acceso y establecer permisos a través de la CLI, este hilo ha sido muy útil.
bgarlock
55
Si ejecuta esto en Powershell en Windows 10, obtendrá el error sobre "OI no reconocido". Solución: Ponga el argumento usuario + permisos entre comillas. Por ejemplo:C:\>icacls "D:\test" /grant "John:(OI)(CI)F" /T
JDS
78

También puedes usar ICACLS.

Para otorgar el control total del grupo de usuarios a una carpeta:

>icacls "C:\MyFolder" /grant Users:F

Para otorgar permiso de modificación a los usuarios de IIS C:\MyFolder(si necesita que su IIS tenga capacidad para R / W archivos en una carpeta específica):

>icacls "C:\MyFolder" /grant IIS_IUSRS:M

Si haces ICACLS /? Podrá ver todas las opciones disponibles.

Vin.X
fuente
Y dado que caclsse ha ido, es aún más razón para usar icacls .
Ian Boyd
2
Agregar control total no funcionó para mí hasta que se /grant Users:(OI)(CI)Fusó
Jan Zahradník
¿Necesito reemplazar Userscon algo más o NO? Segúnicacls "C:\MyFolder" /grant Users:F
iori
Si el usuario actual es un miembro del grupo de usuarios llamado "Usuarios" (que, en Windows 7, normalmente es el caso), otorgar un permiso a ese grupo afectará los derechos de acceso del usuario actual. En cualquier otro caso, reemplace el nombre Usuarios con el nombre real del usuario actual (por ejemplo, John), por lo tanto: / grant John: (OI) (CI) F
Ed999
24

Abra un símbolo del sistema, luego ejecute este comando:

icacls "c:\somelocation\of\path" /q /c /t /grant Users:F

F da acceso completo.

/q /c /t aplica los permisos a las subcarpetas.

Nota: A veces, "Ejecutar como administrador" ayudará.

Sireesh Yarlagadda
fuente
Se necesita "Ejecutar como administrador", ¡simplemente la mejor respuesta!
Jeb50
20

Usa el caclscomando. Ver información aquí .

Archivos CACLS / e / p {NOMBRE DE USUARIO}: {PERMISO}

Dónde,

/ p: establecer un nuevo permiso

/ e: Editar permiso y mantuvo el permiso anterior tal como está, es decir, editar ACL en lugar de reemplazarlo.

{USERNAME}: nombre del usuario

{PERMISO}: El permiso puede ser:

R - Leer

W - Escribir

C - Cambiar (escribir)

F - Control total

Por ejemplo, otorgue el control Rocky Full (F) con el siguiente comando (escriba en el símbolo del sistema de Windows):

C:> archivos CACLS / e / p rocky: f

Lea la ayuda completa escribiendo el siguiente comando:

C:> cacls /?

Jorge Ferreira
fuente
¡Gran respuesta! Lo único a tener en cuenta es que los archivos son los archivos reales en los que desea cambiar los permisos. Tal vez [archivos] o {archivos} sería una mejor explicación.
Connor Ross
14
Cacls está en desuso!
Hardik Thaker
caclses relevante; todavía está disponible en Windows 10; Microsoft despreciaría cmd.exetambién a Powershell.
1
@ Chinggis6 Estar "todavía disponible" no significa que algo sea una buena idea para usar o recomendar que otros lo usen. Además, cmd.exeno está en desuso y es probable que no lo sea, por lo que no es un punto a favor, sino icaclstodo lo contrario.
underscore_d
1
Lo sé. No dije si es una buena idea usar o recomendar cacls.exe. Tampoco mencioné que cmd.exeya está en desuso. Creo que las personas deberían al menos ser conscientes de su disponibilidad en versiones superiores, incluso solo por compatibilidad con versiones anteriores o por cualquier otro motivo.
12

Intento de la siguiente manera y me funciona:
1. Abra cmd.exe
2. takeown /R /F *.*
3. icacls * /T /grant [username]:(D)
4.del *.* /S /Q

Para que los archivos puedan convertirse en mi propio acceso y se asignen a "Eliminar" y luego puedo eliminar los archivos y carpetas.

Ray Huang
fuente
7

Permisos corruptos: recuperar el acceso a una carpeta y sus subobjetos

Aunque la mayoría de las respuestas publicadas en respuesta a la pregunta tienen algún mérito, en mi humilde opinión, ninguna de ellas ofrece una solución completa. La siguiente (podría ser) una solución perfecta para Windows 7 si está bloqueado de una carpeta por la configuración de permisos corruptos:

icacls "c:\folder" /remove:d /grant:r Everyone:(OI)(CI)F /T  

Para Windows 10, el usuario / SID debe especificarse después de la /remove:dopción:

icacls "c:\folder" /remove:d Everyone /grant:r Everyone:(OI)(CI)F /T  

.
Notas :

  1. El comando se aplica al directorio especificado.

  2. Especificar el usuario "Todos" establece el permiso más amplio posible, ya que incluye a todos los usuarios posibles.

  3. La opción "/ remove: d" elimina cualquier configuración explícita de DENY que pueda existir, ya que anula la configuración explícita de ALLOW: un preliminar necesario para crear una nueva configuración de ALLOW. Esto es solo una precaución, ya que a menudo no existe una configuración DENY, pero es mejor prevenir que curar.

  4. La opción "/ grant" crea una nueva configuración PERMITIR, un permiso explícito que reemplaza (": r") cualquiera y todas las configuraciones PERMITIDAS explícitas que puedan existir.

  5. El parámetro "F" (es decir, el permiso creado) hace que esto otorgue el control COMPLETO.

  6. El parámetro "/ T" agrega recursividad, aplicando estos cambios a todos los subobjetos actuales en el directorio especificado (es decir, archivos y subcarpetas), así como a la carpeta misma.

  7. Los parámetros "(OI)" y "(CI)" también agregan recursividad, aplicando estos cambios a los subobjetos creados posteriormente.
    .

ADENDA (10/02/2019) -

La línea de comandos de Windows 10 anterior me fue sugerida amablemente hoy, así que aquí está. No tengo Windows 10 para probarlo, pero pruébelo si lo tiene (y luego, ¿podrá publicar un comentario?) continuación).

El cambio solo se refiere a eliminar la configuración DENY como primer paso. Es posible que no haya ninguna configuración DENY presente, por lo que esa opción podría no hacer ninguna diferencia. Tengo entendido que, en Windows 7, no necesita especificar un usuario después de / eliminar: d, ¡ pero podría estar equivocado al respecto!

.

ADENDA (21/11/2019) -

El usuario astark recomienda reemplazar Todos con el término * S-1-1-0 para que el comando sea independiente del idioma. Solo tengo una instalación de Windows en inglés, por lo que no puedo probar esta propuesta, pero parece razonable.

Ed999
fuente
No se necesita ninguna disposición para los permisos HEREDADOS, porque los permisos EXPLICIT los anulan. Por lo tanto, la creación de la nueva configuración explícita anula cualquier configuración heredada que pueda existir (porque la nueva configuración explícita incluye recursividad).
Ed999
Invalid parameter "/remove:d"
DFSFOT
Estoy ejecutando (solo puedo ejecutar) icacls.exe en Windows 7. No puedo comentar ni probar ningún cambio que pueda existir en Windows 8 o 10. Según lo probé en Windows 7 de 64 bits, la eliminación La opción es efectiva para eliminar la configuración DENY. Su uso puede dar como resultado un mensaje de error si NO hay configuraciones de denegación presentes, pero si no existen, entonces no puede eliminarlas de todos modos.
Ed999
Si no reproduzco exactamente la línea de comando en mi respuesta original (salvo para la ruta del directorio), el comando fallará. En particular, NO agregue comillas que no figuran en mi respuesta. Si encierra (por ejemplo) la opción / remove: d entre comillas, el comando, por supuesto, fallará.
Ed999
1
@DFSFOT Bueno, simpatizo. Pero uso Windows 7. Con la gracia de Dios, nunca usaré Windows 10. ¡Prefiero migrar a Ubuntu! Yo sospecho que el / remove: g probablemente eliminará todos los derechos, tanto el permitir y la NIEGO entradas (aunque con la posibilidad de que 'concedió' en este contexto significa sólo se permiten y lo que no procesará ningún niegan entradas); mientras que / remove: d presumiblemente solo eliminará las entradas DENY, dejando sin cambios las entradas PERMITIR. Pero, por supuesto, no puedo estar seguro.
Ed999
5

Luché con esto por un tiempo y sólo la combinación de las respuestas en este tema trabajado para mí (en Windows 10):
1. Abrir cmd o PowerShell y vaya a la carpeta con los archivos
2. takeown / R / F .
3. icacls * / T / grant dan: F

¡Buena suerte!

Daniil Shevelev
fuente
3

En caso de que haya alguien más que tropiece en esta página, si desea agrupar varios permisos en un solo comando, utilicé esto:

icacls "c:\TestFolder" /grant:r Test_User:(OI)(CI)(RC,RD,RX)

Tenga en cuenta la cadena csv para los distintos permisos.

Anuncios
fuente
Muchas gracias Me ayudó a establecer el permiso para RX & RD. En la mayoría de los ejemplos dados en Internet se explicó con / F permiso completo, que no debería ser el caso.
Mani
2

Con un script Excel vba para aprovisionar y crear cuentas. Necesitaba otorgar permisos de derechos completos a la carpeta y subcarpetas que fueron creadas por la herramienta usando la cuenta 'x' de nuestros administradores para nuestro nuevo usuario.

cacls se parecía a esto: cacls \ FileServer \ Users \ Username / e / g Domain \ Username: C

Necesitaba migrar este código a Windows 7 y más allá. Mi solución resultó ser:

icacls \ FileServer \ Users \ Nombre de usuario / concesión: r Dominio \ Nombre de usuario: (OI) (CI) F / t

/ grant: r: otorga derechos de acceso de usuario especificados. Los permisos reemplazan los permisos explícitos previamente otorgados. Sin: r, los permisos se agregan a cualquier permiso explícito previamente otorgado

(OI) (CI): esta carpeta, subcarpetas y archivos.

F - Acceso completo

/ t: recorre todas las subcarpetas para que coincidan con los archivos / directorios.

Lo que esto me dio fue una carpeta en este servidor en la que el usuario solo podía ver esa carpeta y crear subcarpetas, que podían leer y escribir archivos. Además de crear nuevas carpetas.

Gus
fuente
1

XCACLS.VBS es un script muy poderoso que cambiará / editará la información de ACL. La ayuda de c: \ windows \ system32 \ cscript.exe xcacls.vbs devuelve todos los modificadores y opciones.

Puede obtener la distribución oficial desde la página de soporte de Microsoft

g222
fuente
3
¿Puede proporcionar una referencia donde XCACLS.VBSse puede encontrar?
Jeremy J Starcher
1

La creación de carpetas masivas y el permiso de concesión me funcionan utilizando el siguiente script de PowerShell.

Import-Csv "D:\Scripts\foldernames.csv" | foreach-object {
    $username = $_.foldername 

    # foldername is the header of csv file

    $domain = “example.com”

    $folder= "D:\Users"

    $domainusername = $domain+“\”+$username

    New-Item $folder\$username –Type Directory

    Get-Acl $folder\$username  

    $acl = Get-Acl $folder\$username

    $acl.SetAccessRuleProtection($True, $False)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Administrators","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("SYSTEM","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$domain\Domain Admins","Read", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($domainusername,"Modify", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    Set-Acl $folder\$username $acl
}

Nota: debe crear el mismo nombre de usuario de dominio en el archivo csv, de lo contrario obtendrá problemas de permisos

usuario2934980
fuente
0
attrib +r +a +s +h <folder name> <file name> to hide
attrib -r -a -s -h <folder name> <file name> to unhide
Yashwanth
fuente
2
Esos son atributos del archivo (solo lectura, archivo, sistema, oculto) no permisos, que están vinculados a cuentas de usuario.
Robin Bennett
0

excelente punto Călin Darie

Tenía muchas secuencias de comandos para usar cacls. Las moví a icacls. Sin embargo, no pude encontrar una secuencia de comandos para cambiar el volumen de montaje raíz ejemplo: d: \ datafolder. Finalmente creé el script a continuación, que monta el volumen como una unidad temporal y luego aplica seg. Luego lo desmonta. Es la única forma en que descubrí que puede actualizar la seguridad del montaje raíz.

1 obtiene el GUID de montaje de la carpeta en un archivo temporal y luego lee el GUID para montar el volumen como una unidad temporal X: aplica seg y registra los cambios y luego desmonta el volumen solo de la unidad X: para que la carpeta montada no se altere o interrumpa entonces el sec aplicado.

Aquí hay una muestra de mi script:

**mountvol "d:\%1" /L >tempDrive.temp && FOR /f "tokens=*" %%I IN (tempDrive.temp) DO mountvol X: %%I 
D:\tools\security\icacls.exe  %~2 /grant domain\group:(OI)(CI)F /T /C >>%~1LUNsec-%TDWEEK%-%TMONTH%-%TDAY%-%TYEAR%-%THOUR%-%TMINUTE%-%TAM%.txt
if exist x:\*.* mountvol X: /d**
HandyMannyHE
fuente
0

Soy Administrador y algunas secuencias de comandos colocaron el permiso "Denegar" en mi nombre en todos los archivos y subcarpetas en un directorio. Ejecutar el icacls "D:\test" /grant John:(OI)(CI)F /Tcomando no funcionó, porque parecía que no eliminaba el "Denegar" directamente de mi nombre de esta lista.

Lo único que funcionó para mí es restablecer todos los permisos con el icacls "D:\test" /reset /Tcomando.

B. Zoli
fuente
Es posible superar el problema sin usar el comando de reinicio, especificando '' / remove: d '' para eliminar cualquier configuración explícita de DENY que pueda existir; vea mi solución perfecta (arriba).
Ed999
-1

en windows 10 trabajando sin "c:>" y ">"

Por ejemplo:

F = Full Control
/e : Edit permission and kept old permission
/p : Set new permission

cacls "ruta de archivo o carpeta" / e / p Nombre de usuario: F

(también esto corrige el error 2502 y 2503)

Cacls "C: \ Windows \ Temp" / e / p Nombre de usuario: F

Dao1988
fuente
-5

Esto es lo que funcionó para mí:

  1. Abra manualmente la carpeta para la que se deniega el acceso.

  2. Seleccione el archivo ejecutable / aplicación en esa carpeta.

  3. Haga clic derecho sobre él y vaya a Properties->Compatibility

  4. Ahora vea el Privilege Levely verifíqueloRun As Administrator

  5. Haga clic en Change Settings for all users.

El problema está resuelto ahora.

MAYUR
fuente
La pregunta es para hacer lo anterior a través de la línea de comando. Si bien su sugerencia podría funcionar bien, no es aplicable si solo tiene acceso de terminal (ssh) a un servidor que debe configurarse, por lo que deberá usar un script cmd
Ivaylo Slavov