Sistema de ficheros
Windows organiza sus archivos en una jerarquía de carpetas bajo
C:\. El acceso a ellas está controlado por ACLs. Toda la configuración del sistema se centraliza en el Registro de Windows, una base de datos jerárquica que es la columna vertebral de la configuración del sistema y las aplicaciones.
1. 📁 Estructura de directorios
1.1. Los directorios principales
La raíz del sistema es C:\. A partir de ahí se ramifica todo:
C:\
├── Users\ → perfiles de usuario
├── Windows\ → sistema operativo
│ └── System32\ → librerías y ejecutables esenciales
│ ├── config\ → registro (SAM, SYSTEM, SOFTWARE...)
│ └── repair\ → copia de seguridad del registro
├── Program Files\ → programas 64 bits
├── Program Files (x86)\ → programas 32 bits (solo en SO 64 bits)
├── ProgramData\ → [oculta] datos de programas para todos los usuarios
├── Public\ → archivos compartidos entre usuarios
├── PerfLogs\ → reportes de crasheos y rendimiento (suele estar vacía)
├── $Recycle.Bin\ → [oculta] papelera de reciclaje
└── inetpub\wwwroot\ → raíz web IIS (solo si hay servidor web configurado)
1.2. Detalle de carpetas clave
C:\Users\<usuario>\
Directorio personal de cada usuario. En sistemas antiguos era C:\Documents and Settings\Usuario.
\Users\Jessica\
├── Desktop\, Documents\, Pictures\, Downloads\...
└── AppData\ ← oculta
├── Roaming\ → configuraciones que siguen al usuario (ej: en dominio)
├── Local\ → datos locales, caché, archivos grandes y sensibles
└── LocalLow\ → como Local pero con menor integridad (ej: modo incógnito)
C:\Windows\System32\
El corazón de Windows. Contiene DLLs esenciales, ejecutables del sistema (cmd.exe, control.exe, utilman.exe...) y dos subcarpetas críticas:
-
\config\→ las colmenas del registro en vivo:SAM,SECURITY,SYSTEM,SOFTWARE -
\repair\→ copia de seguridad de esas mismas colmenas
C:\ProgramData\
Carpeta oculta con datos que los programas necesitan para ejecutarse, accesible para todos los usuarios del sistema. Distinta de Program Files (los binarios) y de AppData (datos por usuario).
Equivalencias con Linux
| Windows | Linux |
|---|---|
C:\ |
/ |
C:\Users\ |
/home/ |
C:\Windows\System32\ |
/bin/, /lib/ |
C:\inetpub\wwwroot\ |
/var/www/html/ |
C:\ProgramData\ |
/etc/ (aprox.) |
2. 🔒 ACL — Control de acceso a archivos
Cada archivo y carpeta tiene un Security Descriptor que define quién puede hacer qué. Este está formado por:
| Componente | Descripción |
|---|---|
| Owner SID | El SID del propietario |
| DACL (Discretionary ACL) | Lista de quién puede hacer qué sobre el objeto |
| ACE (Access Control Entry) | Cada regla individual dentro de una ACL |
| SACL (System ACL) | Define qué accesos se registran en el Event Log |
Orden de evaluación
Windows evalúa las ACEs en orden. Las denegaciones explícitas tienen prioridad. Si ninguna ACE coincide, el acceso se deniega por defecto.
2.1. Entender el sistema de permisos
Permisos simples
Estos permisos son una combinación de permisos avanzados. Son los que se usan para administrar el sistema de manera sencilla sin complicarse.
| Sigla | Permiso | Descripción |
|---|---|---|
| N | No access | No se tiene ningún permiso |
| F | Full access | Control total: leer, escribir, ejecutar, borrar y cambiar permisos |
| M | Modify | Leer, escribir, ejecutar y borrar |
| RX | Read y Execute | Leer archivos y ejecutar programas |
| R | Read | Solo se puede ver el contenido (leer un archivo o ver los contenidos de una carpeta) |
| W | Write | Permite crear o modificar archivos |
| D | Delete | Permite borrar el archivo o carpeta |
Permisos avanzados
Los permisos avanzados son los permisos individuales que realmente usa Windows. Existen bastantes, pero vamos a dar los más importantes
| Sigla | Permiso | Descripción |
|---|---|---|
| DE | Delete | Borrar el archivo o carpeta |
| RC | Read Control | Ver los permisos del objeto |
| WDAC | Write DAC | Permite cambiar los permisos |
| WO | Write Owner | Convertir al usuario en propietario |
| RD | Read data / List directory | Permite leer archivos o listar el contenido de una carpeta |
| WD | Write data / Add file | Permite escribir datos o crear archivos |
| AD | Append data / Add subdirectory | Permite añadir datos o crear subcarpetas |
| X | Execute / Traverse | Permite ejecutar archivos o atravesar carpetas |
| DC | Delete Child | Permite borrar archivos dentro de una carpeta |
| RA | Read Attributes | Permite ver atributos (oculto, solo lectura, etc.) |
| WA | Write attributes | Permite cambiar atributos |
El permiso simple F (Full access) se construye a partir de juntar un montón de permisos avanzados
Permisos heredados
Son permisos que relacionan los contenedores (carpetas) con su contenido (subcarpeta y archivos). Son algo complejos, para lo que tenemos el siguiente ejemplo:
Carpeta_A
├── archivo.txt
└── Carpeta_B
└── Carpeta_C
| Sigla | Permiso | Descripción | Ejemplo |
|---|---|---|---|
| (I) | Inherit | Los permisos son heredados de la carpeta madre | El permiso de archivo.txt viene de Carpeta_A |
| (OI) | Object-Inherit | El permiso se copiará a los archivos dentro de la carpeta. | El permiso de Carpeta_A llega a archivo.txt |
| (CI) | Container-Inherit | El permiso se copiará a las subcarpetas dentro de la carpeta. | El permiso de Carpeta_A llega a Carpeta_B y Carpeta_C |
| (IO) | Inherit-Only | El permiso no afecta a esta carpeta, solo se usa para heredarlo a lo que hay dentro. | Carpeta_A no tiene el permiso, pero archivo.txt y Carpeta_B sí |
| (NP) | No-Propagate | El permiso solo baja un nivel. Las subcarpetas lo reciben, pero no lo siguen heredando más abajo. | El permiso de Carpeta_A solo llega a Carpeta_B |
2.2. Consultar permisos
Para ver los permisos de un archivo utilizamos en cmd el comando icacls
PS C:\Users\Jessica> icacls archivo.txt
.pdfbox.cache NT AUTHORITY\SYSTEM:(I)(F)
BUILTIN\Administradores:(I)(F)
PC_Jessica\Jessica:(I)(F)
En powershell tenemos el comando Get-Acl al que le tenemos que pasar la ruta del archivo, luego lo formateamos con Format-List para que nos salga toda la información de manera ordenada. Tenemos que fijarnos sobre todo en los campos owner (propietario), group (grupo) y accesos (permisos para el resto de usuarios).
En el campo sddl sale la misma información solo que representada en un formato menos legible, con SIDs y los permisos en siglas, es el formato que utiliza el sistema internamente.
PS C:\Users\Jessica> Get-Acl archivo.txt | fl
Path : Microsoft.PowerShell.Core\FileSystem::C:\Users\Jessica\archivo.txt
Owner : PC_Jessica\Jessica
Group : PC_Jessica\Ninguno
Access : NT AUTHORITY\SYSTEM Allow FullControl
BUILTIN\Administradores Allow FullControl
PC_Jessica\Jessica Allow FullControl
Audit :
Sddl : O:S-1-5-21-3793951252-29971934-283417696-1001G:S-1-5-21-3793951252-29971934-283417696-513D:AI(A;ID;FA;;;SY)(A;
ID;FA;;;BA)(A;ID;FA;;;S-1-5-21-3793951252-29971934-283417696-1001)
2.3. Cambiar propietario y permisos
Podemos cambiar el propietario con icacls de manera bastante sencilla con el parámetro /setowner
icacls archivo.txt /setowner Juan
Para asignar permisos podemos usar icacls con le parámetro /grant seguido del nombre del usuario y el permiso, todo ello entre comillas. Preferiblemente usaremos los permisos simples.
| Acción | Comando |
|---|---|
| Añadir un permiso | icacls <archivo> /grant <usuario>:(<permiso>) |
| Asignar permisos de manera recursiva | icacls <archivo> /grant:r <usuario>:(<permiso>) |
| Quitar un permiso | icacls <archivo> /remove <usuario>:(<permiso>) |
⚠️ Lo ideal con archivos sensibles es eliminar todos los permisos y luego añadirlos de uno en uno. Así aplicaremos el principio de “Mínimo Privilegio”