Entendiendo los Permisos de Archivos en Linux y Cómo Administrarlos
Los permisos de archivos en Linux son uno de los aspectos más fundamentales — y más incomprendidos — de la administración de sistemas. Ya sea que estés administrando un servidor web de producción, implementando aplicaciones o escribiendo scripts de automatización, una comprensión sólida del modelo de permisos de Linux es innegociable. Si lo haces mal, corres el riesgo de sufrir brechas de seguridad, implementaciones rotas o servicios bloqueados. Si lo haces bien, tienes un marco de seguridad poderoso y granular trabajando a tu favor.
Esta guía cubre todo lo que necesitas saber: cómo funciona el modelo de permisos, cómo leer y modificar permisos, cómo administrar la propiedad y cómo manejar bits de permisos avanzados como SUID, SGID y el sticky bit.
El Modelo de Permisos de Archivos de Linux Explicado
Cada archivo y directorio en un sistema Linux tiene asignado un conjunto de derechos de acceso. Estos derechos se dividen entre tres clases de usuario y tres tipos de permisos.
Las Tres Clases de Usuario
| Clase | Descripción |
|---|---|
| propietario | El usuario que es propietario del archivo |
| grupo | Todos los usuarios que pertenecen al grupo asignado del archivo |
| otros | Todos los demás en el sistema |
Los Tres Tipos de Permisos
| Permiso | Símbolo | Significado |
|---|---|---|
| lectura | r | Ver el contenido del archivo o listar el contenido del directorio |
| escritura | w | Modificar un archivo o directorio |
| ejecución | x | Ejecutar un archivo como programa, o entrar/recorrer un directorio |
Juntos, estos nueve bits (tres clases × tres permisos) definen el perfil completo de control de acceso para cada objeto en el sistema de archivos.
Cómo ver permisos de archivo con ls -l
La forma más rápida de inspeccionar permisos es con el comando ls -l:
ls -l myscript.shEjemplo de salida:
-rwxr-xr-- 1 alice devs 2048 Jan 25 10:00 myscript.shAquí te mostramos cómo leer la cadena de permisos carácter por carácter:
| Caracteres | Significado |
|---|---|
- | Tipo de archivo (- = archivo regular, d = directorio, l = enlace simbólico) |
rwx | Permisos del propietario: lectura, escritura, ejecución |
r-x | Permisos del grupo: lectura, ejecución (sin escritura) |
r-- | Permisos de otros: solo lectura |
Entonces en este ejemplo, alice (el propietario) tiene acceso completo, los miembros del grupo devs pueden leer y ejecutar el archivo, y todos los demás solo pueden leerlo.
Cambiar permisos con chmod
El comando chmod modifica los permisos de archivo. Admite dos modos: simbólico y numérico (octal).
Modo simbólico
El modo simbólico utiliza letras y operadores para agregar (+), eliminar (-) o establecer (=) permisos:
chmod u+x myscript.sh # Add execute permission for the owner
chmod g-w myscript.sh # Remove write permission from the group
chmod o=r myscript.sh # Set read-only for others (exactly)
chmod a+x myscript.sh # Add execute for all (owner, group, others)Las clases de destino son: u (usuario/propietario), g (grupo), o (otros), a (todos).
Modo numérico (octal)
Cada tipo de permiso tiene un valor numérico: r = 4, w = 2, x = 1. Los suma para obtener un dígito único por clase.
| Octal | Binario | Permisos |
|---|---|---|
7 | 111 | rwx |
6 | 110 | rw- |
5 | 101 | r-x |
4 | 100 | r-- |
0 | 000 | --- |
Ejemplos comunes:
chmod 755 myscript.sh # Owner: rwx | Group: r-x | Others: r-x
chmod 644 file.txt # Owner: rw- | Group: r-- | Others: r--
chmod 700 script.sh # Owner: rwx | Group: --- | Others: ---
chmod 600 secret.key # Owner: rw- | Group: --- | Others: ---> Referencia rápida: 755 es el estándar para scripts y directorios públicos. 644 es el estándar para archivos de configuración legibles. 600 es ideal para claves privadas y credenciales sensibles.
Gestión de Propiedad con chown y chgrp
Los permisos solo tienen sentido en el contexto de la propiedad. Los comandos chown y chgrp te permiten asignar archivos al usuario y grupo correcto.
Cambiar el Propietario del Archivo
chown alice file.txtCambiar el Grupo
chgrp devs file.txtCambiar Propietario y Grupo Simultáneamente
chown bob:admins file.txtAplicar Cambios Recursivamente
La bandera -R aplica cambios de propiedad a un directorio y todo su contenido — esencial al configurar raíces de documentos del servidor web:
chown -R www-data:www-data /var/www/html/Este es un paso crítico al desplegar aplicaciones web en un entorno de VPS Hosting, asegurando que el proceso del servidor web tenga el acceso correcto para servir archivos.
Bits de Permiso Especial: SUID, SGID y Sticky Bit
Más allá de los nueve bits de permiso estándar, Linux admite tres modos especiales que modifican el comportamiento predeterminado de formas importantes.
1. SUID — Set User ID
Se aplica a: Archivos ejecutables
Cuando el bit SUID se establece en un ejecutable, se ejecuta con los privilegios del propietario del archivo, no del usuario que lo lanzó.
chmod u+s /usr/bin/passwdls -l salida:
-rwsr-xr-x 1 root root 54256 Jan 10 08:00 /usr/bin/passwdObserve el s en lugar del x del propietario. Así es como /usr/bin/passwd puede actualizar /etc/shadow (un archivo propiedad de root) incluso cuando lo ejecuta un usuario regular.
> Nota de seguridad: Tenga mucho cuidado al establecer SUID en scripts personalizados. Un binario SUID mal configurado es un vector clásico de escalada de privilegios.
2. SGID — Set Group ID
Se aplica a: Archivos ejecutables y directorios
- En archivos: El archivo se ejecuta con los privilegios de grupo del propietario del grupo del archivo.
- En directorios: Los archivos nuevos creados dentro del directorio heredan automáticamente el grupo del directorio, en lugar del grupo primario del usuario que los crea.
chmod g+s /opt/projectls -l salida:
drwxr-sr-x 2 alice devs 4096 Jan 25 10:00 /opt/projectSGID en directorios es extremadamente útil para carpetas de desarrollo compartido donde múltiples miembros del equipo necesitan una propiedad de grupo consistente en todos los archivos nuevos.
3. Sticky Bit
Se aplica a: Directorios
Cuando el sticky bit se establece en un directorio, solo el propietario del archivo (o root) puede eliminar o renombrar ese archivo, incluso si otros usuarios tienen permiso de escritura en el directorio.
chmod +t /shared/folderls -ld salida para /tmp:
drwxrwxrwt 10 root root 4096 Jan 28 12:00 /tmpEl t al final indica que el sticky bit está activo. Por eso /tmp es escribible por todos pero los usuarios no pueden eliminar los archivos temporales de otros.
Entendiendo umask — Control de Permisos Predeterminados
Cuando se crea un nuevo archivo o directorio, Linux no le otorga permisos máximos. En su lugar, aplica una umask (máscara de creación de archivos del usuario) que resta permisos del valor predeterminado.
Verifica Tu umask Actual
umaskSalida común: 0022
Cómo Funciona umask
| Objeto | Máximo Predeterminado | Con umask `0022` | Resultado |
|---|---|---|---|
| Archivo | 666 (rw-rw-rw-) | 666 - 022 | 644 (rw-r–r–) |
| Directorio | 777 (rwxrwxrwx) | 777 - 022 | 755 (rwxr-xr-x) |
> Nota: Linux nunca establece el bit de ejecución en archivos recién creados de forma predeterminada, independientemente de umask.
Establece una umask Temporal
umask 0077 # New files: 600 (rw-------), New dirs: 700 (rwx------)Esto es útil en scripts que crean archivos temporales sensibles. Para un cambio permanente, añade el comando umask al archivo de perfil de tu shell (por ejemplo, ~/.bashrc o /etc/profile).
Correcciones de Permisos Recursivos
Una tarea común en el mundo real es restablecer permisos en todo un directorio de proyecto — por ejemplo, después de un despliegue fallido o una carga FTP que dañó los permisos. La clave es establecer permisos diferentes para directorios y archivos, ya que los directorios necesitan el bit de ejecución para ser atravesables.
# Set all directories to 755
find /var/www/myapp -type d -exec chmod 755 {} ;
# Set all files to 644
find /var/www/myapp -type f -exec chmod 644 {} ;Si tu aplicación tiene scripts ejecutables específicos, corrígelos por separado después:
chmod 755 /var/www/myapp/bin/*.shEste patrón es esencial para cualquiera que administre entornos de alojamiento web. Si ejecutas aplicaciones PHP, Python o Node.js en un VPS con cPanel, los permisos de archivo incorrectos son una de las causas más comunes de errores 403 Forbidden y fallos en la ejecución de scripts.
Referencia Práctica de Permisos para Escenarios Comunes
| Escenario | Permisos Recomendados | Comando |
|---|---|---|
| Archivos web públicos (HTML, CSS, JS) | 644 | chmod 644 index.html |
| Directorios web | 755 | chmod 755 /var/www/html |
| Scripts PHP/Python | 644 o 755 | Depende del método de ejecución |
| Claves privadas SSH | 600 | chmod 600 ~/.ssh/id_rsa |
Directorio .ssh | 700 | chmod 700 ~/.ssh |
| Directorio de proyecto compartido | 2775 (SGID) | chmod 2775 /opt/project |
| Directorio temporal escribible por todos | 1777 (sticky) | chmod 1777 /tmp/shared |
| Archivos de configuración con secretos | 600 | chmod 600 .env |
Permisos de Archivos Linux y Seguridad del Servidor
Entender los permisos de archivos no es solo un ejercicio académico — tiene implicaciones directas y prácticas para la seguridad y estabilidad del servidor.
Errores de seguridad comunes a evitar:
- Configurar
777en directorios web. Esto otorga acceso de lectura, escritura y ejecución a todos — una vulnerabilidad crítica si tu servidor está comprometido o si es posible la inyección de código PHP. - Dejar archivos de configuración legibles por todos. Archivos como
.env,wp-config.phpo credenciales de base de datos deben ser600o640como máximo. - Ignorar la propiedad. Incluso si los permisos se ven correctos, si el usuario incorrecto es propietario de un archivo, tu servidor web o demonio de aplicación puede no poder leerlo.
chownrecursivo en directorios del sistema. Ejecutarchown -Rsin cuidado en/etco/usrpuede romper tu sistema completo.
Si estás ejecutando un entorno de producción en Servidores Dedicados, implementar una política de permisos estricta es uno de los primeros pasos de endurecimiento que debes tomar después de la configuración inicial.
Para equipos que administran múltiples sitios o aplicaciones, los Paneles de Control VPS pueden simplificar la gestión de permisos a través de administradores de archivos gráficos, aunque la competencia en línea de comandos sigue siendo esencial para configuraciones avanzadas.
Referencia Rápida de Comandos
# View permissions
ls -l filename
ls -ld directory/
# Change permissions (symbolic)
chmod u+x file # Add execute for owner
chmod g-w file # Remove write for group
chmod o=r file # Set read-only for others
chmod a+r file # Add read for all
# Change permissions (numeric)
chmod 755 file # rwxr-xr-x
chmod 644 file # rw-r--r--
chmod 600 file # rw-------
chmod 700 file # rwx------
# Change ownership
chown user file
chgrp group file
chown user:group file
chown -R user:group directory/
# Special bits
chmod u+s file # Set SUID
chmod g+s directory # Set SGID
chmod +t directory # Set sticky bit
# umask
umask # Show current umask
umask 0022 # Set umask for session
# Recursive fixes
find /path -type d -exec chmod 755 {} ;
find /path -type f -exec chmod 644 {} ;Conclusión
Los permisos de archivos de Linux forman la columna vertebral de la seguridad del sistema, el control de acceso multiusuario y la implementación confiable de aplicaciones. El modelo es elegante en su simplicidad — tres clases, tres tipos de permisos, algunos bits especiales — pero lo suficientemente poderoso para asegurar todo, desde una máquina de desarrollo personal hasta un servidor de producción de alto tráfico.
Dominar chmod, chown, umask y los bits de permisos especiales te da la confianza para implementar aplicaciones correctamente, solucionar errores de acceso rápidamente y fortalecer tus servidores contra acceso no autorizado.
Ya sea que estés comenzando con Alojamiento Web Compartido o escalando a un entorno completamente administrado de Alojamiento VPS, una comprensión sólida de los permisos de archivos de Linux es una de las habilidades de mayor apalancamiento que puedes desarrollar como administrador de sistemas o desarrollador. Invierte tiempo en comprenderlo profundamente — tus servidores (y tus usuarios) te lo agradecerán.
en todos los servicios de hosting