Tabla de contenidos
Cuando una persona (o programa) necesita acceso al sistema, la acreditación confirma que la identidad es confiable.
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 | |
---|---|
Este capítulo esta desactualizado ya que esta fundamentado en Debian 7.0
( |
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:
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
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.
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 »
|
* | sin acceso a esta cuenta |
! | sin acceso a esta cuenta |
«/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 | |
---|---|
La pertenencia real a un grupo por parte de un usuario puede ser añadido de
forma dinámica si la línea « |
Nota | |
---|---|
El paquete |
Aquí estan 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 <nombre_de_usuario>
|
navega por la información de la cuenta de
«<nombre_de_usuario> »
|
getent shadow <nombre_de_usuario>
|
navega por la información de cuenta «oculta« de
«<nombre_de_usuario> »
|
getent group <nombre_del_grupo>
|
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. Consulte crypt(3) sobre el cifrado de la contraseña y datos.
Nota | |
---|---|
On the system set up with PAM and NSS as the Debian salsa machine, the content of local
" |
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 | |
---|---|
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.
Tabla 4.4. Relación de herramientas para generar contraseñas
paquete | popularidad | tamaño | orden | función |
---|---|---|---|---|
whois
|
V:42, I:516 | 355 |
mkpasswd
|
interfaz con múltiples funcionalidades de la biblioteca crypt(3) |
openssl
|
V:808, I:992 | 1452 |
openssl passwd
|
resumenes criptográficos de las contraseñas (OpenSSL). passwd(1ssl) |
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:
Tabla 4.5. Relación de sistemas PAM y NSS relevantes
paquete | popularidad | tamaño | descripción |
---|---|---|---|
libpam-modules
|
V:842, I:999 | 1059 | Módulos de acreditación conectables (servicios básicos) |
libpam-ldap
|
V:1, I:14 | 244 | PAM permite conectar con servicios LDAP |
libpam-cracklib
|
I:16 | 116 | PAM para dar soporte a cracklib |
libpam-systemd
|
V:454, I:760 | 393 |
Pluggable Authentication Module to register user sessions for
logind
|
libpam-doc
|
I:1 | 1031 | PAM (documentación en html y texto) |
libc6
|
V:937, I:999 | 12333 | Biblioteca GNU C: bibliotecas compartidas que ofrecen también el intercambio del servicio de nombres |
glibc-doc
|
I:13 | 2995 | Biblioteca GNU C: «manpages« |
glibc-doc-reference
|
I:5 | 13278 | Biblioteca GNU C: Manual de Referencia en info, formatos pdf y html («non-free«) |
libnss-mdns
|
I:557 | 119 | Módulo NSS para resolución de nombres DNS sin servidor DNS |
libnss-ldap
|
I:12 | 255 | Módulo NSS para su integración con el servicio de nombres por LDAP |
libnss-ldapd
|
I:19 | 152 |
Módulo NSS para utiliza LDAP como servicio de nombres (nueva bifurcación de
libnss-ldap )
|
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 | |
---|---|
Puede obtener una relación más completa y actualizada mediante la orden
« |
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.
Tabla 4.6. Relación de archivos de configuración utilizados por PAM y NSS
archivo de configuración | función |
---|---|
/etc/pam.d/<nombre_de_programa>
|
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
|
asigne la configuración regional mediante el módulo
pam_env(8)
con el parámetro (de Debian) «readenv=1
envfile=/etc/default/locale »
|
/etc/security/limits.conf
|
acote el uso de recursos (ulimit, core, …) mediante el módulo pam_linits(8) |
/etc/security/time.conf
|
restrinja la asignación de tiempo mediante el módulo pam_time(8) |
/etc/systemd/logind.conf
|
set systemd login manager configuration (see
logind.conf(5)
and
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). Pueden ser configuradas por sus parámetros.
Sugerencia | |
---|---|
Los nombres de archivos de los módulos de PAM usan el sufijo
« |
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.
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«.
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
».
La instalación del paquete libpam-cracklib
le permite
obligar al cumplimiento estricto de reglas para contraseñas, por ejemplo,
teniendo activas las líneas en
«/etc/pam.d/common-password
» como sigue:
En squeeze
:
password required pam_cracklib.so retry=3 minlen=9 difok=3 password [success=1 default=ignore] pam_unix.so use_authtok nullok md5 password requisite pam_deny.so password required pam_permit.so
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.
archivos de configuración:
«/etc/default/<nombre_programa>
»
service unit configuration for daemon
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
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 | |
---|---|
Si tiene problemas de acceso remoto en sistemas Debian recientes, comente
las configuraciones que lo restringuen como «ALL: PARANOID« en
« |
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.
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 «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”.
Incluso cuando ejecute servicios seguros como servidores Secure Shell (SSH) y Protocolo de Túnel Punto a Punto (Point-to-point tunneling protocol, PPTP), todavía existen posibilidades de «hackeo« usando ataques de fuerza bruta para adivinar la contraseña etc. desde Internet. El uso de directrices de cortafuegos (consulte Sección 5.10, “Infraestructura Netfilter”) junto con las herramientas de seguridad que siguen pueden mejorar la seguridad.
Tabla 4.8. Relación de herramientas que aportan medidas extra de seguridad
paquete | popularidad | tamaño | descripción |
---|---|---|---|
knockd
|
V:0, I:2 | 89 | pequeño demonio de golpeo de puertos (port-knock) knockd(1) y el cliente konck(1) |
fail2ban
|
V:103, I:114 | 1735 | prohibición de las IPs con múltiples errores de acreditación |
libpam-shield
|
V:0, I:0 | 115 | bloquea atacantes remotos que intentan adivinar contraseñas |
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:
Mueva el disco duro a un PC con una BIOS capaz de arrancar desde CD.
Arranque el sistema con un medio de rescate (disco de arranque Debiam. Knoppix CD, GRUB CD, ...).
Monte la partición raíz con permisos de lectura/escritura.
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:
Arranque el sistema con el argumento del núcleo cambiado a algo como
«root=/dev/hda6 rw init=/bin/sh
».
Edite «/etc/passwd
» y cree una segundo registro para una
cuenta de root
vacia.
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 |
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.