Nos solemos referir a Las Listas de Control de Acceso por sus siglas en inglés, es decir, como ACL o Access Control List. Las ACLs  son una especie de tablas que le dicen al Sistema Operativo qué o quién tiene permiso para acceder a un objeto determinado y son exclusivas de particiones con formato NTFS. Todos estos permisos pueden ser modificados con el comando "cacls". En este artículo veremos cómo hacerlo y definiremos sobre qué objetos y/o contenedores podemos aplicar estos permisos.

Descriptores de seguridad y ACL 

Cualquier objeto en un Windows con núcleo NT y sobre un sistema de archivos NTFS tiene asociados unos parámetros de seguridad almacenados en los llamados descriptores de seguridad. En un descriptor de seguridad está guardado quién es el propietario del objeto y a qué grupo de usuarios pertenece, así como quién tiene acceso al objeto y qué tipo de permisos tiene de acceso. Estos permisos están guardados en las llamadas ACLs (en inglés, Access Control List) o Listas de Control de Acceso.

En principio, los descriptores de seguridad no están almacenados concretamente en ninguna carpeta. Lo están en forma de metadatos en la MFT. Por tanto, directamente no podemos acceder a dichos descriptores ni editarlos (directamente). A lo máximo que podemos llegar es a verlos encriptados en el registro de Windows. Por ejemplo: iniciamos sesión con una cuenta de Administrador y nos vamos a Inicio > Ejecutar y escribimos regedit. Si navegamos hasta la clave que aparece en la imagen, veremos el valor Security. Ese es el descriptor de seguridad asociado al servicio "Registro de sucesos".

 

 

Pero mediante la GUI o usando el comando cacls podemos modificarlos. 


LAS ACLs

El comando cacls se encarga de gestionar las ya mencionadas Listas de Control de Acceso (en adelante ACL). Existen dos tipos de ACL: DACL y SACL. Veamos brevemente cada una:

DACL: son las siglas de “Discretionary Access Control List”, es decir, Lista discrecional de control de acceso. En ella están almacenados los permisos de acceso al objeto y es controlada por el propietario de dicho objeto.

SACL: son las siglas de “System Access Control List”, o Lista de control de acceso del sistema. Está relacionada con las acciones que serán auditadas por el sistema.
 

Una ACL contiene una ACE (o “Access Control Entry”, Entrada de Control de Acceso) que indica qué permisos tiene cada usuario. Es decir, una ACE para cada usuario o grupo. Los permisos se asignan en forma de permisos positivos (permite) y negativos (deniega). Como veremos, en una ACL primero están situados los permisos negativos y a continuación los negativos. ¿Cómo podemos observar esto visualmente?

Para verlos tenemos que acceder a la pestaña “Seguridad” que aparece al hacer click derecho sobre una carpeta o archivo. En esta FAQ número 6 hay información sobre cómo acceder a dicha pestaña en Windows XP. Si hacemos click dererecho sobre una carpeta y elegimos Propiedades y luego la pestaña “Seguridad”, veremos que nos aparecen los distintos usuarios y los permisos que tienen sobre dicha carpeta. En esta ventana, sin embargo, no veremos más que un resumen de los distintos permisos, siendo éstos más y más complejos. Para verlos, vamos a hacerlo con un ejemplo:

Si iniciamos sesión con un usuario limitado, y creamos una carpeta cualquiera con el nombre que queramos y en la ubicación que queramos. Vamos a denegarle al usuario administrador el acceso a esa carpeta (denegación que, por ser el admistrador podría luego quitar…). Click derecho sobre la carpeta > Propiedades > Seguridad y vemos ahí al usuario administrador. Para quitarle los permisos, pichamos sobre “Opciones avanzadas” y desmarcamos Heredar del objeto principal las entradas de permisos relativas a los objetos secundarios. Luego volvemos a la anterior ventana y seleccionamos el usuario adminstrador y luego sobre las casillas que hay debajo de “Denegar”. Nos aparecerá el siguiente mensaje:

Está estableciendo una entrada de denegación de permisos. Las entradas de denegación tienen precedencia sobre las entradas de permisión. Esto significa que si un usuario es miembro de dos grupos, uno al que se le da un permiso y otro al que se le deniega, al usuario se le deniega el permiso. ¿Desea continuar?

Pinchamos sobre “Aceptar” y le habremos quitado los permisos de acceso. Como claramente dice el mensaje, los permisos de denegación tienen precedencia sobre los de permisión. Veamos ahora visualmente esa precedencia. Si volvemos pinchar sobre “Opciones avanzadas” veremos que aparecen al principio de la lista los permisos titulados “Denegar” y debajo los titulados “Permitir”. Si no especificamos otros tipos de permisos, aparecerá “Full control”, pero si los espeficicamos veremos que ahí aparecen permisos más concretos que en la ventana general.

Estos son los permisos almacenados en una DACL. Como se ha comentado en una SACL están contenidos los permisos a auditar por el sistema. Esta característica no está disponible en XP Home y sólo podemos hacerla en Prof. Para ello, accedemos a la pestaña “Seguridad” y luego pinchamos sobre “Opciones avanzadas”. Veremos que una de las pestañas que aparecen es Auditoría, es decir, el contenido de la SACL.

El comando CACLS

Como hemos dicho las ACLs determinan que usuarios o grupos de usuarios pueden tener acceso a un objeto determinado y es una característica exclusiva de los sistemas de archivos NTFS.

De hecho este comando puede simplificar bastante la modificación de permisos mediante el uso de scripts automatizados que modifiquen estas ACLs y su uso es posible en cualquier sistema con núcleo NT, es decir, que lo podemos utilizar tanto en xp home como en xp prof.

Debemos recordar que Windows 2000 y Windows XP profesional ya llevan un editor ACL al cual podemos acceder haciendo clic con el boton derecho sobre la carpeta o archivos cuyo permisos deseamos modificar, clic en propiedades, y en el nuevo cuadro de dialago, seleccionando la pestaña "Seguridad".

Con calcs, en cambio, no es necesario hacer nada adicional ya que es funcional tanto en WinXP Home como en Prof, simplificando enormemente la tarea de asignar permisos sobre usuarios, contenedores u objetos. Este comando es en realidad equivalente a los comandos chmod y chown de linux, que sirven, respectivamente, para variar los permisos de carpetas y archivos y para modificar el propietario de esas carpetas.

Cuando un objeto o archivo es creado este hereda normalmente los permisos predeterminados de la carpeta o contenedor en el que es creado simplificando el proceso de administración sobre los objetos contenidos en ella. Los permisos básicos que se permiten establecer en cualquier Sistema Operativo con núcleo NT, son los siguientes:
 

Permisos

Leer.  Habilita a un Usuario o grupos de usuarios a ver los archivos y subcarpetas contenidos en el directorio principal.

Escribir.  Habilita a un usuario a crear archivo y subcarpetas, cambiar los atributos y ver el propietario y los permisos aplicados sobre la carpeta así como a modificar el contenido del archivo o carpeta

Mostrar el Contenido de la Carpeta.  Este tipo de permiso, habilita a ver el contenido de una carpeta, y a recorrer su estructura de directorios o ejecutar los archivos que tengan esa posibilidad, también habilita a leer los atributos del archivo en cuestión y a leer el contenido de los mismos

Lectura y Ejecución. Este tipo de Permiso aúna los derechos otorgados por los permisos “Leer”  y  “Mostrar el contenido de una carpeta”, es decir, que los permisos otorgados serían similares a los que hemos comentado antes para el permiso Mostrar Contenido.  La única diferencia entre este tipo de permiso y el de mostrar contenido consiste en cómo se heredan los permisos. En el caso de Lectura y Ejecución, los permisos son heredados por todos los directorios y archivos contenidos en la carpeta en la que se aplique el permiso de lectura y ejecución. En el caso de Mostrar el Contenido de la Carpeta, los permisos se heredan únicamente sobre las carpetas creadas.

Modificar. Este es uno de los permisos que más derechos otorgan sobre la carpeta o archivos en los que se aplique ya que habilita todos y cada uno de los permisos explicados anteriormente excepto el de tomar posesión  y Eliminar Subcarpetas y Archivos y Cambiar los permisos, ya que estos sólo pueden ser llevados a cabo por el permiso Control Total.

Control Total.  Como hemos dicho este permiso digamos que engloba a todos los descritos con anterioridad da el control total sobre quien se otorgue, incluida la posibilidad de tomar posesión. Cuyo proceso tenéis definido en nuestras FAQs y que suele ser una característica exclusiva del grupo de administradores.

El concepto de Tomar Posesión es fácilmente comprensible, si entendemos que el sistema de permisos NTFS recuerda el propietario del archivo. Así, para las carpetas que contienen los perfiles de usuarios en Documents and Settings, el propietario siempre es el usuario cuyos archivos se contienen en esas carpetas y tiene por defecto Control Total, sobre sus archivos y carpetas, por lo que por defecto siempre podrá modificar sus permisos para denegar acceso a otros usuarios. Cuando otro usuario Toma Posesión de una carpeta significa que asume la propiedad de la carpeta y del contenido de la misma, si así lo indicamos en el proceso de posesión. Se describe en esta FAQ número 7.

El color gris tenue que podemos ver al acceder a la pestaña seguridad de un archivo en cuestión suele indicarnos que ese permiso está heredado del contenedor principal, podemos desactivarlo, simplemente tildando la opción contraria, o bien realizando los cambios en el contenedor principal, con lo que se aplicarán estos permisos a todo el contenido de la carpeta.

Por defecto, estos permisos pueden ser aplicados sobre usuarios concretos y específicos de nuestro sistema o bien sobre grupos de usuarios. En Windows XP se definen una serie de usuarios por defecto, que son los siguientes:

Grupos de Usuarios

Usuarios
Este grupo es el que más restricciones impone en el sistema pero con el que más seguro es trabajar. Al Grupo Usuarios no le está permitido modificar el registro, ni modificar los archivos del sistema operativo, o los Archivos de Programa, en la práctica supone que no pueden instalar software. Aunque tiene Control Total,  sobre los archivos que ellos creen y sobre su propia rama del registro, HKEY_CURRENT_USER, también se les permite apagar el PC.

En la práctica es algo engorroso trabajar con este tipo de usuario ya que no permite la ejecución de multitud de software anterior a Windows XP que no soportan los nuevos permisos NTFS y están diseñados para versiones anteriores de este sistema operativo.

Usuarios Avanzados
Este grupo impone menos restricciones que el grupo de usuarios pero más que el de administradores. Digamos que está a medio camino entre ambos grupos. En realidad, muchos de los problemas de restricciones que se dan al ejecutar software en nuestro equipo, se solventan con la utilización de este tipo de usuario. Los usuarios Avanzados pueden, por tanto, ejecutar aplicaciones diseñadas para Sistemas Operativos con núcleo NT anteriores a Windows 2000. Iniciar y detener servicios que no sean los basicos y los que se inician de forma predeterminada con el sistema operativo, instalar cualquier programa que no modifique los archivos del sistema operativo y tener acceso a los datos del grupo de usuarios, a no ser que estos les retiren específicamente el permiso de acceso a sus archivos.

Operadores de Copia de Seguridad   
Son usuarios destinados a crear y restaurar copias de seguridad, y cuyas acciones se aplican independientemente del sistema de permisos especificado en el sistema operativo. Estos usuarios pueden iniciar sesión en nuestro sistema y también apagarlo.

Administradores
Este es el que más poder otorga en el sistema y sólo debería utilizarse para las tareas específicas que estan destinados a ellos, como por ejemplo: instalación de componentes del Sistema Operativo, es decir, drivers, servicios, actualizaciones y Service Packs, reparación del sistema operativo, administración de auditorias y gestión y control de permisos sobre contenedores y objetos, y administración de grupos de usuarios.

Invitados
Los usuarios pertenecientes a este grupo tienen los mismos permisos que el grupo de Usuarios, y está destinado para proporcionar acceso a todo aquel que no tenga una cuenta especifica en el sistema. En Windows XP, por defecto, estos usuarios no pueden apagar el sistema, y además se halla la cuenta deshabilitada ya que no se requiere contraseña para acceder como invitado a nuestro sistema operativo, con los problemas de seguridad que ello podría conllevar.

Básicamente, hemos pasado revista a los grupos de usuarios que Windows XP /Windows 2000 provee, pero hay todavía una serie de usuarios especiales que no hemos definido aún y que también son utilizados por Windows:

Red
Comprende a todos los usuarios que tienen acceso a nuestro equipo a través de la red.

Usuario Terminal Server
Cuando hemos habilitado Terminal Server en nuestro equipo para acceder de forma remota a nuestra máquina, este grupo se habilita y comprende a todos los usuarios que han iniciado sesión mediante Terminal Server.

Operadores de Configuración de Red
En este grupo se encuadran todos los usuarios que pueden modificar la configuración de TCP/IP de las propiedades de red. Por defecto no tiene ningún usuario predefinido.

- Grupos especiales

Duplicadores
Es un grupo destinado a integrar los usuarios que pueden replicar un directorio en el servicio de replicación de rchivos en un controlador de dominio. En estaciones cliente y en PC’s que no estén integrados en un dominio no tiene sentido agregar usuarios a este grupo.

System
Es uno de los grupos especiales de Windows, y en el no hay ningún usuario predefinido ya que está exclusivamente dedicado al acceso de fichero para que procesos esenciales del sistema operativo se puedan llevar a cabo.

Usuarios Interactivos
Grupo que identifica al usuario actualmente logueado en nuestro Sistema Operativo.

 

Sintaxis del comando cacls 

La sintaxis del comando es bien sencilla, aunque tiene varios modificadores o parámetros.

Antes de seguir comentar que todo lo que sigue se tecleará desde la consola de comandos. Es decir, Inicio > Ejecutar y escribimos cmd y ahí podemos teclear todo lo que sigue.

La sintaxis más inmediata del comando cacls es la siguiente:

cacls nombre_de_archivo

Por ejemplo, si tenemos en el escritorio un archivo llamado ejemplo.exe pues tecleamos:

cacls escritorio\ejemplo.exe

y nos saldrán los permisos que tiene asignado ese archivo. Igualmente podemos podemos usar variables de entorno o la ruta completa del archivo. Por ejemplo, si queremos consultar los permisos del archivo explorer.exe que está en la carpeta WINDOWS, podemos escribir:

cacls %windir%\explorer.exe

o bien

 cacls c:\windows\explorer.exe
 

Como siempre, si la ruta contiene espacios, hay que introducir comillas:

cacls “%userprofile\mi carpeta\exam.exe”

Como casi todos los comandos de Windows, éste también cuenta con una serie de modificadores, que son:

/T Con este modificador podemos cambiar los permisos a todos los archivos de una carpeta y subcarpetas.

/E Con él podemos modificar la ACL sin cambiarla.

/C Es, digamos, el modo silencionso. Si al modificar las ACLs encuentra algún error, lo omite y sigue modificándola.

/G Este es el comando para conceder permisos a un usuario en particular. Los permisos son los siguiente:

 N ningún permiso
 W permiso de escritura
 C permiso de cambiar
 F control total

Por ejemplo, para concederle al usuario Usuario permisos de escritura sobre el archivo ejemplo.exe que está en la carpeta “Carpeta personal” del escritorio, podríamos hacerlo de la siguiente forma:

cacls “%userprofile%\escritorio\carpeta personal\ejemplo.exe” /g Usuario:w

/R Este comando suspende los permisos a un usuario y actúa conjuntamente con /E (ya que /E modifica la ACL pero no la cambia)

/P Este comando sustituye los permisos del usuario

/D deniega a un usuario el acceso.

 

Por ejemplo, para denegar al usuario User el acceso al archivo anterior, escribimos:

cacls “%userprofile%\escritorio\carpeta personal”\ejemplo.exe /d User

Si nos equivocamos al escribir el nombre del usuario nos aparecerá un mensaje como este:

No se ha efectuado ninguna asignación entre los nombres de cuenta y los identificadores de seguridad.
 

Cuando se consulten permisos sobre carpetas podemos obtener las siguientes abreviaturas:

OI que se refiere a que los objetos creados bajo el directorio heredarán el permiso

CI que se refiere a que los subdirectorios creados bajo este directorio heredarán el permiso

IO que hace referencia a que el permiso no afectará al directorio y por tanto sólo lo herederán los subdirectorios

(IO)(CI) los permisos lo tomará la carpeta y lo herederán las subcarpetas y archivos

(OI)(CI)(IO) los permisos sólo lo heredarán subcarpetas y archivos

(CI)(IO) el permiso sólo lo heredarán las subcarpetas

(IO)(IO) el permiso sólo lo heredarán los archivos

Ninguna salida se refiere sólo a esta carpeta

A la hora de consultar y modificar permisos podemos usar caracteres comodines para hacerlo a varios a la vez. Por ejemplo:

cacls %windir%\*.exe

Nos daría todos los permisos de los archivos con extensión exe de la carpeta Windows. También podemos asignar a varios usuarios permisos sobre un mismo archivo con un solo comando:

cacls “%userprofile%\escritorio\carpeta personal\ejemplo.exe” /g Usuario:w /d User2

le daría al usuario Usuario permisos de escritura sobre el archivo y a User2 se los denegaría.

cacls “%userprofile%\escritorio\carpeta personal\ejemplo.exe” /g Usuario:w User2:f

le daría al usuario Usuario permisos de escritura sobre el archivo y al usuario User2 control total.

Finalmente, veremos que al ejecutar alguna acción de permisos se nos pregunta si estamos seguros o no de lo que vamos a hacer. Para evitar este mensaje tecleamos lo siguiente:

 

echo Y|cacls “%userprofile%\escritorio\carpeta personal\ejemplo.exe” /g Usuario:w User2:f

teniendo en cuenta de que entre la “Y” y el símbolo | no hay ningún espacio. 

 

La herramienta XCACLS, un Cacls mejorado 

Xcacls es una herramienta por línea de comandos que puede mostrar información en pantalla que la herramienta sucedánea CACLS no puede mostrar. La herramienta que citamos se puede descargar desde aquí.

Esta herramienta es especialmente útil para mostrar y establecer permisos NTFS especiales, y sobre todo para automatizar scripts por línea de comandos que establezcan los permisos iniciales de carpetas y archivos en instalaciones desatendidas.

Su sintaxis es parecida a la del comando Cacls y están descritas en este artículo de la KB. 
{jos_sb_discuss:2}