Usuarios y grupos en Linux

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:

  1. Usuario propietario
  2. Grupo asociado
  3. 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:

  1. 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)
  2. Propietario (miguel) → usuario dueño del fichero.
  3. Grupo (profesores o alumnos) → grupo asociado.
  4. Tamaño (1234, 4096) → en bytes.
  5. Fecha y hora de modificación.
  6. Nombre del fichero o directorio.

  • informe.txt:
    • Propietario miguel → puede leer y escribir.
    • Grupo profesores → solo lectura.
    • Otros → solo lectura.
  • proyectos/ (directorio):
    • Propietario miguel → leer, escribir y entrar.
    • Grupo alumnos → leer y entrar, pero no escribir.
    • Otros → igual que el grupo.

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

  1. 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.
  2. El i-node contiene:
    • UID/GID del propietario.
    • Bits de permisos (rwx).
  3. 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.