Permisos de Archivos
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:
Octal:
chmod 644 archivoSimbó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
-
+xagrega 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
- 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
-
-Raplica 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
-
chgrpes una abreviatura dechown :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
-
-Raplica 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
sen lugar dexen el propietario - Ejemplo:
/usr/bin/sudotiene setuid
Setgid (2000)
- Se ejecuta con permisos del grupo
- Se muestra como
sen lugar dexen el grupo - Útil para directorios compartidos
Sticky Bit (1000)
- En directorios, solo el propietario puede borrar archivos
- Se muestra como
tal final - Ejemplo:
/tmptiene 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
sindica setuid (se ejecuta como root)
BASH
$ ls -ld /tmp
drwxrwxrwt 1 root root 4096 Jan 29 10:45 /tmp
1- 1
-
La
tal 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
Crea un archivo y establece permisos
644Crea un script y hazlo ejecutable con
chmod +xCrea un directorio y establece
755Usa notación simbólica para remover escritura (
g-w)Ver permisos con
ls -le interpreta cada columnaCambia grupo de un archivo con
chgrp
Referencias
Para más información sobre permisos:
- (IEEE 2018) - POSIX Permissions
- (Project 2024) - Linux File Permissions Guide