Hola Fronters 👋
Si alguna vez has ejecutado ls -l y te has encontrado con una sopa de letras como -rwxr-xr-x y te has preguntado qué significa todo eso, este artículo es para ti. La permisología de archivos y directorios en Linux es uno de los pilares fundamentales de la seguridad y administración del sistema. Dominarla te permitirá controlar quién puede leer, escribir o ejecutar cada recurso en tu servidor.
Hoy vamos a cubrir desde los conceptos básicos hasta temas avanzados como permisos especiales (SUID, SGID, Sticky Bit) y ACLs, todo con ejemplos prácticos que puedes probar en tu terminal.
¿Qué son los permisos en Linux?
En Linux, cada archivo y directorio tiene un conjunto de permisos que determinan qué operaciones puede realizar cada usuario sobre él. El modelo es simple pero poderoso: tres acciones básicas (leer, escribir, ejecutar) para tres categorías de usuarios (propietario, grupo, otros).
Los tres tipos de permisos (rwx)
- r (read): Permite leer el contenido del archivo. En directorios, permite listar su contenido.
- w (write): Permite modificar el archivo. En directorios, permite crear, eliminar o renombrar archivos dentro de él.
- x (execute): Permite ejecutar el archivo como programa. En directorios, permite acceder a su contenido (atravesarlo con
cd).
Los tres niveles de usuarios
- Owner (propietario): El usuario que creó el archivo. Puede cambiarse con
chown. - Group (grupo): Todos los usuarios que pertenecen al grupo asignado al archivo.
- Others (otros): Cualquier usuario que no sea ni el propietario ni miembro del grupo.
Cómo leer permisos con ls -l
Ejecuta ls -l y verás algo como esto:
$ ls -l
-rwxr-xr-x 1 root root 12345 May 15 10:00 script.sh
drwxr-x--- 2 root admin 4096 May 15 10:00 proyecto
Vamos a desglosar el primer campo, que tiene 10 caracteres:
- Carácter 1: Tipo de archivo.
-= archivo regular,d= directorio,l= enlace simbólico. - Caracteres 2-4: Permisos del propietario (owner).
- Caracteres 5-7: Permisos del grupo (group).
- Caracteres 8-10: Permisos de otros (others).
En el ejemplo, -rwxr-xr-x significa: archivo regular, el propietario puede leer, escribir y ejecutar; el grupo y otros solo pueden leer y ejecutar.
chmod: Cambiar permisos
El comando chmod (change mode) es tu herramienta principal para modificar permisos. Puedes usar dos notaciones: simbólica y octal.
Notación simbólica
Usa letras para referirse a los usuarios y operadores para asignar permisos:
u= user (propietario),g= group,o= others,a= all (todos)+añade permiso,-quita,=asigna exactamente
# Dar permiso de ejecución al propietario
chmod u+x script.sh
# Quitar permiso de escritura al grupo
chmod g-w documento.txt
# Asignar solo lectura a otros
chmod o=r documento.txt
# Dar todos los permisos al propietario, solo lectura al grupo y otros
chmod u=rwx,go=r script.sh
Notación octal (numérica)
Cada permiso tiene un valor numérico: r=4, w=2, x=1. Se suman para cada grupo de usuario:
- 7 (rwx): 4+2+1 — lectura, escritura y ejecución
- 6 (rw-): 4+2 — lectura y escritura
- 5 (r-x): 4+1 — lectura y ejecución
- 4 (r–): 4 — solo lectura
- 0 (—): sin permisos
# 755 = rwxr-xr-x (común para scripts y directorios)
chmod 755 script.sh
# 644 = rw-r--r-- (común para archivos de texto)
chmod 644 index.html
# 700 = rwx------ (solo el propietario tiene acceso total)
chmod 700 clave.pem
# 777 = rwxrwxrwx (acceso total para todos — ¡evitar en producción!)
chmod 777 carpeta-compartida
chown: Cambiar propietario y grupo
Con chown (change owner) puedes transferir la propiedad de archivos y directorios:
# Cambiar el propietario
chown juan documento.txt
# Cambiar propietario y grupo simultáneamente
chown juan:desarrolladores proyecto/
# Cambiar solo el grupo (usando los dos puntos)
chown :desarrolladores index.html
# Recursivo (-R): aplica a todo el árbol de directorios
chown -R www-data:www-data /var/www/html
chgrp: Cambiar grupo
Alternativamente, puedes usar chgrp exclusivamente para cambiar el grupo de un archivo:
# Cambiar grupo de un archivo
chgrp desarrolladores app.py
# Cambiar grupo recursivamente
chgrp -R desarrolladores /opt/proyecto/
# Combinación útil con find
find /opt/proyecto -type f -exec chgrp desarrolladores {} \;
umask: Máscara de permisos por defecto
Cuando creas un archivo o directorio, Linux asigna permisos por defecto aplicando la máscara umask. La umask resta permisos del valor base:
- Archivos base: 666 (rw-rw-rw-)
- Directorios base: 777 (rwxrwxrwx)
# Ver la umask actual
umask
# Resultado típico: 0022
# La umask 022 da como resultado:
# Archivos: 666 - 022 = 644 (rw-r--r--)
# Directorios: 777 - 022 = 755 (rwxr-xr-x)
# Cambiar umask temporalmente
umask 077
# Archivos: 600, Directorios: 700 (solo el propietario)
# Hacer el cambio permanente (en ~/.bashrc o ~/.profile)
echo "umask 027" >> ~/.bashrc
Permisos especiales: SUID, SGID y Sticky Bit
Linux ofrece tres permisos especiales que añaden comportamientos avanzados a archivos y directorios.
SUID (Set User ID) — 4xxx
Cuando un archivo ejecutable tiene SUID, se ejecuta con los privilegios del propietario del archivo, no del usuario que lo ejecuta. Se representa con una s en la posición del x del propietario.
# Ejemplo clásico: /bin/passwd tiene SUID
ls -l /bin/passwd
# -rwsr-xr-x 1 root root ... /bin/passwd
# Activar SUID (simbólico)
chmod u+s script.sh
# Activar SUID (octal — el 4 al inicio)
chmod 4755 script.sh
# Resultado: -rwsr-xr-x
SGID (Set Group ID) — 2xxx
En archivos: se ejecuta con los privilegios del grupo. En directorios: los nuevos archivos creados dentro heredan el grupo del directorio. Se representa con s en la posición del grupo.
# Activar SGID en un directorio compartido
chmod g+s /compartido/proyecto
# Ahora todos los archivos creados aquí pertenecerán al grupo del directorio
# Activar SGID (octal — el 2 al inicio)
chmod 2755 /compartido/proyecto
# Resultado: drwxr-sr-x
Sticky Bit — 1xxx
En directorios, el Sticky Bit evita que los usuarios eliminen o renombren archivos que no les pertenecen, incluso si tienen permisos de escritura en el directorio. Se representa con una t en la posición de x de otros. El ejemplo clásico es /tmp.
# Ver el Sticky Bit en /tmp
ls -ld /tmp
# drwxrwxrwt ... /tmp/
# Activar Sticky Bit
chmod +t /compartido/temporal
# Activar Sticky Bit (octal — el 1 al inicio)
chmod 1777 /compartido/temporal
# Resultado: drwxrwxrwt
Puedes combinar permisos especiales:
# SUID + SGID = 6 (4+2) al inicio
chmod 6755 script.sh
# Resultado: -rwsr-sr-x
ACLs (Access Control Lists)
Cuando los permisos estándar de owner/grupo/otros no son suficientes, las ACLs permiten asignar permisos a usuarios y grupos específicos de forma granular.
# Ver ACLs de un archivo
getfacl documento.txt
# Salida:
# # file: documento.txt
# # owner: juan
# # group: desarrolladores
# user::rw-
# group::r--
# other::r--
# Asignar permisos específicos a un usuario
setfacl -m u:maria:rwx documento.txt
# Asignar permisos a un grupo
setfacl -m g:ventas:rx proyecto/
# Eliminar una entrada de ACL
setfacl -x u:maria documento.txt
# Hacer los permisos recursivos (-R) y por defecto (-d) en directorios
setfacl -R -m u:maria:rwx /compartido/proyecto
setfacl -R -dm u:maria:rwx /compartido/proyecto
Casos prácticos resumidos
1. Script ejecutable para todos
chmod 755 deploy.sh
# -rwxr-xr-x propietario: grupo deploy.sh
2. Archivo de configuración sensible
chmod 600 config.db
# -rw------- root: root config.db
3. Directorio compartido de equipo
mkdir proyecto
chown :desarrolladores proyecto
chmod 2775 proyecto
# drwxrwsr-x usuario: desarrolladores proyecto/
4. Servidor web
chown -R www-data:www-data /var/www/misitio
find /var/www/misitio -type f -exec chmod 644 {} \;
find /var/www/misitio -type d -exec chmod 755 {} \;
Conclusión
Los permisos en Linux son tu primera línea de defensa. Conocer chmod, chown, chgrp y umask es esencial para cualquier administrador de sistemas. Los permisos especiales (SUID, SGID, Sticky Bit) y las ACLs te dan control granular cuando los permisos básicos se quedan cortos.
Recuerda la regla de oro: otorga siempre el mínimo privilegio necesario. Un chmod 777 es casi siempre señal de que algo no está bien diseñado.
¿Tienes dudas o quieres profundizar en algún aspecto? Déjanos tu comentario. ¡Hasta la próxima, Fronters! 🐧
📊 Infografía: Permisos en Linux
Descarga nuestra infografía resumen:
