Ir al contenido

2.4 Gestión de Permisos y Propiedad

tutorial.getReady

  • Aprenderás a leer la matriz de permisos rwxr-xr-x en la salida de ls -l.
  • Dominarás el Modo Octal (números) para configurar permisos a la velocidad de la luz. - Conocerás cómo cambiar el dueño de un archivo usando chown como superusuario. - Entenderás por qué el permiso 777 es el mayor pecado de un Sysadmin.

En Linux, todo archivo y directorio es propiedad absoluta de un Usuario específico y pertenece a un Grupo. El núcleo del sistema decide quién puede ver, modificar o ejecutar un archivo evaluando tres niveles de acceso: Usuario (Propietario), Grupo y Otros (El resto del mundo).


Cuando ejecutas el comando ls -l, la primera columna que ves es una cadena de 10 caracteres aparentemente críptica, como -rwxr-xr-- o drwxrwxr-x.

flowchart TB
  subgraph Bits["Bits de permisos"]
    R[r = 4]:::b
    W[w = 2]:::b
    X[x = 1]:::b
  end
  R --> SUM[(Suma)]
  W --> SUM
  X --> SUM
  SUM --> OCT["Octal: 0..7"]

  classDef b fill:#eef,stroke:#88a,stroke-width:1px;

Desgranemos -rwxr-xr-- (10 caracteres):

  • El 1º caracter (Tipo): Indica qué es. Un guion - significa que es un archivo regular. Una d significa que es un directorio. Un l significa que es un enlace simbólico.
  • Los siguientes 3 (rwx): Permisos del Usuario Propietario (User / u). En este caso, puede Leer (Read = r), Escribir/Modificar (Write = w), y Ejecutar como programa (eXecute = x).
  • Los siguientes 3 (r-x): Permisos del Grupo (Group / g). Pueden Leer, NO pueden escribir (marcado con -), y sí pueden Ejecutar.
  • Los últimos 3 (r--): Permisos de Otros (Others / o). El resto de usuarios del sistema solo pueden Leer.

El comando change mode altera los permisos. Existen dos formas de hacerlo: la simbólica (amigable) y la octal (profesional).

Usas matemáticas simples sumando (+), restando (-) o igualando (=) permisos a las categorías u, g, o, o a (All/Todos).

ventana terminal
# Darle permiso de ejecución al dueño (Usuario)
chmod u+x script.sh
# Quitarle permiso de escritura a los Otros
chmod o-w archivo_secreto.txt
# Forzar que el Grupo solo tenga permiso de Lectura (eliminando w o x si los tuviera)
chmod g=r documento.pdf

Sumas el valor de los permisos que quieres asignar.

  • Lectura (r) = 4
  • Escritura (w) = 2
  • Ejecución (x) = 1

Para cada bloque (Usuario, Grupo, Otros), sumas los valores:

  • Permiso rwx (Lectura+Escritura+Ejecución): 4 + 2 + 1 = 7
  • Permiso rw- (Lectura+Escritura): 4 + 2 + 0 = 6
  • Permiso r-x (Lectura+Ejecución): 4 + 0 + 1 = 5
  • Permiso r-- (Solo Lectura): 4 + 0 + 0 = 4
  • Sin permiso ---: 0

Ejemplos Míticos:

  • chmod 755 script.sh -> El dueño tiene 7 (Lectura, Escritura, Ejecución). El Grupo y Otros tienen 5 (Lectura y Ejecución). Es el estándar absoluto para programas y scripts web.
  • chmod 644 archivo.txt -> Dueño 6 (Lectura, Escritura). Resto 4 (Solo lectura). El estándar para cualquier texto o configuración.
  • chmod 600 llave.pem -> Dueño 6. Resto 0. Máxima privacidad, estándar para claves privadas SSH.
  • chmod 777 publico -> PELIGRO. Todo el mundo (7,7,7) puede alterar, borrar y ejecutar archivos. Jamás uses esto en producción para “arreglar un problema que no te deja guardar”.

El comando change owner cambia el propietario y/o grupo de un archivo. Por motivos evidentes de seguridad, solo el superusuario (root) puede regalar la propiedad de un archivo a otro, por lo que siempre tendrás que usar sudo.

ventana terminal
# Cambiar solo el propietario al usuario 'juan'
sudo chown juan archivo.txt
# Cambiar el propietario a 'juan' y el grupo a 'desarrolladores' (usando dos puntos :)
sudo chown juan:desarrolladores archivo.txt
# Cambiar TODO el contenido de una carpeta entera remotamente (Recursivo -R)
sudo chown -R www-data:www-data /var/www/html/

4. Umask: los permisos por defecto (mentalidad de examen)

Sección titulada “4. Umask: los permisos por defecto (mentalidad de examen)"

Cuando creas un archivo o directorio, Linux no lo crea con “permisos máximos”. Parte de una base y le aplica una máscara llamada umask.

  • Archivos parten de 666 (rw-rw-rw-)
  • Directorios parten de 777 (rwxrwxrwx)
  • Luego se “resta” (se enmascara) la umask.

Ver tu umask actual:

ventana terminal
umask

Ejemplo típico en servidores: umask 027 (archivos nuevos ~ 640, directorios ~ 750).


Además de rwx, existen bits especiales que verás mucho en sistemas reales.

SGID en directorios (colaboración por grupo)

Sección titulada “SGID en directorios (colaboración por grupo)"

En un directorio con SGID, los archivos nuevos heredan el grupo del directorio.

ventana terminal
chmod g+s /ruta/directorio

En ls -l verás una s en el bloque del grupo (ej. drwxrwsr-x).

El sticky bit es típico de /tmp (permite que todos creen, pero nadie borra lo del otro salvo el dueño o root).

ventana terminal
chmod 1777 /ruta/carpeta

En ls -ld verás una t al final (ej. drwxrwxrwt).

  1. Si utilizas el comando ls -l y observas que un archivo tiene los permisos -rw-r--r--, ¿Cuál es su equivalente exacto usando la notación numérica Octal?

  2. Acabas de crear un script en Bash maravilloso llamado limpiar.sh. Eres su creador, por lo que tienes permisos de lectura y escritura (rw-), pero al internar correrlo te dice “Permiso Denegado”. ¿Cuál de estos comandos soluciona el problema de la forma más segura usando el Modo Simbólico?

  3. Has montado un servidor Web Apache en Debian. El usuario que ejecuta el servidor web se llama www-data. Sin embargo, subiste los archivos de la página web usando tu cuenta personal juan. El servidor lanza error 403 Forbidden porque no es dueño de los archivos de la web. ¿Qué comando arregla toda la web de golpe?