Capítulo 4. Autenticación y controles de acceso

# Capítulo 4. Autenticación y controles de acceso

Cuando una persona (o programa) necesita acceso al sistema, la acreditación confirma que la identidad es confiable.

| Aviso
Una configuración errónea de PAM puede bloquearlo en su propio sistema. Debe tener un CD de rescate a mano o configurar una partición de arranque alternativa. Para recuperarlo inicie el sistema con uno de estos y corrija los errores cometidos.

## 4.1. Acreditación normal de Unix

La autenticación Unix normal la proporciona el módulo pam_unix(8) bajo PAM (Módulos de autenticación conectables). Sus 3 archivos de configuración importantes, con entradas separadas "`:`", son los siguientes.

Tabla 4.1. los tres archivos importantes de configuración de pam_unix(8)

archivo | permisos | usuario | grupo | descripción
--- | --- | --- | --- | ---
`/etc/passwd` | `-rw-r--r--` | `root` | `root` | (limpia) información de la cuenta de usuario
`/etc/shadow` | `-rw-r-----` | `root` | `shadow` | información de seguridad de la cuenta de usuario
`/etc/group` | `-rw-r--r--` | `root` | `root` | información de grupo

"`/etc/passwd`" contiene lo siguiente.

     ...
    user1:x:1000:1000:User1 Name,,,:/home/user1:/bin/bash
    user2:x:1001:1001:User2 Name,,,:/home/user2:/bin/bash
     ...

Como se explica en `contraseña`(5), cada entrada separada "`:`" de este archivo significa lo siguiente.

- Nombre de acceso

- Entrada de especificación de contraseña

- ID de usuario numérico

- ID numérico de grupo

- Nombre de usuario o comentario

- Directorio raíz del usuario

- Intérprete de órdenes opcional de usuario

La segunda entrada de «`/etc/passwd`» se usaba para guardar la contraseña cifrada. Después de la introducción de «`/etc/shadow`», esta entrada se usa para especificar la entrada de la contraseña.

Tabla 4.2. El contenido de la segunda entrada de «`/etc/passwd`»

contenido | significado
--- | ---
(vacio) | cuenta sin contraseña
x | la contraseña cifrada esta en «`/etc/shadow`»

"`/etc/shadow`" contiene lo siguiente.

     ...
    user1:$1$Xop0FYH9$IfxyQwBe9b8tiyIkt2P4F/:13262:0:99999:7:::
    user2:$1$vXGZLVbS$ElyErNf/agUDsm1DehJMS/:13261:0:99999:7:::
     ...

Como se explica en shadow(5), cada entrada separada "`:`" de este archivo significa lo siguiente.

- Nombre de acceso

- Contraseña cifrada (El «`$1$`» inicial indica el uso del cifrado MD5. El carácter "*" indica sin acceso a la cuenta.)

- Fecha del último cambio de contraseña, expresado en el número de días desde el 1 de Enero de 1970

- Número de días que el usuario tiene que esperar antes de que se le permita cambiar la contraseña de nuevo

- Número de días después del cual el usuario puede cambiar su contraseña

- Número de días antes de que la contraseña deje de ser válida durante los cuales se avisará al usuario de ello

- Número de días después de que una contraseña ha dejado de ser válida en los cuales la contraseña todavía será aceptada

- Fecha de expiración de la cuenta, expresada en el número de días desde 1 de Enero de 1970

- …

"`/etc/group`" contiene lo siguiente.

    group1:x:20:user1,user2

Como se explica en grupos(5), cada entrada separada "`:`" de este archivo significa lo siguiente.

- Nombre del grupo

- Contraseña cifrada (no usado)

- ID numérico de grupo

- relación de los nombres de usuario separados por ","

| Nota
«`/etc/gshadow`» aporta la misma funcionalidad que «`/etc/shadow`» para «`/etc/group`» pero no se usa en realidad.

| Nota
La pertenencia real a un grupo por parte de un usuario puede ser añadido de forma dinámica si la línea «`auth optional pam_group.so`» esta añadida en «`/etc/pam.d/common-auth`» y activada en «`/etc/security/group.conf`». Ver pam_group(8).

| Nota
El paquete `base-passwd` contiene una relación de acreditaciones de usuarios y grupos: «`/usr/share/doc/base-passwd/users-and-groups.html`».

## 4.2. Gestionando información de cuentas y contraseñas

Aquí están algunas órdenes relevantes para la gestión de información de cuentas.

Tabla 4.3. Relación de órdenes para la gestión de información de las cuentas

orden | función
--- | ---
`getent passwd user_name` | navega por la información de la cuenta de «`nombre_de_usuario`»
`getent shadow user_name` | navega por la información de cuenta «oculta« de «`nombre_de_usuario`»
`getent group group_name` | navega por la información del grupo «`nombre_del_grupo`»
`passwd` | gestiona la contraseña de la cuenta
`passwd -e` | asigna una contraseña de un solo uso para la activación de la cuenta
`chage` | gestión de la información de la vejez de la contraseña

Puede necesitar privilegios de superusuario para que funcionen alguna operación. Ver crypt(3) sobre el cifrado de la contraseña y datos.

| Nota
En un sistema configurado con PAM y NSS como el equipo Debian salsa, el contenido local de «`/etc/passwd`», «`/etc/group`» y «`/etc/shadow`» pueden no estar activados en el sistema. Incluso bajo estas circunstancias las órdenes son válidas.

## 4.3. Buenas contraseñas

Cuando se crea una cuenta durante la instalación de su sistema o con la orden passwd(1), puede elegir una buena contraseña la cual consiste al menos de 6 a 8 caracteres incluyendo uno o más caracteres de cada uno de los conjuntos siguientes de acuerdo a passwd(1).

- letras en minúscula

- Dígitos de 0 hasta 9

- Signos de puntuación

| Aviso
No elija para la contraseña palabras fáciles de adivinar. Nombre de la cuenta, número de la Seguridad Social, nombre del teléfono, dirección, fecha de nacimiento, nombre de los miembros de su familia o mascotas, palabras del diccionario, secuencias simples de caracteres como «12345« o «qwerty«, son una mala elección para la contraseña.

## 4.4. Creando una contraseña cifrada

Existen herramientas independientes para generar contraseñas cifradas con una semilla.

Tabla 4.4. Relación de herramientas para generar contraseñas

paquete | popularidad | tamaño | orden | función
--- | --- | --- | --- | ---
`whois` | V:23, I:210 | 384 | `mkpasswd` | interfaz con múltiples funcionalidades de la biblioteca crypt(3)
`openssl` | V:855, I:997 | 2532 | `openssl passwd` | resúmenes criptográficos de las contraseñas (OpenSSL). `passwd`(1ssl)

## 4.5. PAM y NSS

Los sistemas modernos similares a Unix (como los sistemas Debian) proporcionan PAM (módulos de autenticación conectables, módulos de autenticación conectables) y NSS (Cambio de servicio de nombres, Cambio de servicio de nombres) mecanismo para administradores de sistemas locales, que les permite configurar sus propios sistemas. Sus funciones se pueden resumir en los siguientes puntos.

- PAM ofrece mecanismos flexibles de acreditación que los usan las aplicaciones software mediante el intercambio de datos de contraseñas.

- NSS ofrece un mecanismo de servicios de nombre flexible el cual se usa de forma habitual por la biblioteca C estándar para obtener el nombre del usuario y el grupo para programas como ls(1) e id(1).

Estos sistemas PAM y NSS necesitan configurarse de forma coherente.

Los paquetes importantes en los sistemas PAM y NSS son los siguientes.

Tabla 4.5. Relación de sistemas PAM y NSS relevantes

paquete | popularidad | tamaño | descripción
--- | --- | --- | ---
`libpam-modules` | V:941, I:1000 | 892 | Módulos de acreditación conectables (servicios básicos)
`libpam-ldapd` | V:7, I:13 | 79 | PAM permite conectar con servicios LDAP
`libpam-systemd` | V:747, I:967 | 785 | Módulo de autenticación conectable (PAM) para `logind` para registrar sesiones de usuario
`libpam-doc` | I:7.5 | 1492 | PAM (documentación en html y texto)
`libc6` | V:942, I:1000 | 5481 | Biblioteca GNU C: bibliotecas compartidas que ofrecen también el intercambio del servicio de nombres
`glibc-doc` | I:5.4 | 3926 | Biblioteca GNU C: Manpages
`glibc-doc-reference` | I:3.2 | 14764 | Biblioteca GNU C: Manual de Referencia en info, formatos pdf y html («non-free«)
`libnss-mdns` | V:282, I:502 | 142 | Módulo NSS para resolución de nombres DNS sin servidor DNS
`libnss-ldapd` | V:8, I:16 | 131 | Módulo NSS para su integración con el servicio de nombres por LDAP

- Es esencial para aprender a configurar PAM «The Linux-PAM System Administrators' Guide« en `libpam-doc`.

- El documento principal para aprender a configurar NSS es «System Databases and Name Service Switch« section en `glibc-doc-reference`.

| Nota
Puede obtener una relación más completa y actualizada mediante la orden «`aptitude search 'libpam-|libnss-'`». El acrónimo NSS también tiene el significado de «Servicio de Seguridad de Red (Network Security Service) que es diferente de «Intercambio del Servicio de Nombres« (Name Service Switch).

| Nota
PAM es la forma fundamental para la inicialización de las variables de entorno para cada programa con un valor diferente al que ofrece el sistema por defecto.

En systemd , se instala el paquete `libpam-systemd` para administrar los inicios de sesión de los usuarios registrando las sesiones de usuario en la jerarquía del grupo de control `systemd` para logind . Consulte `systemd-logind` (8), `logind.conf` (5) y `pam_systemd` (8).

### 4.5.1. Archivos de configuración utilizados por PAM y NSS

Aquí están algunos de los archivos de configuración más importantes usados por PAM y NSS.

Tabla 4.6. Relación de archivos de configuración utilizados por PAM y NSS

archivo de configuración | función
--- | ---
`/etc/pam.d/program_name` | Realice la configuraciñon de PAM para el programa «`nombre_del_programa`»; consulte pam(7) y pam.d(5)
`/etc/nsswitch.conf` | Realice la configuración NSS con una registro para cada servicio. Consulte nsswitch.conf(5)
`/etc/nologin` | Acote los usuario con permisos de inicio por medio del módulo pam_nologin(8)
`/etc/securetty` | acote el acceso a tty para el superusuario por medio del módulo pam_securetty(8)
`/etc/security/access.conf` | acote los permisos de acceso mediante el módulo pam_access(8)
`/etc/security/group.conf` | restrinja los grupos básicos por medio del módulo pam_group(8)
`/etc/security/pam_env.conf` | asigne variables de entorno mediante el módulo pam_env(8)
`/etc/environment` | asigne más variables de entorno mediante el módulo pam_env(8) con el parámetro «`readenv=1`»
`/etc/default/locale` | establecer la configuración regional mediante el módulo pam_env(8) con el argumento "`readenv=1 envfile=/etc/default/locale`" (Debian)
`/etc/security/limits.conf` | establecer la restricción de los recursos (ulimit, core, ...) mediante el módulo pam_linits(8)
`/etc/security/time.conf` | establecer la restricción de tiempo mediante el módulo pam_time(8)
`/etc/systemd/logind.conf` | Establece la configuración del administrador de inicio de sesión para `systemd` (ver logind.conf(5) y systemd-logind.service(8))

Las normas para la selección de contraseñas se desarrolla en los módulos PAM, pam_unix(8) y pam_cracklib(8). Se pueden configurar por sus parámetros.

| Sugerencia
Los nombres de archivos de los módulos de PAM usan el sufijo «`.so`».

### 4.5.2. La actual gestión centralizada de sistemas

La gestión moderna de sistemas centralizados puede desplegarse empleando un servidor central LDAP (Protocolo Ligero de Acceso a Directorios) que administre los sistemas en la red, sean estos tipo Unix o de otro tipo. La implementación de código libre de este protocolo es el software OpenLDAP.

El servidor LDAP proporciona información de la cuenta mediante PAM y NSS con los paquetes `libpam-ldapd` y `libnss-ldapd` del sistema Debian. Se necesitan distintas acciones para activarlo (La siguiente configuración no está comprobada y es información totalmente secundaria. Por favor léala en este contexto).

- Puede configurar un servidor centralizado LDAP ejecutando un programa como el demonio LDAP centralizado, slapd(8).

- Cambie los archivos de configuración PAM en el directorio «`/etc/pam.d/`» para usar «`pam_ldap.so`» en vez de la opción por defecto «`pam_unix.so`».

- Cambie la configuración NSS en el archivo «`/etc/nsswitch.conf`» para usar `ldap` en vez de la opción por defecto («`compat`» o «`file`»).

- Una contraseña segura necesita que `libpam-ldapd` use conexiones SSL (o TLS).

- La integridad de los datos necesita que `libnss-ldapd` utilice conexiones SSL (o TLS) con la sobrecarga de red de LDAP.

- Debería ejecutar nscd(8) para que la caché almacene cualquier resultado de una búsqueda de LDAP con el fin de reducir el tráfico de red de LDAP.

Consulte los documentos nsswitch.conf(5), pam.conf(5), ldap.conf(5) y «`/usr/share/doc/libpam-doc/html/`» que contiene el paquete `libpam-doc`, e «`info libc 'Name Service Switch'`» que contiene el paquete `glibc-doc`.

De forma parecida, se pueden instalar sistemas centralizados para otro métodos.

- Integración de usuarios y grupos con sistemas Windows.

  - Se accede a servicios de dominio Windows por medio de los paquetes `winbind` y `libpam_winbind`.

  - Consulte winbindd(8) y Integración de redes MS Windows con Samba.

- Integración de usuarios y grupos con sistemas tipo Unix antiguos.

  - Acceso a NIS (originalmente llamado páginas amarillas (YP) o NIS+ mediante el paquete `nis`.

  - Consulte «The Linux NIS(YP)/NYS/NIS+ HOWTO«.

### 4.5.3. «Razones por las que GNU no tienen la funcionalidad del grupo wheel«

Esta frase famosa al final de la página antigua de «`info su`» de Richard M. Stallman. Para no preocuparse: la orden actual `su` en Debian usa PAM, así este puede limitar el uso de `su` al grupo `root` habilitando la línea «`pam_wheel.so`» en «`/etc/pam.d/su`».

### 4.5.4. Regla estricta para contraseñas

Instale el paquete `libpam-cracklib` y podrá aplicar estrictas reglas de contraseña.

En un sistema GNOME típico, donde se instalaría `libpam-gnome-keyring`, "`/etc/pam.d/common-password`" se vería así:

    # here are the per-package modules (the "Primary" block)
    password	requisite			pam_cracklib.so retry=3 minlen=8 difok=3
    password	[success=1 default=ignore]	pam_unix.so obscure use_authtok try_first_pass yescrypt
    # here's the fallback if no module succeeds
    password	requisite			pam_deny.so
    # prime the stack with a positive return value if there isn't one already;
    # this avoids us returning an error just because nothing sets a success code
    # since the modules above will each just jump around
    password	required			pam_permit.so
    # and here are more per-package modules (the "Additional" block)
    password	optional	pam_gnome_keyring.so
    # end of pam-auth-update config

## 4.6. Acreditación de seguridad

| Nota
La información que se facilita aquí puede no ser suficiente para la seguridad que necesita pero puede ser un buen comienzo.

### 4.6.1. Contraseñas seguras en Internet

Los servicios de la capa de transporte más usados usan mensajes que incluyen la acreditación mediante contraseñas en texto plano. Es una mala idea emitir contraseñas en texto plano en una red descentralizada donde se pueden interceptar. Puede ejecutar estos servicios sobre la «Capa de Transporte Segura« (TLS) o su predecesor «Secure Sockets Layer« (SSL) para asegurar por medio del cifrado todas las comunicaciones incluidas las contraseñas.

Tabla 4.7. Relación de servicios y puertos seguros e inseguros

Nombre del servicio inseguro | puerto | nombre del servicio seguro | puerto
--- | --- | --- | ---
www (http) | 80 | https | 443
smtp (mail) | 25 | ssmtp (smtps) | 465
ftp-data | 20 | ftps-data | 989
ftp | 21 | ftps | 990
telnet | 23 | telnets | 992
imap2 | 143 | imaps | 993
pop3 | 110 | pop3s | 995
ldap | 389 | ldaps | 636

El coste de tiempo de CPU del cifrado. Como alternativa más eficiente para la CPU, se pueden mantener las comunicaciones en texto plano y securizando la contraseña con el protocolo de acreditación como «Protocolo de Acreditación de Oficina de Correos (Authenticated Post Office Protocol, APOP )« para POP y «Mecanismo de acreditación reto-respuesta MD5(Challenge-Response Authentication Mechanism MD5, CRAM-MD5)« para SMTP e IMAP. (Para el envío de mensajes de correo en Internet a su servidor de correo desde su cliente de correo, se ha vuelto usual el uso del puerto 587 para la recepción de mensajes en vez del tradicional puerto 25 SMTP para evitar el bloqueo del puerto 25 por el proveedor de red mientras se acredita con CRAM-MD5.)

La acreditación tradicional, basada en contraseñas, sufre de problemas de seguridad intrínsecos, como el uso del mismo password para distintos sitios. Aprenda sobre otros métodos más seguros de acreditación para encontrar una solución segura: Password descartable basado en la hora (TOTP), Segundo Factor Universal (U2F), Web Authentication (WebAuthn, normalmente llamado "passkey")

### 4.6.2. «Secure Shell«

El programa Secure Shell (SSH) ofrece comunicaciones cifradas seguras entre dos equipos no confiables sobre una red insegura con acreditación segura. Consiste en el cliente OpenSSH, ssh(1) y el demonio OpenSSH, sshd(8). Este SSH se puede usar para realizar un túnel de un protocolo de comunicación inseguro como es POP y asegurar X sobre Internet con la funcionalidad de reenvío de puerto (port forwarding).

El cliente intenta acreditarse a si mismo usando la acreditación basada en equipos, acreditación de clave pública, acreditación reto-respuesta, o acreditación por contraseña. El uso de acreditación por clave pública permite acceso remoto sin contraseña. Consulte Sección 6.3, “Servidor de acceso remoto (SSH) y utilidades”.

### 4.6.3. Medidas extraordinarias de seguridad en Internet

Incluso si ejecutas servicios de seguridad como Secure Shell (SSH) y protocolo de tunelización punto a punto (PPTP), En Internet, todavía existe la oportunidad de obtener acceso mediante ataques de adivinación de contraseñas de fuerza bruta. El uso de una política de firewall (ver Sección 5.7, “Infraestructura Netfilter”), junto con las siguientes herramientas de seguridad, puede mejorar la situación de seguridad.

Tabla 4.8. Relación de herramientas que aportan medidas extra de seguridad

paquete | popularidad | tamaño | descripción
--- | --- | --- | ---
`knockd` | V:0.7, I:1.7 | 110 | Pequeño demónio port-knock knockd(1) y cliente knock(1)
`fail2ban` | V:102, I:113 | 2191 | prohibición de las IPs con múltiples errores de acreditación
`libpam-shield` | V:0.05, I:0.05 | 115 | bloquea atacantes remotos que intentan adivinar contraseñas

### 4.6.4. Asegurando la contraseña de root

Para evitar que las personas accedan a tu máquina con privilegios de root, debes realizar las siguientes acciones.

- Prevent physical access to the system storage device (HDD / SSD / ...)

- Bloquee UEFI/BIOS y evita el arranque desde los medios extraíbles

- Asigne una contraseña a las sesiones interactivas de GRUB

- Bloquee la edición del menú de GRUB

With physical access to the system storage device, resetting the password is relatively easy with following steps.

1. Move the system storage device to a PC with USB bootable UEFI/BIOS.

2. Boot system with a rescue media (see Sección 3.2.2, “Linux live rescue system on USB”).

3. Monte la partición raíz con permisos de lectura/escritura.

4. Edita "`/etc/passwd`" en la partición root y haz que la segunda entrada para la cuenta `root` esté vacía.

Si tienes acceso de edición a la entrada del menú del GRUB (consulta Sección 3.1.2, “Fase 2: el cargador de arranque”) para `grub-rescue-pc` en el momento del arranque, es aún más fácil con los siguientes pasos.

1. Arranque el sistema con el argumento del núcleo cambiado a algo como «`root=/dev/sda6 rw init=/bin/sh`».

2. Edite «`/etc/passwd`» y cree una segundo registro para una cuenta de `root` vacía.

3. Reinicie el sistema.

El intérprete de órdenes del superusuario del sistema es accesible sin contraseña.

| Nota

Una vez que tiene acceso al intérprete de órdenes del superusuario, tiene acceso a todo en el sistema y puede cambiar cualquier contraseña del sistema. Incluso, se pueden comprometer las contraseñas de todos los usuarios por medio de herramientas de «cracking« de fuerza bruta como los paquetes `john` y `crack` packages (ver Sección 9.5.10, “Sistema de seguridad y de comprobación de la integridad”). Estas contraseñas pirateadas pueden servir para comprometer otros sistemas.

La única solución software razonable es evitar lo anterior con la utilización de software que cifra la partición raíz (o la partición «`/etc`») usando dm-crypt e initramfs (ver Sección 9.9, “Trucos para cifrar información”). Sin embargo, siempre necesitará la contraseña para arrancar el sistema.

## 4.7. Otros controles de acceso

Existen controles de acceso al sistema además de la autenticación basada en contraseña y los permisos de archivo.

| Nota
Ver Sección 9.4.16, “Tecla Alt-SysRq” como limitar la funcionalidad clave de atención segura (SAK) del núcleo.

### 4.7.1. Listas de control de acceso (ACL)

Las ACL son un superconjunto de los permisos normales, como se explica en Sección 1.2.3, “Permisos del sistema de archivos”.

En los entornos de escritorio modernos, las ACL entran en acción. Cuando un dispositivo de almacenamiento USB formateado se monta automáticamente como, por ejemplo, "`/media/penguin/USBSTICK`", un usuario normal `penguin` puede ejecutarlo:

     $ cd /media/penguin
     $ ls -la
    total 16
    drwxr-x---+ 1 root    root    16 Jan 17 22:55 .
    drwxr-xr-x  1 root    root    28 Sep 17 19:03 ..
    drwxr-xr-x  1 penguin penguin 18 Jan  6 07:05 USBSTICK

"`+`" en la undécima columna indica que las ACL están en acción. Sin ACLs, un usuario normal `pingüino` no debería poder listar así ya que `pingüino` no está en el grupo `root`. Puedes ver ACLs como:

     $ getfacl .
    # file: .
    # owner: root
    # group: root
    user::rwx
    user:penguin:r-x
    group::---
    mask::r-x
    other::---

Aquí:

- "`usuario::rwx`", "`grupo::---`" y "`otro::---`" corresponden a los permisos normales de propietario, grupo y otro.

- La ACL "`user:penguin:r-x`" permite que un usuario normal `pingüino` tenga permisos "`r-x`". Esto permite a "`ls -la`" listar el contenido del directorio.

- La ACL "`mask::r-x`" establece el límite superior de los permisos.

Ver "Listas de control de acceso POSIX en Linux", acl(5), getfacl(1) y setfacl(1) para más información.

### 4.7.2. sudo

sudo(8) es un programa diseñado para permitir que el administrador de sistemas conceda ciertos privilegios de superusuario a los usuarios y registre su actividad. `sudo` necesita únicamente la contraseña del usuario normal. Una vez instalado el paquete `sudo` la configuración se realiza en el archivo «`/etc/sudoers`». Ver una configuración de ejemplo en «`/usr/share/doc/sudo/examples/sudoers`» y Sección 1.1.12, “Configuración de sudo”.

En un sistema monousuario, el uso que yo realizo de `sudo` (verSección 1.1.12, “Configuración de sudo”) pretende evitar mi propia estupidez. Personalmente, considero el uso de `sudo` como la mejor alternativa al uso de la cuenta de superusuario de forma constante. Por ejemplo, lo siguiente cambia el dueño de «`un_archivo`» a «`mi_nombre`».

    $ sudo chown my_name some_file

Desde luego si conoce la contraseña de «root« (como la conoce cualquier usuario que se instala Debian), cualquier orden puede ser ejecutada por «root« desde cualquier cuenta de usuario utilizando «`su -c`».

### 4.7.3. PolicyKit

PolicyKit es un componente del sistema operativo con el fin de controlar los privilegios del sistema en toda su extensión para sistemas operativos tipo Unix.

Los nuevas aplicaciones de interfaz gráfico de usuario no están diseñadas para ejecutarse como procesos privilegiados. Se comunican con los procesos privilegiados a través de PolicyKit realizando de forma eficiente las operaciones administrativas.

PolicyKit restringe cada operación a cuentas de usuario que pertenecer al grupo `sudo` en el sistema Debian.

Ver polkit(8).

### 4.7.4. Restricción de acceso a algunos servicios del servidor

Para la seguridad del sistema, es una buena idea deshabilitar tantos programas del servidor como sea posible. Esto es crítico en servidores en red. Tener servidores sin utilidad, ejecutándose como demonios o por medio de un programa super servidor, se considera un riesgo de seguridad.

Muchos programas, como sshd(8), utilizan PAM como control de acceso. Existen muchas maneras de limitar el acceso a algunos servicios de servidor.

- archivos de configuración: «`/etc/default/nombre_programa`»

- Configuración de la unidad de servicio Systemd para demonio

- PAM (Módulos de Autenticación Insertables (Pluggable Authentication Modules))

- «`/etc/inetd.conf`» para el super servidor

- «`/etc/hosts.deny`» y «`/etc/hosts.allow`» para TCP wrapper, tcpd(8)

- «`/etc/rpc.conf`» para Sun RPC

- «`/etc/at.allow`» y «`/etc/at.deny`» para atd(8)

- «`/etc/cron.allow`» y «`/etc/cron.deny`» para crontab(1)

- Cortafuegos de red de la infraestructura netfilter

Ver Sección 3.6, “Gestión del sistema”, Sección 4.5.1, “Archivos de configuración utilizados por PAM y NSS”, y Sección 5.7, “Infraestructura Netfilter”.

| Sugerencia
Los servicios Sun RPC necesitan estar activos para NFS y otros programas basados en RPC.

| Sugerencia
Si tiene problemas de acceso remoto en sistemas Debian recientes, comente las configuraciones que lo restringen como «`ALL: PARANOID`« en «`/etc/hosts.deny`» si existe. (Pero debe tener cuidado con los riesgos de seguridad que este tipo de acciones tienen.)

### 4.7.5. Características de seguridad de Linux

El kernel de Linux ha evolucionado y admite características de seguridad que no se encuentran en las implementaciones tradicionales de UNIX.

Linux soporta atributos extendidos que amplían los atributos tradicionales de UNIX (ver xattr(7)).

Linux divide los privilegios tradicionalmente asociados con el superusuario en distintas partes, conocidas como capabilities(7), que se puede habilitar y deshabilitar de forma independiente. Las capacidades son un atributo por subproceso desde la versión 2.2 del kernel.

La infraestructura Linux Security Module (LSM proporciona un mecanismo para varias pruebas de seguridad para que sean unidas por nuevas extensiones del kernel. Por ejemplo:

- AppArmor

- Security-Enhanced Linux (SELinux)

- Smack (Kernel de control de acceso obligatorio simplificado)

- Tomoyo Linux

Dado que estas extensiones pueden endurecer el tipo de privilegio más estricto que las políticas ordinarias de tipo de seguridad similares a las de Unix, incluso se puede restringir el poder de root. Recomendamos leer el documento marco de Linux Security Module (LSM) en kernel.org.

Linux namespaces empaqueta un recurso del sistema global en una abstracción que hace aparecer a los procesos dentro del espacio de nombres que tienen su propia instancia aislada del recurso global. Los cambios en el recurso global son visibles a otros procesos que son miembros del espacio de nombres, pero son invisibles a otros procesos. Desde el kernel 5.6, hay 8 tipos de espacios de nombres (ver namespaces(7), unshare(1), nsenter(1)).

A partir de Debian 11 Bullseye (2021), Debian utiliza jerarquía de grupos unificados (a.k.a. cgroups-v2).

Ejemplos de uso de namespaces con cgroups para aislar sus procesos y permitir el control de recursos son:

- Systemd. Ver Sección 3.3.1, “Arranque de systemd”.

- Sandbox environment. Ver Sección 7.7, “Sandbox”.

- Contenedores Linux tales como Docker, LXC. Ver Sección 9.11, “Sistemas virtualizados”.

Estas funcionalidades no se pueden realizar por Sección 4.1, “Acreditación normal de Unix”. Estos temas avanzados están fuera del alcance de este documento introductorio.

Capítulo 3. La inicialización del sistema |  | Capítulo 5. Configuración de red