> For the complete documentation index, see [llms.txt](https://juanbermudez.gitbook.io/aprendiendolinux/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://juanbermudez.gitbook.io/aprendiendolinux/usuarios-y-grupos.md).

# Usuarios y grupos

## Permisos

La gestión de usuarios en GNU/Linux es fundamental, ya que el sistema maneja todo por permisos o control de acceso. Esto es crucial para la seguridad y la eficiencia.

Los permisos de usuarios y grupos se ven reflejados en modo de siglas, por ejemplo al ejecutar `ls -l` podemos verlos así `-rw-rw-r--` (cadena).

| Permisos | Descripción |
| -------- | ----------- |
| `r`      | Lectura     |
| `w`      | Escritura   |
| `x`      | Ejecución   |

La cadena se divide en cuatro bloques:

1. `-` Tipo
2. `rw-` Son los permisos del usuario.
3. `rw-` Son los permisos del grupo.
4. `r--` Son los permisos para otros usuarios.

{% hint style="info" %}
**Tipo**

El primer carácter es usado para identificar si se trata de un directorio, un fichero u otro tipo.

* `d` Directorio
* `-` Fichero
* `l` Enlace

Existen más, pero estos son los más comunes.
{% endhint %}

Hay otra forma de representar los permisos, y es a través de los números del 0 al 7.

| Permiso | Decimal | Descripción                     |
| ------- | ------- | ------------------------------- |
| `---`   | 0       | Sin permisos.                   |
| `--x`   | 1       | Ejecución.                      |
| `-w-`   | 2       | Escritura.                      |
| `-wx`   | 3       | Escritura y ejecución.          |
| `r--`   | 4       | Lectura.                        |
| `r-x`   | 5       | Lectura y ejecución.            |
| `rw-`   | 6       | Lectura y escritura.            |
| `rwx`   | 7       | Lectura, escritura y ejecución. |

Por ejemplo, los permisos `rwxrwxrwx` = `777`, quiere decir que el usuario, el grupo y los demás usuarios, pueden leer, escribir y ejecutar. Pero los permisos `rw-r--r--` = `644`, quiere decir que el usuario tiene permisos de lectura y escritura, el grupo solo tiene permiso de lectura, y los otros usuarios también solo tienen permisos de lectura.

Esta tabla nos resulta útil al momento de cambiar los permisos, ya que con solo tres dígitos, cambiamos los permisos para el usuario, el grupo y los demás usuarios.

{% hint style="info" %}
[**UID**](https://es.wikipedia.org/wiki/Identificador_de_usuario) - [**GID**](https://es.wikipedia.org/wiki/Identificador_de_grupo)

Todos los usuarios y grupos se les asigna un ID, esta es una forma de identificar inequívocamente a los usuarios y grupos.
{% endhint %}

## Permisos especiales

En lugar de ver una `x` (ejecución) podemos ver una `s`, o una `t`, pueden ser minúsculas o mayúsculas y esto también representa una diferencia en la forma que podemos ver o ejecutar comandos. Veamos algunos ejemplos:

```bash
$ ls -l /bin/passwd
-rwsr-xr-x 1 root root 55384 Apr 1 11:27 /bin/passwd
```

Como vemos, el comando `passwd` tiene `s` (SUID), y al ejecutar `ls -l /` veremos que el directorio `/tmp` tiene una `t` al final (Stickly Bit).

```bash
$ ls -l /
drwxrwxrwt 8 root root   160 Apr 26 17:06 tmp
```

{% hint style="info" %}
**SUDI** - **SGID** - **Sticky Bit**

El SUID se aplica unicamente a ficheros, el SGID a ficheros y directorios, el Sticky Bit se aplica a ficheros y directorios. Es importante no modificar estos permisos o hacerlo con cautela, ya que podríamos estar abriendo brechas de seguridad.

Un comando con `s` SUID podrá ser ejecutado por un usuario pero conservando los permisos del propietario. En el caso de tener `S` SUID significa que no hay permisos de ejecución, ni siquiera el propietario lo podrá ejecutar.
{% endhint %}

Estos permisos son muy importantes, por ejemplo un usuario normal no puede ver o editar el fichero `/etc/shadow` que contiene las contraseñas cifradas de todos los usuarios, sin embargo si un usuario normal ejecuta el comando `passwd` que tiene SUID permite que los usuarios puedan cambiar su contraseña que se encuentra en `/etc/shadow`. El superusuario (root) es el único que puede ver y modificar el contenido de `/etc/shadow`, o ejecutar `passwd` para cambiar la contraseña de cualquier usuario.

En el caso del Sticky Bit, indica que aunque es accesible por otros, solo el usuario propietario o superusuario lo pueden eliminar o renombrar.

## Usuarios

{% hint style="info" %}
`/etc/passwd` contiene los usuarios y sus ID. Los ID del 1 al 999 están reservados a los usuarios del sistema. Los usuarios normales se les asigna los ID del 1000 en adelante.

Para editar rápidamente este fichero, usa el comando `vipw`.
{% endhint %}

* **Superusuario (root)**: Es el usuario con permisos administrativos, pues tiene todo el control del sistema.
* **Usuarios normales**: Son los usuarios estándar, con los que normalmente iniciamos sesión y realizamos tareas básicas. Los permisos son muy limitados.
* **Usuarios del sistema**: Son los usuarios asociados a servicios y aplicaciones. No usan contraseña ni se puede iniciar sesión con ellos.

{% hint style="danger" %}
`/etc/shadow` contiene las contraseñas cifradas de los usuarios. Generalmente los usuarios del sistema están deshabilitados, pero también se pueden deshabilitar los demás usuarios, se identifican fácilmente porque al inicio de la contraseña muestran el símbolo `!`.

Puede verificar rápidamente así:

```bash
# cat /etc/shadow | grep usuario
```

{% endhint %}

{% hint style="info" %}
Usa el comando `pwck` para comprobar la consistencia de los ficheros `/etc/passwd` y `/etc/shadow`.
{% endhint %}

## Grupos

{% hint style="info" %}
`/etc/group` contiene los grupos y sus ID. Para editar este fichero rápidamente usa el comando `vigr`.
{% endhint %}

* **Grupo wheel/sudo**: Son los usuarios autorizados a ejecutar comandos como si fueran superusuarios.

{% hint style="info" %}
En distribuciones como Arch Linux, el grupo wheel debe ser habilitado editando el fichero `/etc/sudoers` y descomentando el `#` en la línea `# %wheel ALL=(ALL) ALL`.
{% endhint %}

* **Grupo de usuarios**: Son los grupos de usuario estándar. Proporciona una forma de gestionar permisos comunes.
* **Grupo de administradores**: Son los usuarios que gestionan los ficheros de registro del sistema, permitiendo revisar información crítica.

{% hint style="danger" %}
`/etc/gshadow` contiene las contraseñas cifradas de los grupos. Generalmente las contraseñas de los grupos están deshabilitadas `!`.
{% endhint %}

{% hint style="info" %}
Usa el comando `grpck` para comprobar la consistencia de los ficheros `/etc/group` y `/etc/gshadow`.
{% endhint %}
