¿Preocupaciones de seguridad con un módulo Python PAM?

Estoy interesado en escribir un módulo PAM que haga uso de un mecanismo de autenticación popular para los inicios de sesión de Unix. La mayor parte de mi experiencia de progtwigción anterior ha sido en Python, y el sistema con el que estoy interactuando ya tiene una API de Python. Busqué en Google y encontré pam_python , que permite a los módulos PAM invocar al intrepreter de python, lo que permite que los módulos de PAM se escriban esencialmente en Python.

Sin embargo, he leído que existen riesgos de seguridad al permitir que un usuario invoque el código Python que se ejecuta con un nivel de acceso más alto que el propio usuario, como los scripts SUID de Python. ¿Son estas preocupaciones aplicables a un módulo PAM de Python también?

Las preocupaciones de seguridad que menciona no son, per se, sobre “permitir que el usuario invoque el código de Python”, que se ejecuta con altos niveles de acceso, sino que le permite ejercer cualquier forma de control sobre la ejecución de dicho código, obviamente inyectando o alterando el código en sí, pero, más sutilmente, también controlando el entorno de ese proceso (y, por lo tanto, la ruta desde la que ese código importa módulos, por ejemplo). (Las preocupaciones similares se aplicarían con el código escrito en C si el usuario pudiera controlar la ruta desde la cual este último carga, por ejemplo, aunque el sistema operativo puede ayudar más directamente con esa preocupación).

Me parece que pam_python está bien pam_python contra tales riesgos, por lo que debería poder usarse de manera segura para sus propósitos. Sin embargo, tenga en cuenta que los documentos señalan …

Escribir módulos PAM de Python incurre en una gran penalización de rendimiento y requiere que Python esté instalado, por lo que no es la mejor opción para escribir módulos que se usarán ampliamente.

Por lo tanto, si tiene razón en que el mecanismo que está suministrando será popular, es probable que desee codificar su módulo en C para evitar estos problemas. Sin embargo, crear un prototipo en Python como una prueba de concepto con una distribución limitada, antes de consolidarlo en C, es una estrategia viable.