De vez en cuando, buscaré cómo hacer permisos a nivel de usuario para el acceso al puerto de red en Linux y apareceré bastante seco. Por ejemplo, si tiene una máquina que ejecuta un proceso crítico que escucha en el puerto 5080, creo que debería haber una manera de dar acceso a ese puerto a un conjunto particular de usuarios confiables, al igual que cualquier otro proceso de permisos sensatos. hecho, como los permisos del sistema de archivos.
Pero parece que los puertos altos están disponibles para todos los usuarios, y los puertos bajos están disponibles solo para rootear, con solo hacks crudos como authbind y reenvío con iptables para permitir que otros usuarios usen puertos bajos. Parece una situación muy extraña, así que me pregunto, ¿por qué fue diseñado de esa manera y por qué las personas no han sentido la necesidad de cambiar esa situación?
Inicialmente, supongo, porque habría requerido un diseño complejo que estaba fuera de línea con el alcance de los primeros sistemas Unix.
Más tarde, supongo, porque había una forma establecida de implementar permisos de puerto de red a nivel de usuario para casos comunes: inetd , que apareció unos años después después de ( 4.3BSD ) TCP / IP ( 4.2BSD ). El
inetd
daemon se ejecuta como root y escucha en los puertos especificados en su archivo de configuración. En una conexión entrante,inetd
genera otro programa especificado en su archivo de configuración, y que se ejecuta como un usuario también especificado en el archivo de configuración inetd. Entonces, al menos para los servicios donde es aceptable comenzar un nuevo proceso en cada conexión, el problema está resuelto.fuente
Creo que una razón es que la mayoría de los usuarios necesitan poder usar puertos efímeros para conectarse a otros servidores, sin ser necesariamente root.
fuente