Si has cambiado permisos NTFS desde linea de comandos seguramente te suenen los comandos cacls, xcacls, setACL, fileACL...
Windows 7/2008 traen la utilidad de linea de comandos icacls (que funciona mucho mejor que su antecesor xcacls)
Por ejemplo si queremos añadir a los administradores locales permiso de Control Total sobre una carpeta (y subcarpetas):
Aunque se puede añadir permisos con el nombre del usuario/grupo, prefiero usar el SID para evitar problemas con los distintos idiomas (Administradores/Administrators).
Este comando crea una entrada para los Administradores locales en cada ACL de cada carpeta, pero si prefieres que las carpetas, subcarpetas y ficheros hereden los permisos de la carpeta padre:
En mi caso he necesitado añadir Administrators y SYSTEM a todas las subcarpetas de una unidad (sin modificar la carpeta padre), con un bucle 'FOR' lo conseguimos enseguida:
Pero, claro si quieres añadir este permiso es porque no tienes acceso, y los comandos anteriores te devolveran un Acceso Denegado.
Antes tendras que tomar posesion de las carpetas y ficheros:
He preparado un bat para ejecutar los comandos segun cada necesidad:
De esta manera con asignar a la variable val 02,03,04,05,12,13,14,15 contemplo todas las opciones que me interesan.
Windows 7/2008 traen la utilidad de linea de comandos icacls (que funciona mucho mejor que su antecesor xcacls)
Por ejemplo si queremos añadir a los administradores locales permiso de Control Total sobre una carpeta (y subcarpetas):
icacls.exe "%ruta%" /Q /T /grant:r *S-1-5-32-544:(OI)(CI)(F)
Aunque se puede añadir permisos con el nombre del usuario/grupo, prefiero usar el SID para evitar problemas con los distintos idiomas (Administradores/Administrators).
Este comando crea una entrada para los Administradores locales en cada ACL de cada carpeta, pero si prefieres que las carpetas, subcarpetas y ficheros hereden los permisos de la carpeta padre:
icacls.exe "%ruta%" /Q /T /inheritance:e
En mi caso he necesitado añadir Administrators y SYSTEM a todas las subcarpetas de una unidad (sin modificar la carpeta padre), con un bucle 'FOR' lo conseguimos enseguida:
For /F "eol=* tokens=*" %%i IN ('dir "%ruta%" /b /AD') do icacls.exe "%ruta%\%%i" /Q /grant:r *S-1-5-32-544:(OI)(CI)(F) /grant:r *S-1-5-18:(OI)(CI)(F)
Pero, claro si quieres añadir este permiso es porque no tienes acceso, y los comandos anteriores te devolveran un Acceso Denegado.
Antes tendras que tomar posesion de las carpetas y ficheros:
takeown.exe /f "%ruta%" /R /A /D S*(S en Windows ESP o Y en Windows ENG)
He preparado un bat para ejecutar los comandos segun cada necesidad:
@echo off :inicio set /P ruta=[carpeta a la que conceder permisos?] echo. echo [0-] NO CAMBIAR OWNER echo [1-] ESTABLECER OWNER ADMINISTRATORS echo. echo [-2] AÑADIR ADMINISTRATORS A CARPETA Y SUBCARPETAS echo [-3] AÑADIR ADMINISTRATORS A CARPETA echo [-4] HABILITAR HERENCIA echo [-5] AÑADIR SYSTEM A CARPETA echo. echo Ej. 04 SOLO HABILITAR HERENCIA. 14 OWNER + HABILITAR HERENCIA. echo. set /P val=[Que permiso quieres asignar?] REM PROPIETARIO DE CARPETA Y SUBCARPETAS if %val:~0,1%==1 takeown.exe /f "%ruta%" /R /A /D S REM AÑADIR ADMINISTRATORS A CARPETA Y SUBCARPETAS if %val:~1,1%==2 icacls.exe "%ruta%" /Q /T /grant:r *S-1-5-32-544:(OI)(CI)(F) REM AÑADIR ADMINISTRATORS A CARPETA if %val:~1,1%==3 icacls.exe "%ruta%" /Q /grant:r *S-1-5-32-544:(OI)(CI)(F) REM HABILITAR HERENCIA if %val:~1,1%==4 icacls.exe "%ruta%" /Q /T /inheritance:e REM AÑADIR SYSTEM A CARPETA if %val:~1,1%==5 icacls.exe "%ruta%" /Q /grant:r *S-1-5-18:(OI)(CI)(F) pause cls goto inicio
De esta manera con asignar a la variable val 02,03,04,05,12,13,14,15 contemplo todas las opciones que me interesan.
G E N I O ! ! ! 1
ResponderEliminarXO
ResponderEliminarEstoy estudiando icacls pero desde muy basico y quiero dar permisos a un usuario sobre una carpeta...pero voy mas perdido....
ResponderEliminarpara añadir permisos de modificación a un usuario en una carpeta:
Eliminaricacls c:\carpeta /grant:r dominio\usuario:(OI)(CI)(M)
Gracias!!!!!
ResponderEliminarHacia los cambios desde el GUI y no funcionaba...con esto, funciono la primera vez!!
Hola, me gustaría tener acceso para modificar system32 y SysWOW64 ya que no he podido dando propiedad y permisos, espero puedas ayudarme, gracias.
ResponderEliminarno te recomiendo cambiar los permisos de esas carpetas, pero con el script del ejemplo puedes hacerlo. Tienes que hacerte owner primero ya que el owner es TrustedInstaller. Pero vaya, que me parece una muy mala idea...
Eliminarcomo añadirias permisos a un grupo de ususarios
ResponderEliminarpara añadir permisos de modificación a un grupo en una carpeta:
Eliminaricacls c:\carpeta /grant:r dominio\grupo:(OI)(CI)(M)
una consulta yo use este comando para dar acceso atotal a cualquier usuario en la red ,pero no me funciona,al entrar desde otra maquina la recurso compartido solo puedo ver el contenido de la carpeta pero no puedo crear ,ni modificar archivos,cual puede ser el error ..saludos
ResponderEliminaricacls c:\comp /Q /T /grant:r todos:(OI)(CI)(F)
Muchas gracias por los datos del bat.
ResponderEliminarYo además le agregué una segunda variable para poder agregar al usuario que queremos dar permisos.
@echo off
:inicio
set /P ruta=[carpeta a la que conceder permisos?]
set /P usuario=[nombre de usuario al que quieres dar o quitar permisos?]
echo.
echo [0-] NO CAMBIAR OWNER
echo [1-] ESTABLECER OWNER AL USUARIO %usuario%
echo.
echo [-2] AGREGAR USUARIO %usuario% A LA CARPETA Y SUBCARPETAS %ruta%
echo [-3] AGREGAR PERMISOS AL USUARIO %usuario% A LA CARPETA %ruta%
echo [-4] HABILITAR HERENCIA A LA CARPETA %ruta%
echo [-5] ELIMINAR PERMISO A LA CARPETA %ruta% DEL USUARIO %usuario%
echo [-6] RESETAR PERMISOS A LA CARPETA %ruta%
echo [-7] DESHABILITAR HERENCIA A LA CARPETA %ruta%
echo.
echo Ej. 04 SOLO HABILITAR HERENCIA. 14 OWNER + HABILITAR HERENCIA.
echo.
set /P val=[Que permiso quieres asignar?]
REM PROPIETARIO DE CARPETA Y SUBCARPETAS
if %val:~0,1%==1 takeown.exe /f "%ruta%" /R /A /D S
REM AÑADIR "%usuario%" A CARPETA Y SUBCARPETAS
if %val:~1,1%==2 icacls.exe "%ruta%" /grant:r "%usuario%":(OI)(CI)(F) /T /C
REM AÑADIR PERMISOS AL "%usuario%" A LA CARPETA "%ruta%"
if %val:~1,1%==3 icacls.exe "%ruta%" /grant:r "%usuario%":(OI)(CI)(F) /C
REM HABILITAR HERENCIA
if %val:~1,1%==4 icacls.exe "%ruta%" /inheritance:e /T /C
REM DESHABILITAR HERENCIA
if %val:~1,1%==7 icacls.exe "%ruta%" /inheritance:d /T /C
REM ELIMINAR "%usuario%" A CARPETA Y SUBCARPETAS
if %val:~1,1%==5 icacls.exe "%ruta%" /remove:g "%usuario%" /T /C
REM RESETEAR PERMISOS
if %val:~1,1%==6 icacls.exe "%ruta%" /reset /T /C
pause
cls
goto inicio
Un saludo
Gracias por el artículo, lo veo genial.
ResponderEliminarImportante abrir el cmd como administrador para evitar la UAC y también el idioma de Windows, si está inglés o en español:
http://www.sysadmit.com/2017/07/windows-actualmente-no-tiene-permiso-de-acceso-a-esta-carpeta.html
Hola una pregunta, quiero modificar permisos de todas las carpetas llamadas minutas de un arbol, y quitar la herencia de esas carpetas pero no de todo su contenido, si hago esto:
ResponderEliminar"icacls minutas /T /inheritance:r /grant:r jorge:F /grant:r portatil_casa:F" mqe quita la herencia de cada carpeta y archivo que hay dentro de minutas, ¿hay alguna forma de hacerlo con todas a la vez? Gracias de antemano muy buen trabajo.
/T hace que sea recursivo, si quieres recorrer una carpeta y aplicar el icacls solo a ciertas subcarpetas yo ya me meteria en powershell, con algo como:
ResponderEliminarget-childitem [carpeta padre] -directory -recurse -include 'minutas'|select fullname|%{icacls $_.fullname /inheritance:r /grant:r jorge:F /grant:r portatil_casa:F}
*Probado con Powershell 5.1, creo que el parametro -directory no esta en 2.0
Muchas gracias por compartir estos detalles, pero he intentado y no puedo recuperar los permisos de unos archivos, que no se si se dañaron o algún usuario encontró la forma de denegar el acceso hasta al administrador del mismo servidor. Son archivos que se encontraban compartidos en una carpeta de red, ¿conocen algún modo en el que pueda recuperar el acceso a esos archivos aunque el administrador no tenga ni acceso de lectura? no se ve ni siquiera las propiedades del archivo.
ResponderEliminarGracias!
Aurora
Si, precisamente este script es para eso, tienes que hacerte owner primero asi que elige la opcion 14 (owner + habilitar herencia)
EliminarY recuerda que el comando takeown.exe /f "%ruta%" /R /A /D S
es para un Windows en Español, si lo lanzas en un Windows en Ingles será takeown.exe /f "%ruta%" /R /A /D Y
hola buenos dias yo he intentado utilizar el comando cacls en windows 10 pero no ha funcionado cambia en algo la forma de utilizar el comando, lo teclee asi icacls*/grant usuario 2:F /T y no arrojo el resultado deseado hay otra forma de hacerlo??? o existe otra forma de realizar la asignacion de control de acceso, de antemano gracias por su ayuda
ResponderEliminargran trabajo el tuyo una consulta para que una carpeta se vuelva sin escritura osea que no se modifique su contenido no se quite ni se añada nada y a la vez que se pueda volver a activar tal escritura agradeceria bastante tu ayuda
ResponderEliminar