Guía de permisos de archivos en Linux: chmod, chown y umask
¿Qué son los permisos de archivos en Linux y por qué deberían importarte?
Si alguna vez has intentado editar un archivo en tu servidor y has recibido un error de "Permiso denegado", o has subido una web y las imágenes no cargaban, ya has tenido un encuentro frustrante con los permisos linux. No te preocupes, es una de las primeras barreras que todo administrador de sistemas (aunque sea novato) debe superar.
Piensa en Linux como un edificio de oficinas muy seguro. Cada archivo y carpeta es una habitación con una puerta que tiene tres tipos de cerradura: una para el dueño, otra para el grupo de trabajo y otra para el público en general. Los permisos deciden quién puede abrir la puerta, quién puede entrar a reorganizar los muebles y quién solo puede mirar por la ventana.
Entender esto es vital si gestionas un hosting, un VPS o incluso un panel de control como Syspanel (al que accedes por el puerto 2106). Un error de permisos puede dejar tu web caída o, peor aún, abrir una brecha de seguridad. Pero no temas, porque hoy vamos a desglosar chmod, chown y umask de una forma sencilla y práctica.
La base: Lectura, Escritura y Ejecución (r, w, x)
Antes de lanzarnos a los comandos, necesitas conocer el alfabeto. En Linux, cada archivo tiene tres acciones básicas que se representan con letras:
- r (read - lectura): Permite ver el contenido del archivo o listar el contenido de un directorio.
- w (write - escritura): Permite modificar el archivo o crear/eliminar archivos dentro de un directorio.
- x (execute - ejecución): Permite ejecutar el archivo si es un script o un programa. En directorios, permite "entrar" en ellos (usar
cd).
Ahora, imagina una línea de comandos. Si escribes ls -l, verás una salida como esta:
-rw-r--r-- 1 usuario grupo 1024 oct 12 10:00 archivo.txt
Ese bloque -rw-r--r-- es la clave. El primer carácter indica si es un archivo (-) o un directorio (d). Los siguientes nueve caracteres se dividen en tres grupos de tres:
- Usuario (Owner): Los tres primeros (
rw-). Son los permisos del propietario. - Grupo (Group): Los tres siguientes (
r--). Son los permisos para el grupo al que pertenece el archivo. - Otros (Others): Los tres últimos (
r--). Son los permisos para cualquier otro usuario del sistema.
En el ejemplo, el dueño puede leer y escribir, pero el grupo y los demás solo pueden leer.
chmod: El guardián de los permisos (con ejemplos prácticos)
El comando chmod (change mode) es tu herramienta principal para cambiar estos permisos. Hay dos formas de usarlo: con letras (simbólico) o con números (octal). Te recomiendo aprender la numérica, es la más rápida y universal.
La magia de los números (modo octal)
Cada permiso tiene un valor numérico:
- Lectura (r) = 4
- Escritura (w) = 2
- Ejecución (x) = 1
Sumas estos valores para cada grupo (usuario, grupo, otros). Por ejemplo:
- Para dar permiso total (rwx) al dueño: 4+2+1 = 7
- Para dar lectura y ejecución (r-x): 4+0+1 = 5
- Para dar solo lectura (r--): 4+0+0 = 4
Así, cuando veas comandos como chmod 755, significa que el dueño tiene 7 (todo), el grupo tiene 5 (leer y ejecutar) y otros tienen 5 (leer y ejecutar).
Ejemplos de chmod que usarás a diario
Aquí tienes una tabla rápida con chmod ejemplos que te sacarán de apuros:
| Comando | Significado | Uso típico |
|---|---|---|
chmod 644 archivo.txt | Dueño: rw- / Grupo: r-- / Otros: r-- | Archivos de texto o imágenes en tu web. El dueño edita, el resto solo lee. |
chmod 755 carpeta | Dueño: rwx / Grupo: r-x / Otros: r-x | Directorios. Todos pueden entrar y ver, pero solo el dueño crea o borra. |
chmod 700 script.sh | Dueño: rwx / Grupo: --- / Otros: --- | Scripts privados. Solo tú puedes ejecutarlos y verlos. |
chmod 777 archivo | Dueño: rwx / Grupo: rwx / Otros: rwx | ¡PELIGRO! Todos pueden hacer de todo. Evítalo a toda costa en producción. |
[WARNING] Nunca uses
chmod 777en archivos de configuración o bases de datos. Es la puerta abierta para que cualquier usuario del sistema (o un atacante) modifique tu web. Si un plugin de WordPress te lo pide, es mejor buscar una alternativa más segura.
Uso recursivo: -R
Si necesitas cambiar los permisos de una carpeta y todo su contenido, usa la bandera -R (recursivo). Por ejemplo, para arreglar una carpeta de subidas:
chmod -R 755 /home/usuario/public_html
[INFO] Ten cuidado con
-R. Si lo aplicas a una carpeta con archivos que deben ser privados, los estarás exponiendo. Úsalo solo cuando sepas que toda la estructura necesita el mismo permiso.
chown: Cambiando la propiedad (¿De quién es este archivo?)
El comando chown (change owner) es igual de importante. No solo se trata de qué puedes hacer, sino de quién es el dueño. A veces, al subir archivos por FTP, el propietario pasa a ser tu usuario de FTP, pero el servidor web (Apache o Nginx) necesita ser el dueño para leer o escribir.
Sintaxis básica de chown
La estructura es: chown [nuevo_usuario]:[nuevo_grupo] archivo
- Para cambiar solo el usuario:
chown usuario archivo.txt - Para cambiar usuario y grupo:
chown usuario:grupo archivo.txt - Para cambiar solo el grupo:
chown :grupo archivo.txt
Ejemplos prácticos de chown linux
Imagina que tu web está en /home/miweb/public_html y el servidor web corre como www-data. Los comandos más comunes serían:
# Cambiar el dueño de toda la carpeta web al usuario del servidor
chown -R www-data:www-data /home/miweb/public_html
# Cambiar solo una carpeta de subida de archivos a un usuario específico
chown -R mi_usuario:mi_grupo /home/miweb/public_html/wp-content/uploads
[TIP] Si usas Syspanel para gestionar tus sitios, verás que él mismo maneja estos comandos en segundo plano. Pero saber hacerlo manualmente te da control total si decides migrar a un VPS.
umask: El filtro de permisos por defecto
Ahora que sabes cambiar permisos, ¿qué pasa cuando creas un archivo nuevo? No nace con permisos "aleatorios", sino que Linux aplica una máscara llamada umask. Esta máscara define qué permisos no tendrá un archivo recién creado.
¿Cómo funciona umask?
La umask es un valor que se resta de los permisos base (que son 666 para archivos y 777 para directorios). El valor más común en sistemas Linux es 022.
- Archivo:
666 - 022 = 644(dueño lee/escribe, resto solo lee). - Directorio:
777 - 022 = 755(dueño todo, resto lee/ejecuta).
Si tu umask fuera 077, los archivos nuevos serían 600 (solo el dueño puede leer/escribir), lo cual es muy seguro pero puede dar problemas si el servidor web necesita leerlos.
Ver y cambiar umask
Para ver tu umask actual, solo escribe:
umask
Para cambiarla temporalmente (en la sesión actual):
umask 022
Para hacer el cambio permanente, debes añadir la línea umask 022 al final del archivo ~/.bashrc o ~/.profile de tu usuario.
[WARNING] Si cambias la
umaska un valor como077, asegúrate de que tu servidor web (Apache/Nginx) puede acceder a los archivos. De lo contrario, tu web podría mostrar un error 500 o "Acceso denegado".
Problemas comunes y soluciones (FAQ)
Aquí tienes las dudas típicas de quien administra un servidor:
¿Por qué mi web da error 500 después de subir archivos?
Lo más probable es que los archivos tengan dueño incorrecto o permisos demasiado restrictivos. Solución: ejecuta chown -R para darle la propiedad al usuario del servidor web y chmod 644 a los archivos y chmod 755 a las carpetas.
¿Cómo hago que un script sea ejecutable?
Usa chmod +x script.sh. Si necesitas que otros usuarios lo ejecuten, usa chmod 755 script.sh.
¿Qué significa que un directorio necesite permiso de ejecución?
Si no tienes permiso x en un directorio, no puedes "entrar" con cd ni acceder a los archivos dentro, aunque tengas permiso de lectura. Es un error común al configurar usuarios de FTP.
¿Es seguro usar chmod 777 para una carpeta de subidas?
No es lo ideal. Un compromiso es usar chmod 755 y cambiar el grupo del directorio al grupo del servidor web. Otra opción es usar chmod 775 si el usuario y el grupo del servidor son los dueños.
Consejos finales para tu día a día como SysAdmin
Dominar estos comandos es como aprender a conducir: al principio parece mucho, pero luego se vuelve automático. Te dejo un resumen de buenas prácticas para que no falles:
- Principio de mínimo privilegio: Da solo los permisos necesarios. Si un archivo solo debe leerse, no le des escritura.
- Revisa siempre el dueño: Un
ls -lte dirá quién es el dueño. Si dudas, el dueño debe ser el usuario que ejecuta el servicio (por ejemplo,www-data). - Ten a mano la tabla numérica: Imprímela o guárdala.
644para archivos y755para directorios es la regla de oro para webs estáticas. - Cuidado con los scripts: Un script con permisos
777es un riesgo de seguridad. Úsalo solo en entornos de desarrollo local.
[TIP] Si gestionas varios sitios con Syspanel (recuerda, el puerto de acceso es el 2106), la mayoría de estas operaciones se hacen desde su interfaz web. Pero si alguna vez te falla el panel o necesitas hacer un ajuste fino por SSH, estos comandos serán tus mejores aliados.
En resumen, chmod controla qué se puede hacer, chown controla quién es el dueño y umask controla cómo nacen los archivos. Con esta guía, ya no volverás a sentirte perdido ante un error de permisos. Practica en un entorno de pruebas y verás que en poco tiempo lo harás sin pensar. ¡Mucha suerte y a por esos permisos!
