Linux es un sistema operativo multiusuario. Tenemos 3 tipos de usuario principales:
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).
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í:
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
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:
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:
--ingroup
creará el usuario solo en el grupo indicado--home
directorio 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
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
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
Para crear grupos usamos groupadd
. Por supuesto con sudo
o usuario root.
groupadd nombregrupo
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,...
Tenemos un comando específico para ello que imprime los grupos del usuario especificado.
[root@tallerdeapps /]# groups usuario2
usuario2 : usuario2 sudo
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
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
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.