Linux.¿Me da usted su permiso?

Un ordenador lo pueden usar muchas personas y por eso se suele crear un usuario para cada persona que vaya a utilizarlo, es decir, uno para mi hermano, mi hermana, mi padre, mi madre, mi novia y yo.

Cuando arranca el ordenador, nos pide el usuario y la contraseña e iniciamos el usuario que nos toque. Evidentemente hay que tener un control de que cosas puedo hacer con mi usuario. No puedo acceder así como así a las cosas de mi novia y borrarle lo que quiera, le estropearía todo lo que esta haciendo y luego cualquiera la aguanta. Para controlar estas cosas están los permisos.

En Linux los permisos se establecen en 3 niveles:

  • Permisos del propietario. Cada archivo o directorio es de un propietario y solo éste o el usuario root puede cambiar el dueño y sus permisos.
  • Permisos para el grupo. Cada usuario puede pertenecer a uno o varios grupos y estos permisos afectan a los usuarios que estén dentro del mismo grupo que el propietario.
  • Permisos para otros. Aquí se trata de los permisos que tienen los demás usuarios y los grupos que faltan, es decir, los otros o el resto.

Antes observamos con detalle lo que hacía cuando ejecutábamos ls -all, voy a explicar con pelos y señales que significa toda esa información para saber como funcionan los permisos:

En la primera columna tenemos 10 caracteres muy interesantes:

El primer carácter nos indica que tipo de archivo es:

  • d. Es un carpeta o directorio.
  • El guion(-). Es un archivo normal.
  • c. Es un dispositivo orientado a carácter. Por ejemplo un archivo de control de puertos usb.
  • b. Es un dispositivo orientado a bloque. Por ejemplo un archivo o directorio para control de una unidad extraíble.
  • l. Es un enlace de un archivo o directorio.
  • Los 9 caracteres que faltan están orientados a los permisos.
  • Las siglas son r-leer, w-escribir y x-ejecutar. Se organizan en bloques de 3 caracteres; los 3 primeros para el propietario, los 3 siguientes para el grupo y los 3 últimos para los demás.

¡No me entero una mierda, por el amor de Dios usa un ejemplo!.

Vamos a escoger la segunda línea de la imagen y vamos a desmontarla para ver que quiere decir:

- d. Es un directorio o carpeta.

- Los 3 primeros caracteres son rwx. Es decir, que para el propietario se le va a permitir, leer (r), escribir (w) y ejecutar (x).

- Los 3 siguientes caracteres son r-x. Es decir, que para el grupo al que pertenece el propietario, que según la tercera columna es el grupo root, sus permisos son leer (r), escribir no se le permite (-) y si le permite ejecutar (x).

- Los 3 últimos caracteres son r-x. Para el resto de usuarios y grupos sus permisos son leer (r), no le permite escribir (-) y si ejecutar (x).

Si ahora resulta que con cualquier usuario que no sea root, intentamos borrar este archivo, no lo permitará y solo nos dejará verlo y ejecutarlo.

¡Genial! y visto todo esto…¿Como se usa?.

El comando que se utiliza para cambiar permisos a archivos y directorios es chmod. Vamos a echar un vistazo a las opciones que tiene el comando:

  • a. Se aplica a todo el mundo (all).
  • u. Se aplica solo al usuario (user).
  • g. Se aplica solo al grupo (group).
  • o. Se aplica a los demás (others).
  • +. Se añade permisos.
  • -. Se quita permisos.
  • r. Permiso de lectura.
  • w. Permiso de escritura.
  • x. Permiso de ejecución.

Vamos a ver algunos ejemplos:

chmod a+r ó +r <nombre del fichero> #Añadimos permiso de lectura a todo el mundo, es decir, propietario, grupos y otros.
chmod og-x <nombre del fichero> #Le quitamos permiso de ejecución a los grupos y a los demás, el propietario lo dejamos como está.
chmod u+rwx <nombre del fichero> #Le añadimos permisos de lectura, escritura y ejecución al propietario.
chmod o-rwx <nombre del fichero> #Le quitamos permisos de lectura, escritura y ejecución a los demás.

Existe otra forma de dar permisos a los archivos basándose en esta tabla:

  • 0 (***). No hay permisos.
  • 1 ( **x). Permiso sólo de ejecución.
  • 2 (*w*). Permiso sólo de escritura.
  • 3 (*wx). Permiso de escritura y ejecución.
  • 4 (r**). Permiso de solo lectura.
  • 5 (r*x). Permiso de lectura y ejecución.
  • 6 (rw*). Permioso de lectura y escritura.
  • 7 (rwx). Permiso de lectura, escritura y ejecución.

Fijándonos en esa tabla vamos a hacer unos ejemplos:

chmod 600 <archivo> #Esto quiere decir según la tabla, que al propietario le doy permiso de lectura y escritura, al grupo y a los demás no les doy ningún permiso.
chmod 411 <archivo> #Con esta instrucción le doy persmisos de lectura al propietario y permiso de ejecución al grupo y los demás.

Si prestamos atención usamos un número para cada nivel de permiso, es decir, propietario, grupos y lo demás.

Y si quiero cambiar el propietario, ¿Puedo hacerlo?.

El comando para hacerlo es chown. Este comando te permite cambiar el propietario del archivo, pero evidentemente para hacerlo debes ser root o el propio dueño del archivo que vamos a modificar:

chown <usuario> <archivo o carpeta> #Cambia el propietario.
chown -R <usuario> <archivo o carpeta>. Cambia el propietario al archivo o carpeta pero de forma recursiva, es decir, la carpeta principal y todos los archivos y subcarpetas que haya dentro.
chown <usuario:grupo> <nombre de archivo o carpeta> #Con esta instrucción cambiamos el usuario y el grupo al mismo tiempo con una sola línea.

¿Y que hay del Grupo?.

Se hace con el comando chgrp y funciona exactamente igual que con chown.

chgrp <grupo> <archivo o carpeta>

Continúa por Operaciones con archivos.