martes, 1 de julio de 2025

Sistemas Operativos 4.- Usuarios y Grupos

 ¿Te pierdes entre tantos temas? 📚✨ Descubre todo lo que ofrece este blog en un solo vistazo [👉 Ver índice completo]

USUARIOS Y GRUPOS EN LINUX.


ATRIBUTOS FUNDAMENTALES DE UN USUARIO EN LINUX

Al crear una cuenta de usuario en Linux, el administrador define una serie de atributos esenciales que identifican y configuran al usuario en el sistema:

  • Nombre de usuario (login): Identificador único del usuario. No puede repetirse en el sistema y es visible para todos los usuarios.

  • Contraseña: Protege el acceso a la cuenta. Debe mantenerse en secreto y cambiarse periódicamente. Se guarda cifrada en /etc/shadow.

  • UID (User ID): Número único que identifica internamente al usuario. Por convención, los UID de usuarios normales empiezan a partir del 1000.

  • Nombre real: Información opcional, útil para identificar al usuario si el login no es suficiente.

  • Directorio de inicio: se refiere al directorio en el que se situará al usuario cada vez que entre en el sistema. En circunstancias normales, se tratará de un directorio propio del usuario en cuestión, donde almacenará sus ficheros y podrá crear otros subdirectorios de su propiedad. Es decir, el directorio de entrada de un usuario ejercerá normalmente como raíz de un árbol de directorios propiedad de dicho usuario. Además, este directorio contendrá ciertos ficheros de configuración particulares del usuario. Cuando el administrador crea la cuenta de un nuevo usuario, puede indicar explícitamente cuál será el directorio de entrada de dicho usuario. Si el administrador no indica ningún directorio, el directorio de entrada del usuario se creará por defecto con el mismo nombre del usuario y será un subdirectorio del directorio establecido como base para directorios de entrada (que habitualmente será /home).El directorio de entrada (indicado o por defecto) se creará automáticamente, si no existe todavía, en el momento de la creación de la cuenta. Si el directorio de entrada de un usuario no pudiera crearse o desapareciera por algún motivo, el usuario se situaría, al entrar en el sistema, en el directorio raíz (/) del mismo. En general, y por motivos de seguridad y operatividad, no es aconsejable que los usuarios se sitúen en directorios comunes al entrar en el sistema, por lo que conviene que cada usuario disponga en todo momento de un directorio de entrada propio. Es el espacio personal del usuario al iniciar sesión. Por defecto se ubica en /home/usuario, salvo que se especifique otro.

  • Grupo de entrada: cualquier usuario puede ser miembro de uno o varios grupos de usuarios. Sólo uno de estos grupos puede ser su grupo prioritario en un momento determinado. La prioridad de este grupo se refiere a la política de derechos. Por ejemplo, cualquier fichero debe asociarse a un grupo para que exista la posibilidad de otorgar derechos de grupo sobre dicho fichero; este grupo asociado será el grupo prioritario del usuario que creó el fichero. Pues bien, el grupo de entradas era el grupo prioritario del usuario cuando éste entre al sistema. Posteriormente, el usuario tiene la opción de cambiar su grupo prioritario (siempre que éste acabe siendo un grupo del que es miembro), mediante el comando newgrp. En algunas distribuciones, si no se indica explícitamente un grupo de entrada a la hora de crear la cuenta de un usuario, el sistema creará automáticamente un nuevo grupo con el mismo nombre que el usuario, y lo asignará a éste como su grupo de entrada Grupo principal del usuario. Si no se indica, se crea uno con su mismo nombre.

  • Grupos adicionales: se trata de todos aquellos grupos de los que es miembro el usuario, salvo su grupo de entrada. Cualquiera de los grupos adicionales de un usuario puede pasar a ser el grupo prioritario de dicho usuario en cualquier momento (mediante el comando newgrp). No es imprescindible que el usuario sea miembro de grupos adicionales, por lo que, por defecto, la lista de grupos adicionales de un usuario estará vacía.

  • Fecha de caducidad: Opcional. Permite establecer cuándo debe desactivarse una cuenta (por ejemplo, en cuentas temporales).

Estos atributos pueden establecerse y modificarse mediante herramientas como: adduser, useradd y usermod, según las necesidades del administrador.

Crear usuarios en Linux: preparación previa

Antes de añadir un nuevo usuario en un sistema Linux, es importante realizar algunos pasos previos si queremos tener un mayor control sobre su configuración. Uno de ellos es la creación de los grupos a los que pertenecerá el usuario, y otro es la preparación del directorio de iniciosi no se quiere usar el predeterminado.

a. Crear los grupos necesarios

En Linux, los grupos sirven para gestionar los permisos de acceso a archivos, directorios y recursos del sistema. Al crear un usuario, podemos especificar los grupos a los que pertenecerá, tanto el grupo principal como grupos secundarios. Por eso, si vamos a asignarle un grupo personalizado, debemos crearlo primero con el comando:

sudo groupadd nombre_grupo

Esto evita errores y asegura que el grupo esté disponible al momento de crear el usuario. Si no especificamos a que grupo pertenece el usuario, Linux crea por defecto un grupo con su mismo nombre.

b. Crear el directorio de inicio personalizado (opcional)

Por defecto, Linux crea el directorio de inicio del usuario en /home/nombre_usuario. Sin embargo, es posible especificar un directorio diferente durante la creación. En ese caso, conviene crearlo manualmente antes y establecer los permisos adecuados:

sudo mkdir /ruta/personalizada
sudo chown nombre_usuario:nombre_grupo /ruta/personalizada

Aunque también puede hacerse automáticamente con la opción -m del comando useradd, como veremos, en muchos casos es preferible tener control sobre su ubicación y configuración, sobre todo en servidores o entornos con estructuras personalizadas.

Date cuenta que solo el root puede añadir o modificar usuarios o grupos.


AÑADIR USUARIOS POR DEFECTO.

Por ejemplo para crear un usuario con las opciones por defecto usaremos el comando, bien con sudo o como root:

adduser usuario


adduser



CREAR UN USUARIO CON USERADD SIN USAR LAS OPCIONES POR DEFECTO

Si no queremos que el sistema configure automáticamente al usuario con los valores por defecto, podemos usar el comando useradd junto con distintas opciones que nos permiten personalizar su grupo principal, los grupos secundarios, el directorio de inicio, el intérprete de comandos (shell), entre otros.

Un ejemplo básico sería:

sudo useradd [opciones] nombre_usuario
  • -m: crea el directorio de inicio si no existe. (obligatorio siempre)

  • -d: especifica la ruta personalizada del directorio de inicio.

  • -u: uid del usuario

  • -c: "1,2,3,4,5" datos del usuario, con un máximo de 5 campos separados por comas.

  • -e año-mes-dia fecha de caducidad de la cuenta.

  • -s: define el intérprete de comandos. Por ejemplo /bin/bash o /bin/sh

  • -g: asigna el grupo entrada.

  • -G: grupo,grupo (sin espacios) -> grupos adicionales.


ESTABLECER LA CONTRASEÑA DEL USUARIO

Después de crear el usuario, no hay que olvidar establecer su contraseña, ya que sin ella no podrá iniciar sesión. Para hacerlo, usamos:

sudo passwd nombre_usuario

El sistema pedirá que introduzcamos y confirmemos la nueva contraseña. Solo después de este paso, el usuario estará completamente operativo para acceder al sistema.

Por ejemplo, si previamente hemos creamos los grupos marketing, audio y docker con addgroup, podemos usar el siguiente comando para crear un usuario personalizado:

useradd

Date cuenta que su directorio de entrada es /usuarios/mario y no el que se usa por defecto. Normalmente el uid o identificador de los usuarios humanos empieza a partir del número 1000.

Los datos del usuario se pueden también cambiar con el comando chfn. Al ejecutarlo nos ira pidiendo los datos a introducir.

chfn


EL ARCHIVO /ETC/PASSWD: LA BASE DE LOS USUARIOS EN LINUX

Una vez que hemos creado usuarios en el sistema, es importante entender dónde se almacenan sus datos. En Linux, la información principal de cada usuario se guarda en el archivo /etc/passwd, un archivo de texto plano fundamental para el sistema. Lo puedes editar con cualquier editor de texto que tengas instalado como gedit, nano o mousepad.

Por ejemplo: mousepad /etc/passwd

¿Qué contiene /etc/passwd?

Este archivo contiene una línea por cada usuario, y cada línea está dividida en 7 campos, separados por dos puntos

nombre_usuario:contraseña:UID:GID:comentario:directorio_inicio:shell

A continuación vamos a ver qué representa cada campo:

  1. nombre_usuario: el nombre de la cuenta (por ejemplo, marioroot).

  2. contraseña: históricamente aquí se almacenaba la contraseña cifrada, pero hoy en día suele contener solo una x, indicando que la contraseña está en /etc/shadow (más seguro).

  3. UID (User ID): número único que identifica al usuario. Los usuarios normales suelen empezar en 1000.

  4. GID (Group ID): identificador del grupo principal del usuario.

  5. comentario: campo de información adicional (por ejemplo, el nombre real del usuario).

  6. directorio_inicio: ruta al directorio personal del usuario.

  7. shell: intérprete de comandos predeterminado (como /bin/bash/bin/sh, etc.).

Ejemplo de línea en /etc/passwd:

mario:x:1050:1002:Mario Gómez, Marketing, ext 150:/usuarios/mario:/bin/bash

Esta línea nos dice que:
  • El usuario se llama mario.

  • Su UID y GID son 1050 y 1002 respectivamente.

  • Tiene un comentario descriptivo.

  • Su directorio personal es /usuarios/mario.

  • Usa /bin/bash como shell.

Este archivo es esencial para el inicio de sesión y otras funciones del sistema. Cualquier error en su formato puede impedir que los usuarios accedan correctamente, por lo que es recomendable no editarlo manualmente, salvo que sepas lo que haces.


MODIFICAR CUENTAS DE USUARIO SIN EDITAR /ETC/PASSWD: EL COMANDO USERMOD

El administrador de sistema podrá modificar las cuentas de usuario mediante el comando usermod. La sintaxis de este comando es prácticamente idéntica a las del comando useradd, es decir, la misma opción que se utiliza en el comando useradd para establecer el valor de un determinado atributo, servirá para modificar el valor del mismo atributo utilizando usermod. 

Cambiar de nombre una cuenta de usuario incluye cambiar e  nombre de usuario en /etc/passwd, y /etc/group. Además, en alguna ocasión (cuando se indique) el directorio de entrada de ese usuario se debe trasladar a la cuenta cambiada de nombre (a no ser que haya razones para dejarla donde está). Para cambiar de nombre una cuenta de usuario en la línea de comandos se debe escribir:

sudo usermod –l nuevoNombreUsuario antiguoNombreUsuario

Para cambiar el directorio de entrada de un usuario se debe escribir:

sudo usermod –d nuevoDirectorio -m nombreUsuario

La opción –m permite mover los archivos que había en el directorio home antiguo al nuevo.

Para cambiar el directorio de entrada y el nombre de un usuario se debe escribir:

sudo usermod –d nuevoDirectorio –m –l nuevoNombreUsuario antiguoNombreUsuario

También con esta opción podemos cambiar cualquiera de las opciones que ya vimos como el shell, datos del usuario etc.

sudo usermod [opciones] nombre_usuario

Las opciones son las mismas que vimos para useradd.


AÑADIR/QUITAR USUARIOS A UN GRUPO.

Para añadir usuarios a un grupo se utiliza el comando adduser seguido del nombre del usuario y del nombre del grupo al que le queremos añadir, por ejemplo:

//añadir un usuario a un grupo

$ sudo adduser mario docker // añade a mario al grupo docker

Para quitar a un usuario de un grupo se utiliza el comando deluser seguido del nombre del usuario y del nombre del grupo del que queremos quitarle, por ejemplo:

//quitar a un usuario de un grupo

$ sudo deluser mario docker // quita a mario del grupo docker



ELIMINAR CUENTAS DE USUARIO EN LINUX CON USERDEL -r

Cuando gestionas un sistema Linux, es común necesitar eliminar cuentas de usuarios que ya no son necesarias. El comando userdel es es la herramienta ideal para esto, y con la opción -r también puedes borrar todos los archivos asociados con el usuario.

El formato básico del comando sería:

sudo userdel -r nombre_usuario

Donde:

sudo: se requieren permisos de administrador

-r: elimina el directorio home del usuario y los archivos de correo en /var/mail/

nombre_usuario: el nombre de la cuenta que quieres eliminar.

Para asegurarte de que el usuario fue eliminado correctamente puedes verificar el archivo /tc/passwd o usar el comando:

grep nombre_usuario /etc/passwd

sino aparece en la lista la cuenta se eliminó con éxito.

Si te da un error al intentar eliminar la cuenta del usuario puede ser que el usuario esté logueado o tenga procesos ejecutandose para lo cual puedes utilizar este comando antes de usar userdel:

sudo pkill -u nombre_usuario // termina sus procesos.


INHABILITACIÓN DE USUARIOS

Implica eliminar sus accesos al sistema sin mover sus cuentas en realidad. Esta medida generalmente se utiliza para asegurar que las cuentas se convierten en no detectadas si los usuarios no acceden a ellas, por ejemplo cuando están de vacaciones.

Procedimiento:

  1. Entrar en el sistema como root y editar los archivos /etc/passwd o /etc/shadow.

  2. Localizar la entrada para la cuenta que desea inhabilitar.

  3. Cambiar el segundo campo en la entrada a un asterisco (*). Aunque añadir casi cualquier carácter simple a este campo evita que cualquiera pueda entrar en la cuenta, el asterisco tiene un significado especial en el sistema (traduce la contraseña de la cuenta a una cadena de caracteres). No borrar la antigua línea (ponerla con “#” delante) para poder habilitarlo después con la misma contraseña. Si no, al quitar el * habría que darle una contraseña con passwd ya que quedaría sin ella.

  4. Guardar los cambios y salir del archivo.

Para impedir que el usuario entre en el sistema se puede también utilizar uno de estos dos comandos:

passwd nombre_usuario –l

usermod –L nombre_usuario

Para permitir al usuario volver a entrar en el sistema se puede utilizar uno de estos dos comandos:

passwd nombre_usuario –u

usermod –U nombre_usuario


FICHERO DE CONFIGURACIÓN /ETC/GROUP

El fichero /etc/group es a los grupos lo que el fichero /etc/passwd es a los usuarios: una base de datos sobre sus atributos, esencial para el sistema. En consecuencia, cada línea del fichero /etc/group constituye un registro asignado a uno de los grupos definidos en el sistema, y cada registro está dividido en campos separados por dos puntos (:) que contienen información sobre los atributos del grupo. En este caso, cada registro consta de cuatro campos, correspondientes a los cuatro atributos fundamentales del grupo, que se disponen en el siguiente orden:

  1. Nombre del grupo.

  2. Contraseña (encriptada)

  3. GID

  4. Nombres de los usuarios miembros del grupo, que no lo tienen como grupo de entrada.(separados por comas).

Así, una posible línea (registro) incluida del fichero /etc/group sería la siguiente:

proyecto:x:1520:luis,pepe,juan

Esto indica que en el sistema existe un grupo llamado "proyecto" que tiene como usuarios de ese grupo (y que no lo tienen como grupo de entrada) a luis, pepe y juan. Este grupo tiene asignado el identificador numérico 1520. Al igual que otros ficheros de configuración del sistema, el fichero /etc/group puede ser leído por cualquier usuario, y el administrador puede emplear un editor de texto normal para modificarlo.


CREACIÓN DE GRUPOS DE USUARIOS.

El administrador puede crear grupos desde la línea de comandos utilizando los siguientes comandos:

addgroup nombre_grupo // permite agregar grupos de una forma interactiva.

groupadd [opciones] nombre_grupo // la opción mas útil es -g que nos permite introducir de forma manual el GID del grupo.


MODIFICACIÓN DE GRUPOS.

Linux permite al administrador del sistema cambiar el valor de los atributos de un grupo, aunque dichos atributos se modificarán con menos frecuencia que los atributos de los usuarios. Para ello se utiliza el comando groupmod. Su manejo es análogo al de usermod, es decir, el comando admite opciones que permitirán indicar el nuevo valor de un atributo concreto del grupo mediante sus parámetros asociados. Sintaxis:

groupmod  [opciones]  nombredeGrupo

Este comando sólo admite dos opciones para cambiar el valor de sendos atributos:

g: cambia el valor del GID del grupo. El nuevo GID pasará a ser el número indicado en el parámetro asociado a la opción. Hay que tener en cuenta las normas respecto al GID expuestas hasta ahora.

n: cambia el nombre del grupo al indicado en el parámetro asociado a esta opción.

Deben tenerse en cuenta las restricciones respecto a las cadenas de caracteres que pueden ser nombres de grupo. El cambio en el nombre de un grupo debe realizarse tomando todas las precauciones, ya que la política de permisos del sistema puede verse alterada.


ELIMINACIÓN DE GRUPOS

Es tarea única del administrador. Se utiliza el comando groupdel indicando el nombre del grupo.

Sintaxis:

groupdel nombreDeGrupo

donde nombreDeGrupo es uno de los grupos definidos en el sistema y no puede ser un grupo de entrada de un usuario. El fichero /etc/passwd y el /etc/gshadow (si lo hubiera) se modificarán para reflejar la eliminación del grupo. El grupo se borrará de la lista de grupos adicionales de los usuarios que lo tuvieran como tal.

Ojo, un grupo no se puede eliminar si tiene un usuario que lo tiene como grupo de entrada.


¿COMO PUEDE CAMBIARSE EL GRUPO AL QUE PERTENECE UN USUARIO?

Dependiendo se si lo hace el propio usuario o lo hace el administrador.

1. newgrp (para el usuario):

  • newgrp permite a un usuario cambiar temporalmente su grupo efectivo para el shell actual y los procesos que inicie desde ese shell.

  • No cambia el grupo primario o de entrada (GID) definido en /etc/passwd del usuario.

  • El usuario debe ser miembro del grupo al que desea cambiar para poder usar newgrp.

  • Es útil para ejecutar comandos con los permisos de otro grupo sin tener que cerrar sesión y volver a iniciarla.

  • Por ejemplo: newgrp mi_otro_grupo

2. usermod (para el administrador):

  • usermod es la herramienta estándar para que un administrador modifique las propiedades de una cuenta de usuario, incluyendo su grupo principal y los grupos secundarios a los que pertenece.

  • Estos cambios son permanentes y se reflejan en los archivos de configuración del sistema (/etc/passwd, /etc/group, etc.).

  • El usuario debe cerrar sesión y volver a iniciarla para que los cambios de grupo surtan efecto.

  • Para cambiar el grupo principal de un usuario:

    sudo usermod -g nuevo_grupo_primario nombre_de_usuario

  • Para añadir un usuario a grupos secundarios sin cambiar su grupo primario:

    sudo usermod -aG grupo1,grupo2 nombre_de_usuario

    (La opción -a es importante para "añadir" y no "sobrescribir" los grupos secundarios existentes).

3. Edición directa de archivos (para el administrador, con precaución):

  • Un administrador con acceso de root podría editar directamente los archivos /etc/passwd (para el GID primario) y /etc/group (para la membresía en grupos secundarios).

  • Esto es menos recomendado que usar usermod porque es más propenso a errores de sintaxis que podrían corromper la información de los usuarios.

  • Sin embargo, es una opción si las herramientas estándar no están disponibles o en situaciones muy específicas.

En resumen, mientras que un usuario puede usar newgrp para cambiar temporalmente su grupo efectivo, un administrador usa usermod (o edita archivos directamente) para realizar cambios permanentes en los grupos de un usuario, incluyendo su grupo principal de entrada.


¿QUÉ PUEDES HACER EN LINUX SIN SER ROOT? ¡MÁS DE LO QUE CREES!

Cuando hablamos de Linux, a menudo pensamos en la necesidad de ser "root" (el superusuario) para hacer cualquier cosa importante. Es cierto que para tareas de administración del sistema, como instalar programas, gestionar servicios o modificar archivos cruciales, necesitarás privilegios de root. Sin embargo, como usuario estándar, tienes bastante control sobre tu propio entorno sin necesidad de sudo.

Exploremos algunas de las acciones clave que puedes realizar sin ser root:

1. Cambiar tu contraseña con passwd

La seguridad es primordial, y como usuario de Linux, tienes el poder de cambiar tu propia contraseña en cualquier momento. Esto es crucial para mantener tu cuenta segura y puedes hacerlo de forma sencilla desde la terminal.

Simplemente abre tu terminal y escribe:

passwd

El sistema te pedirá primero tu contraseña actual y luego te pedirá que ingreses la nueva contraseña dos veces para confirmarla. ¡Así de fácil!

2. Cambiar tu Shell por defecto con chsh

El shell es el intérprete de comandos que usas para interactuar con tu sistema Linux (como Bash, Zsh, Fish, etc.). Si alguna vez te has sentido limitado por tu shell actual o simplemente quieres probar uno nuevo, ¡buenas noticias! Puedes cambiar tu shell por defecto sin privilegios de root.

Para cambiar tu shell, usa el comando chsh (change shell):

chsh -s /ruta/al/nuevo/shell

Por ejemplo, si quieres cambiar a Zsh (y ya lo tienes instalado), usarías:

chsh -s /bin/zsh

Después de cambiarlo, deberás cerrar sesión y volver a iniciarla para que el cambio surta efecto. Es una excelente manera de personalizar tu experiencia en la terminal.

3. Cambiar tu grupo actual con newgrp

En Linux, los usuarios son parte de uno o más grupos, lo que ayuda a gestionar los permisos sobre archivos y directorios. A veces, necesitas trabajar con archivos que pertenecen a un grupo específico al que también perteneces, pero que no es tu grupo principal actual. Aquí es donde newgrp entra en juego.

El comando newgrp te permite cambiar tu grupo efectivo para la sesión actual de la terminal. Esto significa que los archivos o directorios que crees a partir de ese momento se asociarán con el nuevo grupo.

Por ejemplo, si eres miembro del grupo desarrolladores y quieres trabajar con sus archivos, puedes escribir:

newgrp desarrolladores

Ten en cuenta que newgrp cambia tu grupo para la sesión actual y sus subprocesos; no modifica tu grupo principal definido en el sistema. Es una herramienta útil para gestionar permisos sobre la marcha.


Ver los grupos a los que pertenece un usuario: groups e id.

Los comandos groups e id en Linux son herramientas fundamentales para entender la identidad y las membresías de un usuario. Su salida varía ligeramente dependiendo de la ejecución. Vamos a verlo con un ejemplo. Tengo un usuario llamado "mario" que tiene como grupo de entrada "marketing" y como otros grupos "audio" y "docker"

mario: marketing, audio, docker

Cuando mario entra en el sistema su grupo de entrada pasa a ser su grupo prioritario. Lo que voy a hacer es con newgrp cambiar su grupo prioritario de marketing a docker.

newgrp

Si ejecutamos groups sin mas, se nos muestra el grupo actual prioritario de mario, que ahora mismo es docker y el resto de los grupos. Sin embargo si ejecutamos groups seguido del nombre del usuario nos da el grupo de entrada y el resto de los grupos, sin especificarnos cual es su grupo prioritario actual. Con id pasa lo mismo, la única diferencia es que nos muestra el uid del usuario y los gid de los grupos.


No hay comentarios:

Publicar un comentario