chmod con Bash

Comando chmod para Linux

El comando chmod (change mode) se utiliza para modificar el modo de acceso a un archivo o directorio. Determina qué acciones van a poder realizar los diferentes usuarios del sistema con éste (lectura → r, escritura → w y ejecución → x).

Hay que tener muy en cuenta que los usuarios que dispongan de permiso de escritura (w) en un archivo o directorio podrán modificar sus permisos.

chmod [opciones] permisos archivo/directorio

Antes de avanzar debemos conocer la forma que existe para ver cuáles son los permisos que tiene un archivo o directorio.

Permisos de un fichero

Inmediatamente después de haber creado un fichero podemos hacer un listado ls -l para ver los permisos de los que disponemos sobre este fichero.

Ver permisos de nuevo.txt con el comando ls -l

La información que nos muestra el listado es esta: -rw-r–r– 1 kali kali 0 Jul 24 07:07 nuevo.txt, aunque nosotros por ahora solo vamos a tener en cuenta para los permisos la primera parte. Parte que separaremos en cuatro nuevas partes.

-rw-r--r--
- rw- r-- r--

La información que hemos separado la volvemos a separar de la siguiente forma.

-   # Indica que es un fichero
rw- # Permisos para usuario propietario de lectura y escritura
r-- # Permiso para grupo de lectura
r-- # Permiso para otros usuarios de lectura

Separando de esta forma, no es muy complicado entender que nuestro fichero nuevo.txt brinda acceso de lectura y escritura al usuario propietario (rw), de solo lectura (r) al grupo al que pertenece y de solo lectura (r) al resto de usuarios del sistema.

Modificando permisos con chmod en Bash

Después de conocer la forma para ver los permisos que tienen los ficheros y directorios vamos a pasar a modificarlos. Ahora por fin entra en juego el comando chmod de Linux.

Como para casi todo en el mundo de la programación, disponemos de diferentes formas de hacerlo.

Empezaremos por la notación simbólica que me resulta más sencilla.

chmod con notación simbólica en Bash

Para modificar permisos de esta forma debemos conocer esta pequeña tabla de letras y símbolos.

uUsuario
gGrupo
oOtros
aTodos (equivale a ugo)
+Agrega permisos
Quita permisos
=Asigna permiso
rLectura (read)
wEscritura (write)
xEjecución (execute)

Veremos algunos ejemplos agregando y quitando permisos con este método para ver qué sencillo es.

Recordamos los permisos de nuevo.txt.

-rw-r--r-- 1 kali kali 0 Jul 24 07:07 nuevo.txt

-   # Indica que es un fichero
rw- # Permisos para usuario propietario de lectura y escritura
r-- # Permiso para grupo de lectura
r-- # Permiso para otros usuarios de lectura

Si nos fijamos en los permisos para el usuario propietario (u) podemos ver que le falta el permiso de ejecución (x). Únicamente dispone de lectura y escritura (rw).

Vamos a dárselo haciendo uso del comando chmod de Bash.
Indicando que al usuario (u) le agregamos (+) el permiso de ejecución (x) → u+x.

chmod u+x nuevo.txt

Ahora podemos apreciar el cambio en los permisos. Se agregó el permiso de ejecución (x) para el usuario propietario.

- rw- r-- r-- # Antes
- rwx r-- r-- # Ahora
Agregando permiso de ejecución con chmod

Ahora agregaremos permiso de escritura (w) para Grupo (g) y para Otros (o).

Volvemos a dárselo haciendo uso del comando chmod de Bash.
Indicando que a grupo (g) y otros (o) le agregamos (+) el permiso de escritura (w) → go+w.

chmod go+w nuevo.txt

Vemos el cambio en el listado ls -l nuevamente.

- rwx r-- r-- # Antes
- rwx rw- rw- # Ahora
Agregando permiso de escritura con chmod

Para quitar permisos de esta forma, debemos colocar el símbolo () en vez del más (+) e indicar de la misma forma a quién queremos quitárselos.

Vamos a eliminar a otros (o) el permiso de escritura (w).

Le indicamos que a otros (o) le quitaremos () el permiso de escritura (w) → o-w.

chmod o-w nuevo.txt

De esta forma podemos agregar y quitar permisos según nuestras necesidades haciendo uso del comando chmod.

Asignando permisos a todos a la vez

Con el símbolo de igual = podemos asignar permisos de forma muy sencilla. Esta forma es bastante directa y afecta únicamente al tipo de usuarios que indiquemos.

Con este ejemplo vamos a quitar cualquier permiso que tuviese otros (o) para asignarle únicamente el de lectura (r).

chmod o=r nuevo.txt

No importa los permisos que tuviese asignados con anterioridad, si le indicamos chmod o=r, formatea los permisos que tuviese ya asignados para otros (o) y le coloca únicamente el de lectura (r).

Podemos formatear los permisos que tenga anteriormente grupo (g) y asignar el de lectura (r) y ejecución (x) de la siguiente forma.

chmod g=rx nuevo.txt

Cuando modificamos los permisos de esta forma solo podemos hacer referencia a un tipo de usuarios de nuestro sistema a la vez, ya sea al usuario propietario (u), al grupo (g) o al resto de usuarios (o).

Si queremos realizar cambios a todos a la vez lo hacemos con (a). Vamos a hacer que todos los tipos de usuarios de nuestro sistema tengan únicamente permisos de lectura y escritura.

chmod a=rw nuevo.txt

- rw- rw- rw-

chmod con notación octal en Bash

Esta forma de manejar los permisos chmod con notación octal puede resultar algo más complicada si no se tiene conocimientos sobre números binarios y el sistema octal.

Para la forma octal no utilizaremos ni símbolos ni letras para manejar los permisos, trabajaremos con esta tabla.

1Ejecución (x)
2Escritura (w)
4Lectura (r)

Para verlo claramente vamos a dar permisos de lectura, escritura y ejecución a un fichero. Daremos el máximo de permisos posibles al usuario (u), al grupo (g) y a otros (o). Tendremos que colocar un 7 (de 4 + 2 + 1) para cada. Quedando de la siguiente forma:

  • 7 resultado de sumar (1 + 2 + 4) → Ejecución, Escritura y Lectura para usuario propietario (u).
  • 7 resultado de sumar (1 + 2 + 4) → Ejecución, Escritura y Lectura para grupo (g).
  • 7 resultado de sumar (1 + 2 + 4) → Ejecución, Escritura y Lectura para otros (o).
chmod 777 nuevo.txt

Los permisos para nuestro fichero permitirían acceso de lectura, escritura y ejecución para todos los usuarios del sistema.

- rwx rwx rwx
Asignando permisos con chmod 777 a un fichero

Para verlo más claro, vamos a quitar el permiso de ejecución a todos los usuarios del sistema excepto al usuario propietario (u).

Siguiendo los valores de la tabla anterior realizamos la suma.

  • 7 resultado de sumar (1 + 2 + 4) → Ejecución, Escritura y Lectura para usuario propietario (u).
  • 6 resultado de sumar (2 + 4) → Escritura y Lectura para grupo (g).
  • 6 resultado de sumar (2 + 4) → Escritura y Lectura para otros (o).
chmod 766 nuevo.txt
- rwx rw- rw-
Asignando permisos con chmod 766 a un fichero

Otro ejemplo más en el que necesitamos eliminar todos los permisos al grupo (g) y a otros (o) excepto el de lectura (r).

Realizamos la suma nuevamente basándonos como siempre en la tabla.

  • 7 resultado de sumar (1 + 2 + 4) → Ejecución, Escritura y Lectura para usuario propietario (u).
  • 4 resultado de sumar (4) → Lectura para grupo (g).
  • 4 resultado de sumar (4) → Lectura para otros (o).
chmod 744 nuevo.txt
- rwx r-- r--

Curiosidad binaria para los permisos

Como indica el título esto no hace falta saberlo para modificar permisos con chmod, es simplemente una curiosidad.

¿De dónde salen los números 4, 2 y 1 para realizar las sumas?

Tabla binaria.

LecturaEscrituraEjecuciónValor
4 = 2^22 = 2^11 = 2^0
0000
1004
0102
0011

De esta forma si queremos que el permiso para el grupo (g) sea de lectura y ejecución tendremos la siguiente tabla.

Valor LecturaValor EscrituraValor EjecuciónTotal para (g)
4015

Debemos hacer una tabla para usuario (u), otra para grupo (g) y otra para otros (o) y así obtener los tres valores.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *