Nos solemos referir a Las Listas de Control de Acceso por sus siglas en inglés, es decir, como ACL o Access Control Control List. Las ACLs son una especie de tablas que le dicen 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 asoc iados unos parám parámetros etros de segur seguridad idad alma almacenad cenados os en los llama llamados dos desc descripto riptores res 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, o Listas de Control de Acceso. Access Control List ) En pri princi ncipio pio,, los des descri cripto ptores res de se segur gurida idad d no est están án alm almace acenad nados os con concre creta tamen mente te en ninguna carpeta. Lo están en forma de metadatos en la MFT. Por tanto, directamente no podemo pod emos s acc accede ederr a dic dichos hos des descri cripto ptores res ni edi editar tarlos los (di (direc rectam tament ente). e). A lo máx máximo imo 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 Pe ro
medi me dian ante te
la
GUI
o
usando
el
comando
cacls
podemo pod emos s
modifi mod ifica carlo rlos. s.
LAS ACL 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 contro con troll de acc acceso eso.. En ell ella a est están án alm almace acenad nados os los permiso permisos s de acc acceso eso al obj objeto eto 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 sist si stem ema. a. Es Está tá re rela laci cion onad ada a co con n la las s ac acci cion ones es qu que e se será rán n au audi dita tada das s po porr el si sist stem ema. a. 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 administrador podría luego quitar…). Clic 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 administrador 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 especificamos 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 Windows XP Home como en Windows XP Professional. 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
Como
c:\windows\explorer.exe
siempre,
cacls
si
la
ruta
contiene
espacios,
“%userprofile\mi
hay
que
introducir
comillas:
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
permiso
ningún
W
permiso
de
C
permiso
de
F
control
escritura cambiar 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
cacls
la
vez.
Por
ejemplo:
%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
Usuario:w
personal\ejemplo.exe”
/g
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.