Actualmente estoy creando un sistema de autenticación utilizando PAM de Linux para un proceso de daemon de Python. Será necesario autenticar a los usuarios remotos de una variedad de front-end contra la lista de usuarios locales. (Entre otras opciones, pero con las que no tengo problemas) se utilizará como un sistema centralizado de administración y configuración.
Sin embargo, debido a que es un poco insano desde el punto de vista de la seguridad ejecutar el daemon como root, he estado buscando alternativas.
Las opciones que encontré fueron:
- Creando un grupo con acceso de lectura al archivo
/etc/shadow
y agregando el usuario daemon al grupo. (El inconveniente adicional, también necesitará acceso de escritura si necesita actualizar las credenciales de los usuarios. Esto puede volver al problema de raíz inicial). - Invocando un shell desde el daemon y use
su
para cambiar temporalmente al usuario root / dado antes de autenticar. (Un ejemplo incluye hacersu [username]
, lo que significaría que se autentica si la llamada se realiza correctamente). - Creando un proceso separado que solo se autentica bajo la raíz y se comunica a través de los sockets de dominio UNIX. (Esto actualmente tiene mi preferencia, ya que los otros dos se parecen más a soluciones informáticas falsas).
Tengo la molesta sensación de que me estoy perdiendo una solución obvia, pero no tengo idea de lo que sería. Si este no es el caso, ¿cuál sería preferible desde un punto de vista de seguridad? Lo que encontré fue que se dividió entre las distintas opciones sin una visión más clara de las compensaciones o cómo se compara con las otras opciones. Debido a la naturaleza de las aplicaciones que administrará, la seguridad es la máxima prioridad en lo que respecta a cualquier solución.