Chmod y permisos de archivos en Linux

Introducción

Linux es un sistema operativo robusto y poderoso. Permite cambiar los permisos de los archivos y directorios para que sólo algunos usuarios puedan leerlos, escribirlos o ejecutarlos. Hoy veremos una pequeña introducción a chmod y permisos de archivos en Linux

¿Qué es chmod y permisos de archivos en Linux?

Es un comando que permite cambiar los permisos de un archivo o directorio.

¿Permisos a quién?

Los permisos se dividen en 3 partes, y son:

  • usuario (el dueño, también conocido como owner. Es el creador del archivo)
  • grupo (el grupo al que pertenece el archivo)
  • resto del mundo (los que no son ninguno de los dos de arriba)

¿Cuáles permisos?

Los permisos que existen son 3:

  • Lectura (r o read): leer el archivo, o verlo
  • Escritura (w o write): eliminar o editar el archivo
  • Ejecución (x o eXecute): ejecutar el archivo en caso de que sea un ejecutable o script

¿Cómo se asignan los permisos?

La sintaxis básica es:

chmod NIVEL_DE_PERMISOS NOMBRE_DE_ARCHIVO_O_DIRECTORIO

Sin que sepas nada de este comando, aquí hay un ejemplo que le da todos los permisos a todos los grupos al fichero index.php:

chmod 777 index.php

Y aquí uno que quita todos los permisos a todos los grupos:

chmod 000 index.php

En este caso 777 y 000 son los permisos que le asignamos al archivo. Sigue leyendo para que entiendas cómo funcionan.

Explicación de permisos

Modo octal

Este modo es el que usamos arriba y es con números. Es octal porque está en base octal, o sea, va del 0 al 7. Tenemos por ejemplo este número:

777

El primer 7 es para el usuario. El segundo es para el grupo y el tercero para el resto del mundo. O sea que en este…

750

El 7 es para el usuario, el 5 para el grupo y el 0 para el resto del mundo.

¿Y cómo sale el 7, el 5 o el 0, y todos los demás números?

Cada número se divide de nuevo en 3 permisos que son RWX como se vio arriba. Siempre van en ese orden. Ahora practiquemos un poco de binario y recordemos que son ceros o unos.

Son 3 bits. El de la derecha es el LSB y vale 1. El del centro vale 2 y el de la izquierda (que por cierto es el MSB) 4. Al sumarlos, nos dará siempre un número octal.

Entonces si un bit está en 1, suma el valor. Si no, no pasa nada. Así:

Octal a decimal para entender Chmod y permisos de archivos en Linux
Octal a decimal para entender Chmod y permisos de archivos en Linux

No te confundas. Veamos lo que está en verde. Primero tenemos a 111, y hasta arriba de color amarillo el 4, el 2 y el 1.

Si está en 1, se suma dicho valor. Y si no, no. Como en este caso los 3 están en uno, sumamos 4 + 2 + 1 = 7 y por eso vale siete

Sigamos con el ejemplo y ahora vamos a la segunda fila. Es 101 y por lo tanto está 4 y 1, ya que el de 2 está en 0. Por lo tanto 4 + 1 = 5

En el penúltimo tenemos 000 así que suma a 0. Y finalmente tenemos que no está 4 ni 2, sólo 1. Así que suma 1.

Ahora míralo así:

Read, Write y Execute con Chmod y permisos de archivos en Linux
Read, Write y Execute con Chmod y permisos de archivos en Linux

Si queremos que tenga permiso para leer, dejamos el primer bit en 1. Si queremos que para escribir, dejamos el segundo bit en 1 y si queremos que ejecute dejamos el tercer bit en 1. Por lo tanto…

Si queremos que sólo lea, pero no escriba ni ejecute, el valor sería 4.

Ahora, ese valor va por cada grupo. Más abajo veremos ejemplos…

Ejemplos

Quiero que el usuario o dueño tenga todos los permisos, el grupo sólo lea y el resto del mundo no haga nada.

Comencemos por el usuario. Como tendrá todos los permisos su valor es 7. Ahora para el grupo cómo sólo va a leer tendrá el valor 100 que se traduce a 4 en octal. Y el resto del mundo no hará nada así que queda en 0.

Finalmente el número queda así:

740

Y lo aplicamos al archivo hola.txt así:

chmod 740 hola.txt

Y así es como funciona. Por cierto, si queremos que sea un directorio lo hacemos con -R así:

chmod 740 -R fotos

Lo que haría el comando de arriba sería asignarle al directorio llamado fotos (y a todo su contenido, cuidado con esto) esos permisos.

Modo letras

Este me parece más fácil y si no te gusta el octal esta es tu oportunidad. Ahora utilizamos las letras de rwx así como son, y las letras u, g y o.

  • u quiere decir usuario, es el dueño
  • g quiere decir grupo
  • o quiere decir el resto del mundo

No te espantes, es más fácil de lo que parece. Si quieres que tenga un permiso, lo pones. Y si no, no. Por ejemplo, esto:

u=rw

Le dice a chmod que el usuario puede sólo leer y escribir, más no ejecutar. En cambio esto:

u=rwx

Le dice a chmod que el usuario puede leer, escribir y ejecutar. Y esto:

u=

Le dice a chmod que el usuario no puede hacer nada, o sea, no leer, no escribir y no ejecutar. Lo mismo para el grupo.

Por ejemplo, si queremos que el grupo tenga todos los permisos:

g=rwx

Y si queremos que el resto del mundo sólo pueda leer:

o=r

Ahora veamos ejemplos

Ejemplos

Quiero que el usuario o dueño tenga todos los permisos, el grupo sólo lea y el resto del mundo no haga nada.

Entonces quedará con u=rwx para el usuario. Luego g=r porque el grupo sólo lee y finalmente o= porque el resto del mundo no hará nada.

Lo aplicamos al archivo hola.txt así:

chmod u=rwx,g=w,o= hola.txt

Como se puede observar, separamos por comas a cada sección. Y si queremos que sea un directorio con todo su contenido lo hacemos con -R

chmod -R u=rwx,g=w,o= tareas

Con eso tenemos.

Sudo

Cabe mencionar que si queremos asignar los permisos y no somos los dueños, se nos denegará. Para ello, si tenemos acceso root escribirmos “sudo” antes de chmod.

Bonus: calculadora chmod

Si no entiendes o quieres probar en vivo, cambiando permisos a tu gusto y viendo el comando que generaría, te invito a probar una calculadora chmod que genera comandos dependiendo de lo que elijas: generador de comandos chmod

Bonus 2: ejercicios resueltos

También puedes ver una serie de ejercicios resueltos: Ejercicios resueltos con chmod, chgrp y chown.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

2 comentarios en “Chmod y permisos de archivos en Linux”

  1. Pingback: Crear carpeta si no existe en Golang - Parzibyte's blog

  2. Pingback: Ejercicios resueltos con chown, chgrp y chmod en Linux - Parzibyte's blog

Dejar un comentario