chmod
Cambia quién puede leer, escribir o ejecutar un archivo o carpeta.
Sirve para definir quién puede leer, escribir o ejecutar un archivo o carpeta. Lo usas cuando un script no corre por falta de permiso de ejecución, o cuando quieres limitar quién puede modificar algo.
chmod [opciones] MODO ARCHIVO...chmod -R sobre carpetas del sistema (/, /etc, /usr, /var) puede romper el sistema: sudo, SSH y muchos servicios revisan sus permisos y dejan de funcionar si cambian. chmod -R 777 además deja que cualquier usuario modifique esos archivos, un hueco de seguridad grave.
Despiece
6 ejemplosHacer ejecutable un script
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | chmod | Comando | El comando para cambiar permisos. |
| 2 | 755 | Valor | 7 para ti (leer, escribir y ejecutar), 5 para el grupo y 5 para los demás (leer y ejecutar). |
| 3 | script.sh | Argumento | El archivo al que le cambias los permisos. |
Tú puedes editar y ejecutar el script; los demás solo pueden leerlo y ejecutarlo.
Dar permiso de ejecución a todos
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | chmod | Comando | El comando para cambiar permisos. |
| 2 | +x | Valor | Agrega el permiso de ejecución sin tocar los demás permisos. |
| 3 | script.sh | Argumento | El archivo al que le agregas la ejecución. |
El script ya se puede correr con ./script.sh. Sin letra antes del +, la ejecución se agrega para el dueño, el grupo y los demás (salvo lo que bloquee tu umask).
Quitar la escritura a todos
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | chmod | Comando | El comando para cambiar permisos. |
| 2 | a-w | Valor | a significa todos; -w quita el permiso de escritura. |
| 3 | archivo.txt | Argumento | El archivo al que le quitas la escritura. |
Nadie puede modificar el archivo, salvo root. Como dueño, puedes devolverte el permiso con chmod u+w archivo.txt.
Dar escritura al grupo
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | chmod | Comando | El comando para cambiar permisos. |
| 2 | g+w | Valor | g es el grupo; +w agrega el permiso de escritura. |
| 3 | archivo.txt | Argumento | El archivo al que le das escritura al grupo. |
Las personas del grupo pueden editar el archivo.
Cambiar permisos de una carpeta y su contenido
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | chmod | Comando | El comando para cambiar permisos. |
| 2 | -R | Opción | Recursivo: aplica el cambio a la carpeta y a todo lo de adentro. |
| 3 | 755 | Valor | 7 para ti (todo), 5 para el grupo y 5 para los demás (leer y ejecutar). |
| 4 | scripts/ | Argumento | La carpeta cuyo contenido queda con permisos 755. |
La carpeta, sus archivos y subcarpetas quedan con permisos 755. Ojo: eso vuelve ejecutables todos los archivos, también los que no son programas. Para dar x solo a las carpetas usa chmod -R u=rwX,go=rX scripts/ (la X mayúscula da ejecución solo a las carpetas y a lo que ya era ejecutable).
Copiar los permisos de otro archivo
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | chmod | Comando | El comando para cambiar permisos. |
| 2 | --reference=modelo.txt | Opción | Toma los permisos de modelo.txt. |
| 3 | archivo.txt | Argumento | El archivo que queda con los permisos de modelo.txt. |
archivo.txt queda con exactamente los mismos permisos que modelo.txt.
Calculadora de permisos
Cada fila suma sus teclas: leer vale 4, escribir 2 y ejecutar 1. Las tres sumas forman el número.
Opciones
Las que sí vas a usar| Opción | Qué hace |
|---|---|
| -R--recursive | Aplica el cambio a la carpeta y todo lo que tiene dentro. |
| -v--verbose | Muestra un mensaje por cada archivo al que le cambia permisos. |
| -c--changes | Solo muestra mensajes cuando el permiso cambia de verdad. |
| -f--silent | Oculta la mayoría de los mensajes de error, por ejemplo cuando no puedes cambiar un archivo. |
| --reference=ARCHIVO | Copia los permisos de otro archivo en vez de usar un número. |
Fallas comunes
| Falla | Remedio |
|---|---|
| Usar chmod 777 para arreglar un error de permisos. | Da solo el permiso que falta. 777 deja que cualquiera modifique el archivo. |
| Invertir el orden y escribir primero el archivo. | El orden es siempre chmod MODO ARCHIVO. Escribe chmod 755 script.sh, no chmod script.sh 755. |
| Olvidar -R al cambiar permisos de una carpeta. | chmod 755 carpeta solo cambia la carpeta, no lo que tiene dentro. Agrega -R para todo el árbol, pero recuerda que -R 755 vuelve ejecutables todos los archivos; chmod -R u=rwX,go=rX carpeta lo evita. |
Preguntas frecuentes
- ¿Qué significa chmod 755?
- El 7 es para el dueño, que puede leer, escribir y ejecutar. El 5 es para el grupo y el 5 para los demás, que solo pueden leer y ejecutar. Es el modo típico para scripts y programas compartidos.
- ¿Cómo hago un archivo ejecutable?
- Escribe chmod +x archivo o chmod 755 archivo. Con +x agregas el permiso de ejecución sin tocar los demás; con 755 lo dejas definido para ti, el grupo y los demás.
- ¿Cuál es la diferencia entre chmod 777 y chmod 755?
- 777 da lectura, escritura y ejecución a todos los usuarios, así que cualquiera puede modificar el archivo. Con 755 solo el dueño puede escribir; el grupo y los demás pueden leer y ejecutar. Para scripts usa 755.
- ¿Qué significa +x en chmod?
- +x agrega el permiso de ejecución (execute) sin cambiar el resto. Como no dice para quién, se aplica al dueño, al grupo y a los demás, salvo lo que bloquee tu umask. Si solo lo quieres para ti, usa u+x.
- ¿Cómo cambio permisos a una carpeta y todo lo que contiene?
- Usa la opción -R: chmod -R 755 carpeta cambia la carpeta, sus archivos y subcarpetas de una sola vez. Como eso vuelve ejecutables todos los archivos, muchas veces conviene más chmod -R u=rwX,go=rX carpeta, que da x solo a las carpetas y a lo que ya era ejecutable.