¿Cómo se cambia el retraso que ocurre después de ingresar una contraseña incorrecta?

32

Después de ingresar una contraseña incorrecta en la solicitud de inicio de sesión, hay un retraso de aproximadamente 3 segundos. ¿Cómo puedo cambiar eso en un sistema Linux con PAM?

Shawn J. Goff
fuente
1
Tengo la necesidad de un retraso desde una perspectiva de seguridad, pero el retraso predeterminado es bastante molesto
Mike Pennington
3
Esto ha sido interesante; tal vez escribiré un módulo que permita N intentos sin demora seguido de cualquier número de intentos con un retraso prolongado.
Shawn J. Goff
1
En lugar de un nuevo módulo (sugerido en mi comentario anterior), utilicé pam_unixcon la nodelayopción y pam_tally2con deny=5 unlock_time=15; Esto permite 5 reintentos inmediatos, pero niega el acceso (incluso con una contraseña correcta) durante 15 segundos. Todavía tengo la intención de intentar escribir el modelo descrito, pero ahora es un proyecto secundario, porque esto no sería adecuado si su acceso principal al sistema está basado en la red, ya que hace que un ataque de DOS sea trivial.
Shawn J. Goff
1
si le preocupa un DoS de red debido a tiempos de espera, use fail2ban ... de hecho, úselo incluso si cree que está seguro :-). uso dos días de prohibición
Mike Pennington

Respuestas:

21

Supongo que estás usando Linux y pam. El retraso probablemente sea causado por pam_faildelay.so. Verifique la configuración de su pam /etc/pam.dusando pam_faildelay, por ejemplo:

# Enforce a minimal delay in case of failure (in microseconds).
# (Replaces the `FAIL_DELAY' setting from login.defs)
# Note that other modules may require another minimal delay. (for example,
# to disable any delay, you should add the nodelay option to pam_unix)
auth       optional   pam_faildelay.so  delay=3000000

Para cambiar el tiempo, ajuste el parámetro de retraso. Si desea deshacerse del retraso, puede eliminar / comentar la línea completa.

Otra fuente de la demora puede ser pam_unix.so. Para deshabilitar el retraso causado por pam_unix.soagregar el nodelayparámetro y, opcionalmente, agregar una línea que llame pam_faildelay.sopara agregar un retraso (variable) en su lugar, por ejemplo:

auth       optional   pam_faildelay.so  delay=100000
Ulrich Dangel
fuente
2
No hay mención de retraso en ninguna parte /etc/pam.d/*. Lo más parecido que veo es lo pam_tally.soque permite el bloqueo después de varios intentos. Pero tengo n /etc/login.defs, que podría ser lo que necesito.
Shawn J. Goff
@ ShawnJ.Goff pam_tally.sono causa un retraso hasta donde yo sé. Puede ser otra fuente del acuerdo pam_unix.so: puede deshabilitarlo con la nodelayopción; consulte linux.die.net/man/8/pam_unix para obtener más detalles
Ulrich Dangel
1
Agregar la nodelayopción pam_unix.soy agregar una nueva entrada con pam_faildelay.so delay=$some_numberme permite configurar lo que quiera. ¡Gracias!
Shawn J. Goff
2
Al ejecutar fedora 23, tuve que deshabilitar el pam_unix.soretraso y comenzar a usar el pam_faildelay.soque dice @ ShawnJ.Goff. Sin embargo, la mayoría de las pam.dconfiguraciones tienen " Este archivo se genera automáticamente. Los cambios del usuario se destruirán la próxima vez que se ejecute authconfig " . Entonces, ¿dónde puedo configurar permanentemente el retraso?
jozxyqk
11

Necesita pasar el nodelayparámetro a auth pam_unix.so.

Dependiendo de cómo se esté autenticando, el lugar donde necesita establecer el parámetro varía. Sin embargo, la mayoría de las distribuciones de Linux tienen algo como lo /etc/pam.d/system-authque se incluye en todos los archivos diferentes.

Entonces, por ejemplo /etc/pam.d/system-auth, puede tener una línea que se vea así:

auth            sufficient      pam_unix.so try_first_pass nullok

Esto debería cambiarse a:

auth            sufficient      pam_unix.so try_first_pass nullok nodelay

El pam_unix.somódulo es el que realiza la autenticación contra /etc/passwdy /etc/shadow. Si usted está usando LDAP o algún otro motor de contraseñas, es probable que aún debe estar fijándose nodelayen el pam_unix.soya que es lo que controla el símbolo (cuando pam_unix.sodeja de autenticación, que por lo general sólo pasa la contraseña se obtiene con el siguiente módulo).

Puedes leer más sobre pam_unix.sohaciendoman pam_unix

Patricio
fuente
En mi sistema system-authno existía; fue /etc/common-auth. ¡Gracias!
Luc