Capítulo 4. Acreditación

Tabla de contenidos

4.1. Acreditación normal de Unix
4.2. Gestionando información de cuentas y contraseñas
4.3. Buenas contraseñas
4.4. Creando una contraseña cifrada
4.5. PAM y NSS
4.5.1. Archivos de configuración utilizados por PAM y NSS
4.5.2. La actual gestión centralizada de sistemas
4.5.3. «Razones por las que GNU no tienen la funcionalidad del grupo wheel«
4.5.4. Regla estricta para contraseñas
4.6. Otros controles de acceso
4.6.1. sudo
4.6.2. PolicyKit
4.6.3. SELinux
4.6.4. Restricción de acceso a algunos servicios del servidor
4.7. Acreditación de seguridad
4.7.1. Contraseñas seguras en Internet
4.7.2. «Secure Shell«
4.7.3. Medidas extraordinarias de seguridad en Internet
4.7.4. Asegurando la contraseña de root

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

[Aviso] Aviso

Una configuración erronea 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.

[Aviso] Aviso

Este capítulo esta desactualizado ya que esta fundamentado en Debian 7.0 (Wheezy) publicado en 2013.

La acreditación normal de Unix la proporciona el módulo pam_unix(8) de PAM (Módulos de acreditación conectables (Pluggable Authentication Modules)). Existen tres archivos de configuración importantes, que usan «:» como separador de entradas y son los siguiente:


«/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 passwd(5), cada campo separado por «:» tiene el siguiente significado:

  • 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» era usada 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.


«/etc/shadow» tiene el siguiente contenido:

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

Como detalla shadow(5), cada entrada del fichero esta separado por «:» y tiene el significado:

  • 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 dias 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 constraseña

  • Número de dias antes de que la contraseña deje de ser válida durante los cuales se avisará al usuario de ello

  • Número de dias 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:

group1:x:20:user1,user2

Como se detalla en group(5), cada entrada separada por por «:» tiene el siguiente significado:

  • Nombre del grupo

  • Contraseña cifrada (no usado)

  • ID numérico de grupo

  • relación de los nombres de usuario separados por «,«

[Nota] Nota

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

[Nota] 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». Consulte pam_group(8).

[Nota] Nota

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

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


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

[Nota] Nota

On the system set up with PAM and NSS as the Debian salsa machine, the content of local "/etc/passwd", "/etc/group" and "/etc/shadow" may not be actively used by the system. Above commands are valid even under such environment.

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 carácteres 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] 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.

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


Los sistemas modernos tipo Unix como el sistema Debian proporciona los mecanismos PAM (Módulos de Acreditación Conectables) y NSS (Intercambiador de Servicio de Nombres (Name Service Switch) al administrador de sistemas local para configurar su sistema. El perfil de estos pueden ser resumidos como sigue:

  • PAM ofrece mecanismos flexibles de acreditación que son usados por las aplicaciones software mediante el intercambio de datos de contraseñas.

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

Estos sistemas PAM y NSS necesitan ser configurados de forma coherente.

Los paquetes relevantes de los sistemas PAM y NSS son los siguientes:


  • Es esencial para aprender a configurar PAM la «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] 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] 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.

Under systemd, libpam-systemd package is installed to manage user logins by registering user sessions in the systemd control group hierarchy for logind. See systemd-logind(8), logind.conf(5), and pam_systemd(8).

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


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

[Sugerencia] Sugerencia

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

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-ldap y libnss-ldap 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».

    • Debian utiliza los archivos «/etc/pam_ldap.conf» para la configuración de libpam-ldap y «/etc/pam_ldap.secret» para archivar la contraseña de root.

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

    • Debian utiliza el archivo «/etc/libnss-ldap.conf» para la configuración de libnss-ldap.

  • Una contraseña segura necesita que libpam-ldap use conexines SSL (o TLS).

  • La integridad de los datos necesita que libnss-ldap 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 pam_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.

[Nota] Nota

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

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». Consulte 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 (consulteSecció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 <mi_nombre> <un_archivo>

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».

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 esan 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 restrinje cada operación a cuentas de usuario que pertenecer al grupo sudo en el sistema Debian.

Consulte polkit(8).

Security-Enhanced Linux (SELinux) es un marco que se ajusta a un modelo de privilegios más preciso que el modelo de seguridad de tipo Unix con las políticas de control de acceso obligatorio (MAC). El poder del superusuario pueden ser limitado bajo ciertas condiciones.

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.

See Sección 3.2.6, “System management under systemd”, Sección 4.5.1, “Archivos de configuración utilizados por PAM y NSS”, and Sección 5.10, “Infraestructura Netfilter”.

[Sugerencia] Sugerencia

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

[Sugerencia] Sugerencia

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

[Nota] Nota

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

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 pueden ser interceptados. 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.


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 «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 envio 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 tradicioal puerto 25 SMTP para evitar el bloqueo del puerto 25 por el proveedor de red mientras se acredita con CRAM-MD5.)

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 puede ser usado para realizar un túnel de un protocolo de comunicación inseguro como es POP y securizar X sobre Internet con la funcionalidad de reenvio 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.9, “Servidor de acceso remoto (SSH) y utilidades”.

Para evitar que la gente acceda a su equipo con privilegios de root, necesita realizar las siguientes acciones:

  • Impide el acceso físico al disco duro

  • Bloquea la BIOS y evita el arranque de un medio externo

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

  • Bloquee la edición del menú de GRUB

Con acceso físico al disco duro, resetear la contraseña es relativamente fácil siguiendo los pasos:

  1. Mueva el disco duro a un PC con una BIOS capaz de arrancar desde CD.

  2. Arranque el sistema con un medio de rescate (disco de arranque Debiam. Knoppix CD, GRUB CD, ...).

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

  4. Edite «/etc/passwd» en la partición raíz y cree un segundo registro para la cuenta de root vacía.

Si tiene acceso edite el registro del menú GRUB (consulte Sección 3.1.2, “Fase 2: el cargador de arranque”) para grub-rescue-pc en el arranque, es incluso más fácil siguiendo los pasos:

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

  2. Edite «/etc/passwd» y cree una segundo registro para una cuenta de root vacia.

  3. Reinicie el sistema.

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

[Nota] 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 (see Sección 9.4.11, “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 (consulte Sección 9.8, “Trucos para cifrar información”). Sin embargo, siempre necesitará la contraseña para arrancar el sistema.