Permisos de Archivos

Author

Diego Saavedra

Published

January 29, 2024

Permisos de Archivos

Introducción

Los permisos de archivos son fundamentales en Linux. Controlan quién puede leer, escribir o ejecutar un archivo. Entender y manejar permisos correctamente es esencial para la seguridad del sistema.

🗺️ En este tema aprenderás:

  • Estructura de permisos en Linux (rwx)
  • Permiso de lectura (r), escritura (w), ejecución (x)
  • Propietario, grupo y otros
  • Notación octal vs simbólica
  • Comando chmod - cambiar permisos
  • Comando chown - cambiar propietario
  • Comando chgrp - cambiar grupo
  • Permisos especiales (setuid, setgid, sticky)

Entendiendo los Permisos de Linux

En Linux, cada archivo tiene 3 conjuntos de permisos: propietario, grupo y otros.

Estructura: -rwxrwxrwx

-   rwx   rwx   rwx
|   |     |     |
|   |     |     +-- Permisos de otros (others)
|   |     +-------- Permisos de grupo (group)
|   +-------------- Permisos del propietario (user/owner)
+------------------ Tipo de archivo (- = archivo regular)

Significado de rwx:

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

Ejemplo de interpretación:

-rw-r--r--

- = archivo regular
rw- = propietario puede leer y escribir (no ejecutar)
r-- = grupo solo puede leer
r-- = otros solo pueden leer

Notación Octal de Permisos

Cada permiso puede representarse como número:

  • r = 4
  • w = 2
  • x = 1

Se suman para obtener un dígito de 0-7:

Número Permisos Explicación
7 rwx Leer + escribir + ejecutar
6 rw- Leer + escribir
5 r-x Leer + ejecutar
4 r– Solo leer
3 -wx Escribir + ejecutar
2 -w- Solo escribir
1 –x Solo ejecutar
0 Sin permisos

Ejemplos:

  • 755 = rwxr-xr-x (dueño todo, grupo y otros ejecutar)
  • 644 = rw-r–r– (dueño leer/escribir, grupo/otros solo leer)
  • 777 = rwxrwxrwx (todos pueden hacer todo)

El Comando chmod - Cambiar Permisos

El comando chmod (change mode) modifica los permisos de archivos.

Sintaxis:

BASH
chmod [opciones] [modo] [archivo]

Modalidades:

  1. Octal: chmod 644 archivo

  2. Simbólica: chmod u+x archivo

💡 Ejemplos Prácticos Multi-SO

Linux

BASH
$ ls -l script.sh
-rw-r--r-- 1 usuario grupo 1024 Jan 29 10:30 script.sh

1$ chmod +x script.sh
$ ls -l script.sh
-rwxr-xr-x 1 usuario grupo 1024 Jan 29 10:30 script.sh
1
+x agrega permisos de ejecución para todos
2
Se puede ejecutar ahora: ./script.sh

macOS

BASH
$ chmod +x script.sh
$ ls -l script.sh
-rwxr-xr-x@ 1 usuario staff 1024 Jan 29 10:30 script.sh
1
Funciona igual (@ indica atributos extendidos de macOS)

Windows

POWERSHELL
1# Windows no tiene permisos estilo Unix en NTFS
# Si estás en WSL:
PS> wsl chmod +x script.sh

# En PowerShell puro, no aplica igual
1
Windows usa permisos ACL diferentes
2
WSL hereda permisos del sistema de archivos de Windows

Ejemplo 2: Usar notación octal (chmod 644)

BASH
$ chmod 644 archivo.txt
$ ls -l archivo.txt
-rw-r--r-- 1 usuario grupo 1024 Jan 29 10:30 archivo.txt
# Interpretación: 6=rw-, 4=r--, 4=r--
1
2
1
6 (rw-) para propietario
2
4 (r–) para grupo
3
4 (r–) para otros
BASH
$ chmod 644 archivo.txt
$ ls -l archivo.txt
-rw-r--r-- 1 usuario staff 1024 Jan 29 10:30 archivo.txt
1
Funciona exactamente igual
POWERSHELL
# En WSL:
PS> wsl chmod 644 archivo.txt

# En PowerShell puro, usar Set-Acl
PS> $acl = Get-Acl archivo.txt
PS> $rule = New-Object System.Security.AccessControl.FileSystemAccessRule `
    ("usuario", "Modify", "Allow")
1
1
Mucho más complejo en PowerShell
2
WSL es más práctico

Ejemplo 3: Notación simbólica (u+rwx, g-w, o-rwx)

BASH
# Símbolos: u (user/owner), g (group), o (others), a (all)
# Operadores: + (agregar), - (remover), = (establecer)

$ chmod u+x archivo.txt         # Agregar ejecución al propietario
$ chmod g-w archivo.txt         # Remover escritura del grupo
$ chmod o-rwx archivo.txt       # Remover todos los permisos a otros
$ chmod a+r archivo.txt         # Agregar lectura a todos
$ chmod u=rwx,g=rx,o= archivo.txt  # Establecer permisos exactos
1
1
Muy flexible y legible
2
Puedes combinar múltiples cambios con comas
BASH
$ chmod u+x archivo.txt
# Funciona idéntico a Linux
1
Mismo comando y sintaxis
POWERSHELL
# En WSL:
PS> wsl chmod u+x archivo.txt
1
Se requiere WSL para sintaxis Unix

Ejemplo 4: Cambiar permisos recursivamente (-R)

BASH
# Cambiar permisos de todos los archivos en un directorio
$ chmod -R 755 ~/public_html
1
-R aplica recursivamente a todos los subdirectorios
BASH
$ chmod -R 755 ~/public_html
1
Funciona igual
POWERSHELL
PS> wsl chmod -R 755 ~/public_html
1
Use WSL para esto
Notación Ejemplos Cuándo usar
Octal chmod 644 archivo Scripts, automatización
Simbólica chmod u+x archivo Cambios rápidos, legibilidad
Recursiva chmod -R 755 dir Cambiar directorios completos

El Comando chown - Cambiar Propietario

El comando chown (change owner) cambia el propietario y/o grupo de archivos.

Sintaxis:

BASH
chown [propietario:grupo] [archivo]

💡 Ejemplos Prácticos Multi-SO

Linux

BASH
$ ls -l archivo.txt
-rw-r--r-- 1 usuario grupo 1024 Jan 29 10:30 archivo.txt

$ sudo chown otro-usuario archivo.txt
$ ls -l archivo.txt
-rw-r--r-- 1 otro-usuario grupo 1024 Jan 29 10:30 archivo.txt
2
1
Requiere permisos de administrador (sudo)
2
Solo el propietario o root puede cambiar el dueño

macOS

BASH
$ sudo chown otro-usuario archivo.txt
$ ls -l archivo.txt
-rw-r--r-- 1 otro-usuario staff 1024 Jan 29 10:30 archivo.txt
1
Funciona igual que Linux

Windows

POWERSHELL
# Windows no tiene chown igual
# En WSL:
PS> wsl sudo chown otro-usuario archivo.txt
1
Requiere WSL

Ejemplo 2: Cambiar propietario y grupo

BASH
$ sudo chown usuario:nuevo-grupo archivo.txt
$ ls -l archivo.txt
-rw-r--r-- 1 usuario nuevo-grupo 1024 Jan 29 10:30 archivo.txt
1
Sintaxis: usuario:grupo
BASH
$ sudo chown usuario:staff archivo.txt
1
Funciona igual
POWERSHELL
PS> wsl sudo chown usuario:nuevo-grupo archivo.txt
1
Usa WSL

Ejemplo 3: Cambiar solo el grupo (chgrp)

BASH
$ sudo chgrp nuevo-grupo archivo.txt
$ ls -l archivo.txt
-rw-r--r-- 1 usuario nuevo-grupo 1024 Jan 29 10:30 archivo.txt
1
chgrp es una abreviatura de chown :grupo
BASH
$ sudo chgrp staff archivo.txt
1
Funciona igual
POWERSHELL
PS> wsl sudo chgrp nuevo-grupo archivo.txt
1
Usa WSL

Ejemplo 4: Cambiar recursivamente (-R)

BASH
$ sudo chown -R usuario:grupo ~/miproyecto
1
-R aplica a todos los archivos y subdirectorios
BASH
$ sudo chown -R usuario:staff ~/myproject
1
Funciona igual
POWERSHELL
PS> wsl sudo chown -R usuario:grupo ~/miproyecto
1
Use WSL

Permisos Especiales

Existen 3 permisos especiales que modifican el comportamiento:

Setuid (4000)

  • Cuando se ejecuta, se ejecuta con permisos del propietario
  • Se muestra como s en lugar de x en el propietario
  • Ejemplo: /usr/bin/sudo tiene setuid

Setgid (2000)

  • Se ejecuta con permisos del grupo
  • Se muestra como s en lugar de x en el grupo
  • Útil para directorios compartidos

Sticky Bit (1000)

  • En directorios, solo el propietario puede borrar archivos
  • Se muestra como t al final
  • Ejemplo: /tmp tiene sticky bit

💡 Ejemplo: Setuid

BASH
# Ver permiso especial
$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 1234 Jan 15 10:00 /usr/bin/sudo
1
La s indica setuid (se ejecuta como root)
BASH
$ ls -ld /tmp
drwxrwxrwt 1 root root 4096 Jan 29 10:45 /tmp
1
1
La t al final es sticky bit
2
Solo el propietario de cada archivo puede borrarlo
BASH
$ chmod u+s archivo      # Agregar setuid
$ chmod 4755 archivo     # Notación octal (4 = setuid)
1
Úsalo con cuidado (implicaciones de seguridad)

Resumen de Permisos

Comando Propósito Ejemplo
chmod 644 archivo Cambiar permisos (octal) Archivos de datos
chmod u+x archivo Cambiar permisos (simbólico) Scripts ejecutables
chmod -R 755 dir Cambiar recursivamente Directorios
chown usuario archivo Cambiar propietario Traspasar propiedad
chown usuario:grupo archivo Cambiar propietario y grupo Configuración
chgrp grupo archivo Cambiar solo grupo Permisos de grupo
ls -l Ver permisos Auditoría
stat archivo Ver permisos detallados Análisis profundo

Permisos Comunes

Modo Octal Uso Común
rwxr-xr-x 755 Scripts ejecutables, directorios
rw-r–r– 644 Archivos de datos, documentos
rwx—— 700 Archivos privados, directorios personales
rwxrwx— 770 Directorio compartido de grupo
rw-rw-r– 664 Archivo editable por grupo
rwxrwxrwx 777 Acceso total (riesgoso)
r–r–r– 444 Archivo de solo lectura

🎯 Ejercicios Prácticos

  1. Crea un archivo y establece permisos 644

  2. Crea un script y hazlo ejecutable con chmod +x

  3. Crea un directorio y establece 755

  4. Usa notación simbólica para remover escritura (g-w)

  5. Ver permisos con ls -l e interpreta cada columna

  6. Cambia grupo de un archivo con chgrp


Referencias

Para más información sobre permisos:

Code Appendix

IEEE. 2018. “POSIX.1-2017 Portable Operating System Interface.” 2018.
Project, Linux Documentation. 2024. “Linux File Permissions Guide.” 2024.