Pregunta

Estoy interesado en escribir un módulo PAM que haría uso de un mecanismo de autenticación popular para los inicios de sesión de Unix. La mayor parte de mi experiencia en programación pasado ha sido en Python, y el sistema que estoy interactuando con ya cuenta con una API de Python. I googled alrededor y encontró pam_python , que permite a los módulos PAM para invocar el intrepreter pitón, por lo tanto permitiendo módulos PAM a escribirse en esencia en Python.

Sin embargo, he leído que hay riesgos de seguridad al permitir a un usuario para invocar código Python que funciona con un nivel de acceso más alto que el propio usuario, tales como scripts de Python SUID. Son estas preocupaciones aplicables a un módulo de Python PAM así?

¿Fue útil?

Solución

Los problemas de seguridad que mencionas no son, per se, sobre "que permite al usuario invocar código Python", que se ejecuta con altos niveles de acceso, pero que permite al usuario ejercer cualquier forma de Control el control el funcionamiento de dicho código - más obviamente mediante la inyección o alterar el código en sí, pero, de manera más sutil, también mediante el control de entorno de ese proceso (y por lo tanto la ruta desde la que ese código importa módulos, por ejemplo). (Preocupaciones similares se aplican con el código C-escrito si el usuario era capaz de controlar la trayectoria del cual esta última cargas de .so por ejemplo - aunque el sistema operativo pueden ayudar de manera más directa con tal preocupación).

Me parece que pam_python está bien blindado contra tales riesgos, y lo que debe ser utilizable de manera segura para sus propósitos. Sin embargo, hacer notar que los documentos señalar ...:

  

Los módulos PAM escritura desde incurre en Python   una gran penalización en el rendimiento y   requiere Python para ser instalado, por lo que   No es la mejor opción para la escritura   módulos que se utilizan ampliamente.

Por lo tanto, si tienes razón en que el mecanismo que está suministrando va a ser popular, es probable que desee para codificar el módulo en C para evitar estos problemas. Sin embargo, la creación de prototipos en Python como una prueba de concepto con distribución limitada, antes de reafirmar que en C, es una estrategia viable.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top