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.