Cómo entender los permisos en archivos Linux - Guía completa chmod, chown, octal
Linux | File Permissions | Security
Permisos en archivos Linux: Guía completa de chmod, chown y octal
Domina rwx, 755, 644. Entiende permisos usuario/grupo/otros. Seguridad y control total de tu sistema. De novato a experto.
¿Qué son los permisos en Linux?
Los permisos en Linux son reglas que controlan quién puede hacer qué con cada archivo o carpeta. Son la base de la seguridad en Linux: sin ellos, cualquier usuario podría leer, modificar o ejecutar cualquier archivo del sistema. Entender permisos es esencial para administración de servidores, seguridad y DevOps.
Tres conceptos clave: Read (lectura), Write (escritura), Execute (ejecución). Tres categorías: User (dueño), Group (grupo), Others (otros usuarios). Dos formatos: Notación simbólica (rwx) y octal (755).
El ejemplo clásico: Tu archivo de configuración con contraseñas. Quieres que solo TÚ puedas leerlo (600). Si los permisos son 644, otros usuarios pueden verlo. Un error de permisos = brechas de seguridad.
Tres permisos básicos
1. Read (r) - Lectura
- Para archivos: Puedo ver el contenido del archivo
- Para carpetas: Puedo listar archivos dentro (ls)
- Valor octal: 4
- Representación: r--
2. Write (w) - Escritura
- Para archivos: Puedo modificar/eliminar el archivo
- Para carpetas: Puedo crear/eliminar archivos dentro
- Valor octal: 2
- Representación: -w-
3. Execute (x) - Ejecución
- Para archivos: Puedo ejecutar el archivo (script, binary)
- Para carpetas: Puedo acceder/navegar dentro (cd)
- Valor octal: 1
- Representación: --x
Regla de oro: Read=4, Write=2, Execute=1. Suma para combinaciones: 4+2=6 (rw-), 4+2+1=7 (rwx), etc.
Leer permisos con notación simbólica
Cuando ejecutas ls -l, ves algo así:
-rw-r--r-- 1 usuario grupo 1234 May 20 10:30 archivo.txt
drwxr-xr-x 2 usuario grupo 4096 May 20 10:30 carpeta
Desglose del primer ejemplo: -rw-r--r--
- - = Tipo de archivo.
-= archivo normal,d= directorio,l= enlace - rw- = Permisos del usuario (dueño). Read+Write, sin Execute
- r-- = Permisos del grupo. Solo Read
- r-- = Permisos de otros. Solo Read
Ejemplos comunes
-rw-r--r--(644): Archivo. Dueño leer+escribir, grupo y otros solo leer-rwxr-xr-x(755): Script ejecutable. Dueño control total, otros ejecutar+leer-rw-------(600): Secreto. Solo dueño puede leer/escribir, nadie másdrwxr-xr-x(755): Carpeta. Dueño control total, otros navegardrwx------(700): Carpeta privada. Solo dueño accede
Notación octal (números)
La tabla mágica
Permisos
Octal
Simbólico
Cálculo
No permission
0
---
0
Execute
1
--x
1
Write
2
-w-
2
Write+Execute
3
-wx
2+1
Read
4
r--
4
Read+Execute
5
r-x
4+1
Read+Write
6
rw-
4+2
Read+Write+Execute
7
rwx
4+2+1
Entender 755 (el más común)
755 = 7 5 5
7 (user) = 4+2+1 = rwx (control total)
5 (group) = 4+0+1 = r-x (leer + ejecutar)
5 (others) = 4+0+1 = r-x (leer + ejecutar)
Otros ejemplos útiles
644 = rw- r-- r-- (archivos regulares)
755 = rwx r-x r-x (carpetas, scripts ejecutables)
600 = rw- --- --- (archivos sensibles, solo dueño)
700 = rwx --- --- (carpeta privada, solo dueño)
777 = rwx rwx rwx (NUNCA USES ESTO - inseguro)
Cambiar permisos con chmod
Sintaxis básica
# Octal (más común)
chmod 755 archivo.txt
# Simbólico
chmod u+x archivo.txt # Añade execute al usuario
chmod u-w archivo.txt # Quita write al usuario
chmod go-r archivo.txt # Quita read a grupo y otros
Cambiar carpetas recursivamente
# Todos los archivos en carpeta a 644
chmod -R 644 /path/to/folder
# Todas las carpetas a 755
find /path -type d -exec chmod 755 {} \;
Ejemplos prácticos
# Hacer archivo ejecutable
chmod +x script.sh
# Archivo secreto (solo dueño)
chmod 600 contraseñas.txt
# Carpeta privada (solo dueño puede entrar)
chmod 700 mi-carpeta-privada/
# Web accessible (lectura para todos)
chmod 644 index.html
Cambiar dueño y grupo con chown
Sintaxis básica
# Cambiar dueño
sudo chown nuevousuario archivo.txt
# Cambiar dueño y grupo
sudo chown usuario:grupo archivo.txt
# Cambiar solo grupo
sudo chgrp grupoNuevo archivo.txt
Cambiar recursivamente
# Toda una carpeta
sudo chown -R usuario:grupo /path/to/folder
Ejemplo real: Archivo de Docker
# Problema: archivo creado por root, necesitas acceder como usuario
sudo chown $USER:$USER archivo.db
# Ahora el archivo es tuyo
chmod 644 archivo.db
Casos de uso comunes
1. Servidor web (Nginx/Apache)
# Archivos web legibles por servidor
chmod 644 /var/www/html/index.html
# Carpetas navegables por servidor
chmod 755 /var/www/html/
2. Claves privadas SSH
# CRÍTICO: Solo dueño puede acceder
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
3. Scripts ejecutables
# Script que otros usuarios pueden usar
chmod 755 /usr/local/bin/mi-script.sh
4. Archivo de configuración sensible
# Base de datos, credenciales, etc. Solo dueño
chmod 600 /etc/app/config.conf
5. Carpeta compartida (grupo)
# Todos en el grupo pueden acceder
chmod 770 /home/shared-folder
chown usuario:grupoCompartido /home/shared-folder
Errores comunes y soluciones
Error: Permission denied
# Causa: No tienes permisos de lectura/ejecución
ls -l archivo # Ver qué permisos tiene
chmod 755 archivo # Dar permisos adecuados
Error: No permission to execute
# Script sin permisos de ejecución
chmod +x script.sh
# Para ejecutar: ./script.sh
Problema: Docker no puede acceder a volumen
# Causa típica: archivo de host es propiedad de root
sudo chown -R 1000:1000 /data/ # UID 1000 = usuario típico en contenedor
chmod -R 755 /data/
NUNCA hagas esto: chmod 777 en producción. Cualquier usuario puede modificar cualquier archivo. Es una brecha de seguridad masiva.
Mejores prácticas de seguridad
Principio del menor privilegio
Da solo los permisos necesarios. Si un archivo necesita ser leído, no le des write. Si una carpeta solo necesita acceso, no le des permisos de modificación.
Archivos vs Carpetas
- Archivos: Típicamente 644 (rw-r--r--) o 600 (secreto)
- Carpetas: Típicamente 755 (rwxr-xr-x) o 700 (privada)
- Scripts: 755 si son ejecutables públicamente, 700 si privados
Auditar permisos regularmente
# Ver qué tiene permisos inseguros (777, 666, etc)
find / -perm 777 -type f # Archivos con 777
find / -perm 666 -type f # Archivos sin restricción de ejecución
Configuración típica de servidor
# Estructura estándar
/home/user/app/
config.conf → 600 (secreto, solo usuario)
app.bin → 755 (ejecutable público)
data/ → 700 (carpeta privada)
shared/ → 755 (carpeta compartida)
logs/ → 700 (solo usuario puede leer logs)
Comentarios
Publicar un comentario