Cambiar las contraseñas de las cuentas de usuario desde un script PHP: ¿vulnerabilidades? [cerrado]

-1

Comencé un hilo hace un tiempo atrás, solicitando sugerencias sobre una buena manera (buena = bastante segura) de permitir a los usuarios cambiar las contraseñas de sus cuentas a través de un script PHP. (¿POR QUÉ? Porque en este servidor en particular, tengo muchos usuarios solo de correo electrónico sin acceso a la shell que necesitan poder cambiar sus contraseñas sin pedirme que lo haga por ellos).

Las pocas respuestas dadas realmente no ayudaron. No quiero volcar las contraseñas en un archivo, o hacer algún tipo de actualización por lotes cada x segundos. Debe ser un sistema inmediato y seguro para subprocesos que 1) requiere que el usuario verifique su contraseña existente y 2) cambie la contraseña inmediatamente (sin procesamiento por lotes).

Así que creé una utilidad ejecutable y un pequeño script PHP para lograr esto. Los envío aquí para su revisión, con la esperanza de que la comunidad pueda señalar las cosas que hice mal / las formas en que esto puede ser vulnerable a los ataques, y con la esperanza de que ayude a otra persona.

Información de configuración: La utilidad 'chpwd' está configurada para ejecutar la raíz SUID, necesaria para acceder al archivo / etc / shadow. No puedo ver ninguna manera de evitar esto. Tenga en cuenta que el código real de "cambio de contraseña" que accede al archivo / etc / shadow se copia directamente desde la fuente de la utilidad 'passwd'.

El script chpasswd.php se ejecuta con permisos estándar en el servidor web.

Aquí está el código de ejemplo:

chpwd.c: enlace

chpasswd.php: enlace

Gracias de antemano por todas las críticas y sugerencias constructivas.

    
pregunta Ryan Griggs 18.12.2012 - 21:58
fuente

1 respuesta

9

/ yo respira profundamente

Primero comencemos con el concepto. Esto es un poco sospechoso. Lograr que los usuarios recuerden una contraseña que usan todos los días es lo suficientemente difícil: si usan un MUA que les recuerda su contraseña, esto no le ahorrará tiempo ni esfuerzo.

La siguiente pregunta es ¿por qué estás reinventando la rueda? chpasswd viene con la mayoría de las versiones de Linux y algunos Unix, y la fuente El código está disponible gratuitamente. Además, a diferencia de su código, utiliza correctamente PAM para manipular adecuadamente los tokens de autenticación. O incluso simplemente usando passwd para manejar la operación (esta última requiere un contenedor de script o un control PHP esperado) , mientras que ambos enfoques utilizarían sudo o podrían invocarse a través de una sesión ssh autenticada con el nombre de usuario / contraseña anterior suministrados.

Pero incluso si nunca va a cambiar su backend de autenticación ni sus algoritmos de cifrado y no se molesta en omitir los controles de la política (como las cuentas bloqueadas / caducadas) y está muy contento de abreviar completamente el PAM, ¿por qué? ¿Está implementando su propio analizador para el código en lugar de usar las funciones getpwent / setpwent ?

    
respondido por el symcbean 18.12.2012 - 22:51
fuente

Lea otras preguntas en las etiquetas