Saltar al contenido
Home » Linux » Usuarios y Grupos. Teoría 02.1 – Guía Linux

Usuarios y Grupos. Teoría 02.1 – Guía Linux

Usuarios y Grupos. Teoría 02.1 - Guía de Linux

Introducción

Después de ver los comandos básicos de Linux para empezar a manejarnos con el Terminal y de ver conceptos básicos como la concatenación de instrucciones y los comodines, es el momento de aprender a gestionar Usuarios y Grupos en Linux.

Si quieres saber más acerca de los comandos básicos de Linux, puedes conocerlos en la siguiente entrada: Comandos básicos Linux 01.2 – Guía Linux

Y si no te suenan conceptos como comodines y atajos del Terminal, concatenación de comandos, redirección de salida o uso de tuberías, deberías ver la siguiente entrada: Conceptos básicos Linux 01.3 – Guía Linux

Usuarios y Grupos en Linux

La correcta gestión de Usuarios y Grupos es un elemento esencial de la seguridad de una red informática. Si todos los Usuarios tienen control absoluto, es decir, privilegios de administrador en la red, existen tantos puntos de fallo como usuarios.

Separación de privilegios

La separación de privilegios es uno de los paradigmas fundamentales implementados en los sistemas Linux. Los usuarios normales operan con privilegios limitados para reducir su alcance y que no puedan comprometer todo el sistema operativo.

Un usuario especial llamado root tiene los conocidos como privilegios de super-usuario. Esta es una cuenta de administrador que no tiene restricciones como los usuarios normales.

Sin embargo, los usuarios normales pueden necesitar ejecutar comandos con permisos de administrador en determinadas circunstancias. Para ello se utiliza el comando sudo (que veremos en la siguiente entrada) y el archivo /etc/sudoers, que veremos a continuación.

Configuración de Usuarios y Grupos. Un ejemplo

Una correcta configuración de Usuarios y Grupos dicta que el administrador de la red (normalmente el equipo de IT) debe generar usuarios con privilegios mínimos para los empleados. Estos privilegios se pueden modificar con la inclusión de los usuarios en diferentes grupos que les dan determinados privilegios por pertenecer a dichos grupos. Estos privilegios pueden ser el acceso a recursos compartidos concretos, permisos para ejecutar determinados comandos e incluso el acceso a internet o su restricción.

Imagina una empresa con tres sucursales: una en Europa, otra en Sudamérica y otra en Asia. Se deberían crear grupos para que en la red corporativa las diferentes sucursales no tengan acceso a los archivos del resto. Además, como ejemplo, los archivos de Recursos Humanos no pueden ser accesibles por el resto de personal de la empresa pues son de carácter confidencial. Con la creación del grupo RRHH podemos gestionar fácilmente esta situación, dando acceso a estos datos de carácter personal únicamente a los miembros del departamento.

Ficheros importantes

La información de los usuarios en los Sistemas Linux se almacena en los ficheros /etc/passwd y /etc/shadow. Estos son, sin lugar a dudas, los ficheros más importantes del sistema en cuanto a ciberseguridad se refiere.

Por otro lado, los grupos existentes en el sistema se almacenan en /etc/group.

Por último tenemos el fichero /etc/sudoers que es el encargado de la información de los usuarios que tienen permisos para ejecutar algún comando como administrador.

/etc/passwd

Este fichero almacena información sobre todos los usuarios existentes en un sistema Linux.

Los usuarios de un sistema Linux que no son el usuario root pueden ser usuarios de Servicio o usuarios Personales.

  • Los usuarios de Servicio son aquellos que un servicio crea y utiliza para la gestión de dicho servicio. Su UserID va desde 1 hasta 999.
  • Los usuarios Personales son aquellos que podemos utilizar para interactuar con el sistema operativo. Son los que nosotros podemos crear y eliminar. Su UserID va desde 1000 en adelante.
  • El usuario root es el usuario administrador de un sistema Linux y como tal tiene los permisos máximos. Su UserID es 0.
root:x:0:0:root:/root:/usr/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
...
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
...
postgres:x:129:136:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash
mosquitto:x:130:138::/var/lib/mosquitto:/usr/sbin/nologin
inetsim:x:131:139::/var/lib/inetsim:/usr/sbin/nologin
_gvm:x:132:141::/var/lib/openvas:/usr/sbin/nologin
kali:x:1000:1000:,,,:/home/kali:/usr/bin/zsh

La estructura de las entradas del fichero es la siguiente:

Nombre:Contraseña:UserID:GroupID:Gecos:HomeDirectory:Shell

  • Nombre: Es el nombre de usuario.
  • Contraseña: Siempre tiene una «x» aunque en las versiones más antiguas de Linux se almacenaba aquí la contraseña y no en /etc/shadow como ya veremos.
  • UserID (UID): Muestra el ID del usuario. Este valor es exclusivo para cada usuario.
  • GroupID (GID): Es el grupo principal de cada usuario. Por regla general al crear un usuario se crea un grupo con su mismo nombre y un GID igual a su UID. Este suele ser el grupo principal aunque se puede modificar. Estos grupos se almacenan en /etc/group.
  • Gecos: Es información del usuario que el sistema no utiliza, como por ejemplo, un teléfono, una oficina o un correo electrónico.
  • HomeDirectory: Es el directorio de Home del usuario. Al crear un usuario se suele crear un directorio home del tipo /home/usuario, sin embargo, hay algunos como el usuario www-data, cuyo home es /var/www.
  • Shell: La shell por defecto que va a utilizar dicho usuario. Los usuarios de Servicio suelen tener /usr/sbin/nologin o /bin/false mientras que los usuarios utilizan las shells interactivas como pueden ser /bin/bash o /bin/zsh.

/etc/shadow

Este archivo almacena los hashes de las contraseñas de los usuarios de un sistema Linux. Sus permisos de acceso son mucho más estrictos que los del fichero anterior ya que solo puede acceder a él el usuario root.

root:*:19590:0:99999:7:::
daemon:*:19590:0:99999:7:::
bin:*:19590:0:99999:7:::
sys:*:19590:0:99999:7:::
...
www-data:*:19590:0:99999:7:::
...
postgres:!:19590::::::
mosquitto:!:19590::::::
inetsim:!:19590::::::
_gvm:!:19590::::::
kali:$y$j9T$thVUCcCzQozwQh.2JyVRs.$T0FS1BRAcGSTCGldig/Ji2CbWc3bLVV8Ym1wEPDcIw1:19590:0:99999:7:::

La estructura es la siguiente:

Nombre:Hash:ÚltimoCambio:Mínimo:Máximo:Aviso:Inactivo:Expira

  • Nombre Usuario: Es el nombre del usuario.
  • Hash: Es la contraseña encriptada en forma de Hash. Normalmente el formato es el siguiente: $id$salt$hash. El id hace referencia al algoritmo de encriptado:
    • $1$: Es MD5.
    • $2a$: es Blowfish.
    • $2y$: es Blowfish.
    • $5$: es SHA-256.
    • $6$: es SHA-512.
    • $y$: es yescrypt.
  • Último Cambio: La última vez que se cambio la contraseña, expresada en días que han pasado desde el 1 de enero de 1970. El número 0 significa que el usuario debe cambiar la contraseña la próxima vez que inicie sesión.
  • Mínimo: El tiempo mínimo que tiene que pasar para que el usuario pueda volver a cambiar la contraseña.
  • Máximo: Tiempo máximo que puede pasar entra cambios de contraseña. Cuando se termine el usuario debe cambiar otra vez la contraseña.
  • Aviso: El número de días antes del Máximo en el que se empieza a avisar al usuario de que debe cambiar la contraseña.
  • Inactivo: Cuantos días después de que expire la contraseña para que la cuenta se desactiva.
  • Expira: La fecha en que va a expirar la cuenta de usuario, expresada en días que han pasado desde el 1 de enero de 1970.

Dejo a tu disposición el hash de mi usuario de Kali Linux a ver si puedes crackearlo.

/etc/group

Este archivo almacena la información de los grupos del sistema Linux.

root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:kali
...
www-data:x:33:
...
postgres:x:136:
plocate:x:137:
mosquitto:x:138:
sambashare:x:994:
inetsim:x:139:
wireshark:x:140:kali
_gvm:x:141:
kali:x:1000:
kaboxer:x:142:kali

Se estructura de la siguiente manera:

Nombre:Password:GroupID:Usuario1,Usuario2,...,UsuarioN

  • Nombre de Grupo: El nombre del grupo.
  • Password: Siempre tiene una «x».
  • GroupID: El ID del grupo.
  • Usuarios: Los usuarios que forman parte del grupo separados por comas (sin espacio).

/etc/sudoers

Este archivo almacena la información de los usuarios que tienen permisos para ejecutar algún comando impersonando al usuario root. Es decir, que tienen permisos para ejecutar algunos comandos como administrador.

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# This fixes CVE-2005-4890 and possibly breaks some versions of kdesu
# (#1011624, https://bugs.kde.org/show_bug.cgi?id=452532)
Defaults        use_pty

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
%kali-trusted   ALL=(ALL:ALL) NOPASSWD: ALL

# See sudoers(5) for more information on "@include" directives:

@includedir /etc/sudoers.d

El archivo es muy completo y en su página de man se pueden encontrar todos los usos que se le pueden dar pero la parte que nos interesa es la parte de User privilege specification. Su estructura es la siguiente:

Usuario Host=(UsuarioImpersonado:GrupoImpersonado) Comando

  • Usuario: Indica sobre que usuario se aplica la regla
  • Host: Es el host o hosts en los que la regla tiene validez. En caso de ALL significa que tiene validez en todos los hosts de la red.
  • Usuario Impersonado: Indica como qué usuario se pueden ejecutar los comandos. Si es ALL significa que se pueden impersonar todos los usuarios.
  • Grupo Impersonado: De la misma manera que con los usuarios pero con los grupos.
  • Comando: Hace referencia a sobre qué comandos se aplica esta regla. Si es ALL se pueden ejecutar todos los comandos impersonando al Usuario Impersonado.

Se puede hacer lo mismo con grupos pero comienza el nombre con el símbolo %.

El uso del comando sudo se explicará en profundidad en otra entrada.

Conclusión

En esta entrada hemos visto la teoría de como se gestionan los Usuarios y los Grupos en los sistemas Linux. Se que es mucha información de golpe, sin embargo, poco a poco todo irá cobrando sentido.

En la siguiente veremos los comandos que debemos conocer para realizar la gestión de estos Usuarios y Grupos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *