De temps en temps, je vais chercher comment faire des autorisations au niveau utilisateur pour l'accès au port réseau sous Linux et arriver plutôt sec. Par exemple, si vous avez une machine qui exécute un processus critique qui écoute sur le port 5080, je pense qu'il devrait y avoir un moyen de donner à un ensemble particulier d'utilisateurs de confiance un accès à ce port - tout comme la façon dont tout autre processus d'autorisations sain est fait, comme les autorisations du système de fichiers.
Mais il semble que les ports élevés soient disponibles pour tous les utilisateurs, et les ports bas ne sont disponibles que pour root, avec seulement des hacks grossiers comme authbind et le transfert avec iptables pour permettre aux autres utilisateurs d'utiliser des ports bas. Cela semble être une situation très étrange, alors je me demande pourquoi il a été conçu de cette façon et pourquoi les gens n'ont pas ressenti le besoin de changer cette situation?
Initialement, je suppose, car cela aurait nécessité une conception complexe qui était hors de la portée des premiers systèmes Unix.
Plus tard, je suppose, car il y avait un moyen établi d'implémenter des autorisations de port réseau au niveau de l'utilisateur pour les cas courants: inetd , qui est apparu environ deux ans après ( 4.3BSD ) TCP / IP ( 4.2BSD ). Le
inetd
démon s'exécute en tant que root et écoute sur les ports spécifiés dans son fichier de configuration. Lors d'une connexion entrante,inetd
génère un autre programme spécifié dans son fichier de configuration et qui s'exécute en tant qu'utilisateur également spécifié dans le fichier de configuration inetd. Ainsi, au moins pour les services où il est acceptable de démarrer un nouveau processus sur chaque connexion, le problème est résolu.la source
Je pense que l'une des raisons est que la plupart des utilisateurs doivent pouvoir utiliser des ports éphémères pour se connecter à d'autres serveurs, sans nécessairement être root.
la source