USUARIOS Y GRUPOS

Linux es un sistema operativo multiusuario. Tenemos 3 tipos de usuario principales:

  • Usuario root.
    También llamado superusuario o administrador. Es el único usuario con todos los privilegios. Tiene acceso total sobre todos los directorios, puede instalar software, actualizar el sistema, reiniciar, crear y gestionar nuevos usuarios...
  • Usuarios especiales o del sistema.
    Son un tipo de usuario que no pueden iniciar sesión. Se crean automaticamente en el momento de instalar el sistema o alguna aplicación. Algunos ejemplos de usuarios especiales: bin, ftp, apache, mysql...
  • Usuarios normales.
    Son los usuarios individuales del sistema con priviligios solamente para su directorio de trabajo HOME. Por seguridad, se evita usar el usuario root para tareas administrativas. Para ello se otorgan permisos de administrador a un usuario normal. Para poder realizar esas tareas se usa la palabra sudo que viene de Super Usuario Hacer (super user do)

Todos los usuarios tienen un ID único, llamado UID. El usuario root es el 0, los usuarios del sistema van entre 1 y 999. El valor mas alto de UID puede cambiar entre distribuciones o versiones (te comento que en mis equipos a fecha de hoy sale 999). Por último, los usuarios normales van a continuación del UID mas alto. En mi caso, a partir del 1000.

Además, todos los usuarios pertenecen a un grupo principal y opcionalmente pueden tener uno o mas grupos secundarios. Los grupos también tienen su ID, llamado GID (de group ID). Los grupos es una forma muy eficaz de dar los mismos priviligios a bloques de usuarios.

Como ves, el sistema es muy clasista otorgando solo los privilegios mínimos requeridos para cada usuario. La creación de usuarios y grupos, como habrás supuesto, está reservada al root o a usuarios con permisos administradores (grupo sudo).

El archivo de los usuarios. /etc/passwd

Todos los usuarios se encuentran registrados en el archivo /etc/passwd. Echando un vistazo a este archivo veremos una larga lista de usarios. El primero mostrado será root, luego los usuarios del sistema y por último los usuarios normales. Al tratarse de un archivo del sistema para poder verlo tendremos que anteponer sudo al comando que uses para ver archivos de texto (cat, more, less,..). Si usamos el usuario root no sería necesario utilizar sudo. Sin embargo, lo correcto es, siempre que se pueda, evitar el uso de root y hacer uso de otros usuarios con permisos sudo

root:x:0:0:root:/root:/bin/bash
.
.
.
ftp:x:115:65534::/srv/ftp:/usr/sbin/nologin .
.
.
pedro:x:1001:1001:Pedro,,,:/home/pedro:/bin/bash
usuario2:x:1002:1002:usuario2,,,:/home/usuario2:/bin/bash
usuario1:x:1003:1003:Fulano de Tal,123,555555,444444,nada:/home/usuario1:/bin/bash

La información mostrada se divide en 7 campos separados por : El contenido de estos campos queda así:

  • Nombre del usuario, debe ser único.
  • Contraseña del usuario. Solo vemos una X. En tiempos pasados la contraseña estaba aquí visible pero por seguridad ahora se encuentra encriptada en el archivo /etc/shadow.
  • UID, número ID del usuario.
  • GID, número ID del grupo principal
  • Aquí vienen varios comentarios con info opcional del usuario. Si se rellenó en el momento de dar de alta el usuario puedo aparecer nombre completo, teléfono y otros datos.
  • Directorio de trabajo (Home)
  • Shell que usará de forma predeterminada. Los usuarios especiales no tienen shell, mostrará nologin o /bin/false. El root y los usuarios normales tendrán bash o algún otro shell

Vamos a mirar el archivo /etc/shadow. Copiaré un fragmento de mi VPS:

ftp:*:18873:0:99999:7:::
usuario1:$6$A8f5UGhJ$YpAn/kA0WpWcQGTx82C6H/lc3CIpIk0WpWcQGTx4wFD2.7SvfX/Gi19neg7C/mpifYsdaUVNJu0

Los usuarios que puedan iniciar sesión tendrán aquí la contraseña encriptada. Los usuarios de sistema sin contraseña mostrarán *

Por medio del filtro cut podemos listar /etc/passwd para que muestre solamente el nombre de los usuarios.

cat /etc/passwd | cut -d":" -f1

Crear usuarios. Comando adduser

Para crear un nuevo usuario la forma más simple es:

adduser nombre_usuario

Con un asistente creará un nuevo usuario con ese nombre:

sudo adduser usuario1
[sudo] password for pedro:
Adding user `usuario1' ...
Adding new group `usuario1' (1003) ...
Adding new user `usuario1' (1003) with group `usuario1' ...
Creating home directory `/home/usuario1' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for usuario1
Enter the new value, or press ENTER for the default
Full Name []: Fulano de Tal
Room Number []: 123
Work Phone []: 555555
Home Phone []: 444444
Other []: nada
Is the information correct? [Y/n] y

Como ves, el asistente nos guía pidiendo los datos necesarios y mostrando las operaciones realizadas:

  • Como es una tarea de administrador, pide que entremos contraseña del usuario con permisos sudo.
  • Añade el usuario.
  • Crea un grupo con el mismo nombre y añade el usuario a este grupo. Este será el grupo principal.
  • Crea el directorio de trabajo /Home/usuario1
  • El siguiente paso es un poco especial. Si tenemos que crear muchos usuarios que tengan ciertos archivos comunes en su directorio Home, los copiamos previamente en /etc/skel y al crear cada nuevo usuario se copiarán en su Home
  • Pide la contraseña para este usuario.
  • Los siguientes datos son opcionales, podemos poner comentarios del usuario como nombre completo, teléfono,...
  • Por último, confirmamos y ya estará creado.

Por medio de parámetros es posible indicar por adelantado algunos de estos datos. Así podemos indicar el grupo o grupos al que pertenece, cual será su carpeta de trabajo o si queremos que no tenga. Otra posibilidad es que el usuario creado no tenga la opción de iniciar sesión. Esto es útil cuando se trata de usuarios del sistema. No necesitan interacción por parte de ningún usuario para arrancar y funcionar. Se les suele llamar demonios o deamons. El servicio web Apache o Nginx son buenos ejemplos de demonios.

Los parámetros más importantes o, al menos, los más comunes en mi opinión, para usar con adduser son:

  • --ingroupcreará el usuario solo en el grupo indicado
  • --homedirectorio de trabajo o Home, si no existe la carpeta la creará.

Con man adduser tienes una lista muy extensa de parámetros según el tipo de usuario a crear.

adduser [options] [--home DIR] [--shell SHELL] [--no-create-home] [--uid ID] [--firstuid ID] [--lastuid ID] [--ingroup GROUP | --gid ID] [--disabled-password] [--disabled-login] [--gecos GECOS] [--add_extra_groups] [--encrypt-home] user

Para demostrar, aquí algunos ejemplos probados en una de mis máquinas con Ubuntu:

#crea un usuario y lo añade al grupo tecnicos. El grupo debe existir o dará un error.
sudo adduser --ingroup tecnicos nombre1

#crea un usuario y la carpeta /home/midirectorio.
sudo adduser --home /home/midirectorio nombre2

# crear usuario, -m con carpeta /home/nombre de usuario, sin shell ni login, del grupo especificado
sudo useradd -m -s /sbin/nologin -g usuariosftp usuarioftp1

Por defecto, si el usuario creado tiene carpeta Home, está se llamará igual que el usuario salvo que se especifique otro nombre con --home

Eliminar usuario. Comando deluser

Este comando se puede usar sin parámetro. Elinará el usuario indicado sin borrar su carpeta Home

sudo deluser nombreusuario

Para borrar también la carpeta Home añadimos el parámetro –r

sudo userdel –r nombredeusuario

En cualquier caso, no eliminará ningún grupo a los que pertenezcan los usuarios

Cambiar password a un usuario. Comando passwd

El comando passwd cambia el password del usuario que tenga la sesión abierta.

Un usuario con permisos sudo puede cambiar la contraseña de cualquier usuario. Vemos un ejemplo donde desde el usuario pedro se cambia la contraseña del usuario juan

pedro@tallerdeapps:~$ sudo passwd juan
[sudo] password for pedro:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

Crear grupos. Comando groupadd

Para crear grupos usamos groupadd. Por supuesto con sudo o usuario root.

groupadd nombregrupo

Modificando grupos de los usuarios y otras características. Comando usermod

Para añadir un grupo a un usuario existente usamos el comando usermod. Si queremos añadir un solo grupo necesitamos usar el parámetro -g. También podemos añadir varios grupos a la vez separados por comas. En este caso usaremos el parámetro -aG. Es obligatorio que existan los grupos o dará error.

#agregar un grupo
sudo usermod -g tecnicos usuario2

#agregar varios grupos
sudo usermod -aG tecnicos,almacen usuario2

El comando usermod no solo se usa para añadir grupos. En la ayuda man usermod tienes la lista completa de parámetros y que valor se puede cambiar. Por citar algunas se puede cambiar la fecha de expiración, cambiar el directorio Home, el nombre, el UID,...

Ver grupos de un usuario. Comando groups

Tenemos un comando específico para ello que imprime los grupos del usuario especificado.

[root@tallerdeapps /]# groups usuario2
usuario2 : usuario2 sudo

El archivo de los grupos. /etc/group

Otro forma de saber los grupos es con el archivo /etc/group donde tenemos una gran lista de todos los grupos y a que usuarios pertenecen. Podemos filtrar con grep para que muestre un usuario partícular.

# mostrar los grupos del usuario pedro pedro@tallerdeapps:~$ cat /etc/group | grep pedro
sudo:x:27:pedro,usuario2
pedro:x:1001:
docker:x:999:pedro

Quitar grupo de un usario. Comando deluser

Para quitar un grupo de un usuario tenemos el comando deluser. El grupo a quitar no puede ser el primario o dará error.

sudo deluser usuario grupo

Borrar grupos. Comando groupdel

Para borrar un grupo usamos groupdel

sudo groupdel nombregrupo

Si el grupo a eliminar es el grupo primario de algún usuario no dejará eliminarlo. Si es secundario lo borra y por consiguiente ese grupo deja de pertenecer a los usuarios que lo tenían.

Para evitar errores si quieres eliminar o quitar un grupo asegurate de que no es el primario.