Por qué existen grupos, usuarios y permisos

En un sistema Linux, las carpetas y los archivos funcionan de manera que cada usuario tendrá acceso a ciertos archivos y directorios, de esta manera, un usuario no tiene porque ver los archivos o carpetas de otro usuarios.

Tan solo el administrador del sistema puede modificar los archivos o directorio de cualquier usuario. Esto previene que cualquier usuario pueda cambiar información crítica y estropear algo.

Superusuario

El superusuario, administrador del sistema, o simplemente el root, es un usuario especial que tiene privilegios para cambiar la configuración, borrar o crear ficheros en cualquier directorio, crear nuevos grupos y usuarios

NOTA: es peligroso trabajar como superusuario, se puede dañar el sistema de forma irreversible

Por lo que hemos dicho antes, un usuario sin privilegios no puede crear archivos en un directorio que no sea el suyo, le imprimirá un error en pantalla diciéndole permiso denegado. Para ello tenemos que crear los archivos o carpetas como administrador, para ello utilizamos el comando sudo, tras lo cual nos preguntará la clave del administrador. De esta manera si podremos crear archivos o directorios. Siempre nos preguntará la clave, ya que de otra forma cualquier usuario, mediante el comando sudo podría cambiar cualquier cosa.

Permisos

La información sobre grupos, usuarios y permisos se puede obtener mediante el comando ls junto con la opción -l.

Ejm

ls -l /usr/bin/whatis
-rwxr-xr-x 1 root root 87992 2022-12-27 14:04 /usr/bin/whatis

En la primera columna aparecen los permisos, en la tercera se indica el usuario (en este caso es el administrador del sistema) y en la cuarta aparece el nombre del grupo (que en este caso coincide con el de usuario). Veamos que significan exactamente los caracteres de la primera columna.

  • : tipo de fichero
  • rwx: permisos para el dueño del fichero
  • r-x: permisos para el grupo al que pertenece
  • r-x: permisos para el resto de usuarios

Ahora veamos el valor de cada letra que aparece:

  • r (read): permiso de lectura
  • w (write): permiso de escritura
  • x (execution): permiso de ejecución

El tipo de fichero se indica en la siguiente tabla:

  • l: enlace simbólico
  • c: dispositivo especial de caracteres
  • b: dispositivo especial de bloques
  • p: FIFO (estructura de datos)
  • s: socket (comunicaciones)
  • : ninguno de los anteriores, puede ser un fichero de texto, un binario…

En el caso que nos ocupa, tenemos un carácter «-» como tipo de fichero, pq se trata de un binario (un programa). El dueño del fichero tiene los permisos rwx, lo que quiere decir que puede leer, escribir y ejecutar el fichero. Que tiene permiso para escribir significa que puede borrarlo, cambiarle el nombre o editarlo. Tanto el grupo como el resto de usuarios tienen permisos r-x, lo que significa que pueden utilizarlo (pueden leerlo y ejecutarlo) pero no lo pueden modificar.

Quienes somos (whoami, groups)

Antes de empezar a crear usuarios, crear grupos y cambiar permisos, debemos saber quienes somos y a qué grupo o grupos pertenecemos. Aunque en principio entremos en el sistema como un determinado usuario, podemos utilizar su para ejecutar comandos como otro usuario distinto, siempre y cuando conozcamos la contraseña del otro usuario.

Ejm

$ whoami
francisco
$ su alumno
Contraseña:
$ whoami
alumno

Para volver a ser el usuario original basta con utilizar el comando exit.

Ejm

$whoami
alumno
$ exit
exit
$ whoami
francisco

Con el comando groups se puede ver a qué grupo pertenecemos

Ejm

$ groups

Se pueden identificar uno o más usuarios detrás de groups, lo que nos dirá a qué grupos pertenece cada uno de ellos.

Ejm

$ groups francisco root

Gestión de grupos (groupadd, groupdel, groupmod)

Los comandos groupadd, groupdel y groupmod permiten crear, borrar y modificar respectivamente grupos.

Ejm

Vamos a crear los grupos grupo_madrid, grupo_sevilla y grupo_lugo. La sintaxis es la siguiente

$ groupadd grupo_madrid

Nos va a dar un error, debemos tener privilegios, para ello utilizamos la siguiente sintaxis, colocando el comando sudo delante

$ sudo groupadd grupo_madrid
$ sudo groupadd grupo_sevilla
$ sudo groupadd grupo_lugo

Para rectificar el nombre de un grupo, por ejm el segundo (grupo_sevilla), utilizamos el comando groupmod, de la siguiente manera.

Ejm

$ sudo groupmod -n grupo_cordoba grupo_sevilla

Ahora debemos eliminar el grupo que acabamos de modificar (grupo_cordoba), para ello utilizamos el comando groupdel, de la siguiente forma

Ejm

$ sudo groupdel grupo_cordoba

Gestión de usuarios (adduser, userdel, usermod)

La gestión de usuarios, al igual que la de grupos, exige que los comandos se ejecuten con los privilegios de administrador del sistema. Se puede escribir sudo antes de cada comando, o se puede hacer lo siguiente.

$ sudo bash

Ahora el prompt cambia, en vez de aparecer una «$» aparece un «#». A partir de ahora todos los comandos se ejecutarán con privilegios de administrador del sistema. Hay que acordarse una vez creado todo, de volver al usuario en sí con el comando exit.

Vamos a dar de alta dos usuarios para grupo_madrid y uno para grupo_lugo y grupo_madrid, lo hacemos con la siguiente sintaxis.

Ejm

$ adduser pedro --ingroup grupo_madrid
$ adduser paco --ingroup grupo_madrid
$ adduser bea --ingroup grupo_lugo
$ adduser bea grupo_madrid

Hemos creado los usuarios y al mismo tiempo los hemos incluído dentro de los grupos correspondientes. Para añadir un usuario existente (el caso de Bea) a un grupo, se utiliza adduser sin opciones.

NOTA: es importante recalcar que se ha utilizado el comando adduser y no useradd. Este último se considera un comando de bajo nivel y se recomienda usar el primero.

Al crear los usuarios se nos ha pedido las claves (contraseñas), no obstante estas claves se pueden cambiar con el comando passwd.

Hay que recordar salir del modo root cuando ya no sea necesario, con el comando exit. De ahora en adelante, simplemente se indicará con el carácter “$” que se trabaja como usuario sin privilegios y con el carácter “#” que se trabaja como root.

Cabe señalar que para cada usuario, se crea por defecto un directorio dentro de /home. Cuando un usuario se conecta al sistema, “aterriza” en ese directorio. Es lo que hemos denominado anteriormente como el directorio de trabajo.

$ ls /home/

Cambio de grupo y de dueño

Imaginemos que el fichero informe.txt ha sido creado por el usuario pedro. Por defecto, el dueño de un archivo es el usuario que lo crea, en este caso pedro. El grupo del usuario pedro, como hemos visto antes es grupo_madrid.

$ su pedro
pedro
$ pwd
/home/pedro
$touch informe.txt
$ ls -l

Todo ello se puede cambiar, movemos el fichero al directorio de trabajo del usuario Bea y le cambiamos de dueño.

$ mv informe.txt /home/Bea/
$ cd /home/Bea/
$ chown Bea informe.txt
$ ls -l

Cambios de privilegios (chmod)

El comando chmod sirve para cambiar los permisos de uno o varios ficheros. Esos mismos permisos que se pueden ver con ls -l.

Ejm

$ ls -l
$ chmod +x informe.txt
$ ls -l

Hemos añadido el permiso de ejecución al fichero informe.txt. Veremos que ahora hay 3 x, la que corresponde al dueño del fichero, la que corresponde al grupo y la que corresponde al resto de usuarios.

Cuando no se especifica ninguna de estas tres letras correspondientes a los usuarios (u, g, o) como en el ejm anterior, se sobreentiende que nos referimos a todos ellos. Se puede indicar de forma explícita con el carácter all.

u g o +
r w x
(user) dueño del fichero (group) usuarios que pertenecen al mismo grupo (others) el resto de usuarios dar permiso / quitar permiso (read) lectura (write) escritura (execution) ejecución

Ahora quitamos el permiso de ejecución para el resto de usuarios (other) y damos permiso de escritura (write) a los usuarios del mismo grupo (group).

Ejm

$ chmod o-x informe.txt
$ chmod g+w informe.txt

A este método que utiliza los caracteres rwx se le denomina método simbólico. Podemos utilizar de forma análoga el método numérico.

4 2 1 Total
r w x 4 + 2 + 1 = 7
r w – 4 + 2 + 0 = 6
r – x 4 + 0 + 1 = 5
r – – 4 + 0 + 0 = 4
– w x 0 + 2 + 1 = 3
– w – 0 + 2 + 0 =2
– – x 0 + 0 + 1 = 1

De esta forma

$ chmod 755 informe.txt

será equiivalente a

$ chmod u+rwx informe.txt
$ chmod g+rx-w informte.txt
$ chmod o+rx-w informe.txt

Los permisos de los directorios se pueden cambiar de la misma forma que los ficheros, aunque el significado es algo diferente. Si un directorio tiene el permiso de lectura, quiere decir que se puede ver su contenido. Si tiene permiso de escritura, quiere decir que se pueden crear ficheros dentro, y si tiene permiso de ejecución quiere decir que se puede entrar dentro (sólamente).

Resumen

Los comandos vistos en este capítulo son:

  • ls -l: muestra entre otras cosas información sobre los permisos, el usuario y el grupo al que pertenece el fichero.
  • sudo: permite ejecutar comandos como root.
  • su: cambia de usuario.
  • whoami: muestra el nombre del usuario actual.
  • groups: muestra el/los grupo/s a los que pertenece el usuario actual.
  • groupadd: añade un grupo nuevo.
  • groupdel: borra un grupo.
  • groupmod: modifica las características de un grupo.
  • adduser: añade un nuevo usuario.
  • userdel: borra un usuario.
  • usermod: modifica las características de un usuario.
  • passwd: asigna o cambia la clave de un usuario.
  • chown: cambia el dueño de un archivo.
  • chgrp: cambia el grupo al que pertenece un archivo.
  • chmod: cambia los permisos de un archivo.