En Linux todo se organiza en torno a usuarios y grupos.
Cada usuario del sistema tiene un identificador propio (UID) y pertenece al menos a un grupo (GID).
Estos mecanismos permiten controlar quién puede acceder, modificar o ejecutar los distintos ficheros y programas del sistema.
Usuarios
- root: es el superusuario con permisos totales sobre el sistema.
- usuarios normales: tienen permisos limitados, solo pueden acceder a sus propios ficheros y a los recursos que el administrador les permita.
- usuarios del sistema: cuentas especiales creadas para ejecutar servicios (por ejemplo:
www-data
para Apache).
Cada usuario tiene asociado:
- Un UID (User ID).
- Una carpeta personal en
/home/usuario
. - Una contraseña (almacenada cifrada en
/etc/shadow
). - Sus datos básicos en
/etc/passwd
.
Grupos
Un grupo es un conjunto de usuarios.
- Cada grupo tiene un GID (Group ID).
- Un usuario puede pertenecer a varios grupos.
- Los permisos de un fichero se definen no solo para su propietario, sino también para el grupo asociado.
Los grupos están definidos en el archivo /etc/group
.
Permisos en ficheros
En Linux, cada fichero o directorio tiene tres niveles de permisos:
- Usuario propietario
- Grupo asociado
- Otros (resto de usuarios)
Y tres tipos de permiso:
- r (read): lectura.
- w (write): escritura.
- x (execute): ejecución (o acceso en el caso de directorios).
Cómo se ve en un listado de ficheros
Al ejecutar en consola:
ls -l
Se obtiene un listado detallado.
Ejemplo:
-rw-r--r-- 1 miguel profesores 1234 mar 1 10:00 informe.txt drwxr-xr-x 2 miguel alumnos 4096 mar 1 09:30 proyectos
Desglosemos el ejemplo:
- Primer bloque (
-rw-r--r--
) → permisos-
→ tipo de fichero (-
fichero normal,d
directorio,l
enlace, etc.)rw-
→ permisos del propietario (r=leer, w=escribir, -=no ejecutar
)r--
→ permisos del grupo (solo lectura)r--
→ permisos de otros usuarios (solo lectura)
- Propietario (
miguel
) → usuario dueño del fichero. - Grupo (
profesores
oalumnos
) → grupo asociado. - Tamaño (1234, 4096) → en bytes.
- Fecha y hora de modificación.
- Nombre del fichero o directorio.
informe.txt
:- Propietario
miguel
→ puede leer y escribir. - Grupo
profesores
→ solo lectura. - Otros → solo lectura.
- Propietario
proyectos/
(directorio):- Propietario
miguel
→ leer, escribir y entrar. - Grupo
alumnos
→ leer y entrar, pero no escribir. - Otros → igual que el grupo.
- Propietario
Muy buena pregunta, Miguel. Vamos por partes, relacionando permisos, i-nodes y el VFS, de manera clara y didáctica.
Los i-nodes (index nodes)
En sistemas de ficheros tipo Unix/Linux, cada fichero o directorio se representa mediante una estructura de datos llamada i-node (nodo índice).
¿Qué guarda un i-node?
El i-node no contiene el nombre del fichero (eso está en las entradas de directorio), sino toda la información de control (metadata):
- Propietario (UID) y grupo (GID).
- Permisos (bits
rwx
para usuario, grupo y otros). - Tiempos: de creación, acceso, modificación.
- Tamaño del fichero.
- Contador de enlaces (cuántos nombres de fichero apuntan al mismo i-node).
- Direcciones de los bloques de datos en disco (punteros directos, indirectos, dobles y triples).
👉 Es decir: cuando haces un ls -l
, la información de permisos, propietario, tamaño, etc., se lee de su i-node.
Ejemplo
Si tienes un fichero informe.txt
y haces ls -i
, verás su número de i-node:
ls -i informe.txt 123456 informe.txt
Ese número (123456
) identifica de forma única al i-node, donde están los permisos y metadatos.
El VFS (Virtual File System)
Linux soporta muchos tipos de sistemas de ficheros (ext4, XFS, FAT, NTFS, etc.). Para que el kernel y los programas de usuario no tengan que conocer los detalles de cada uno, se usa una capa de abstracción llamada VFS (Virtual File System).
Funciones del VFS
- Proporciona una interfaz única de operaciones: abrir, leer, escribir, cerrar, cambiar permisos, etc.
- Oculta las diferencias internas entre sistemas de ficheros.
- Mantiene estructuras en memoria (objetos VFS) que representan:
- i-node virtual: representación genérica de un fichero.
- dentry (directory entry): relación entre nombre y i-node.
- superblock virtual: info general del sistema de ficheros.
Ejemplo
- Cuando haces
open("informe.txt")
, el kernel no sabe si está en ext4, NFS o FAT32. - El VFS traduce esa operación al controlador específico del sistema de ficheros donde reside el fichero.
Relación entre permisos, i-nodes y VFS
- Cuando accedes a un fichero (
ls
,cat
,chmod
):- El VFS recibe la llamada.
- El VFS busca en la caché de directorios (dentry) el i-node asociado.
- El i-node contiene:
- UID/GID del propietario.
- Bits de permisos (rwx).
- El kernel compara esos permisos con la identidad del proceso (UID/GID efectivos) para decidir si la operación es válida.
- Los permisos viven en los i-nodes.
- El VFS proporciona el mecanismo unificado para consultarlos y aplicarlos en cualquier sistema de ficheros.
- El i-node es la “ficha técnica” de un fichero: guarda propietario, permisos, tamaño, fechas y punteros a los bloques de datos.
- El VFS es la “capa de compatibilidad” que hace que Linux pueda trabajar con muchos sistemas de ficheros diferentes a través de una misma interfaz.
- Cada vez que se accede a un fichero, el kernel consulta el i-node mediante el VFS para comprobar permisos y localizar los datos.