web-dev-qa-db-fra.com

Pourquoi les 1024 premiers ports sont-ils réservés à l'utilisateur root uniquement?

C'est une curiosité plus oisive qu'autre chose. Un de mes amis m'a demandé "quelle plage de ports est-ce que seul root peut utiliser sous Linux?" Je lui ai dit que 0-1024 étaient restreints. Puis il m'a demandé pourquoi il en était ainsi et ... j'étais perdu. Aucune idée du tout.

Y a-t-il une raison pour laquelle ces ports sont restreints et 1025-65535 ne le sont pas?

La plupart des principaux services réseau (HTTP, FTP, SSH, Telnet, HTTPS, POP, SMTP, etc.) sont dans cette gamme, donc des réponses possibles auxquelles j'ai pensé:

  • Un utilisateur non fiable peut exécuter un programme qui a écouté sur ces ports les détails de connexion.
  • Un utilisateur non fiable peut exécuter une application serveur non autorisée.

Quelqu'un peut-il faire la lumière ici?

53
Andrew Lambert

Supposons que vous échangez des données avec un ordinateur sur un port <1024 et que vous savez que l'ordinateur exécute une variante d'Unix. Ensuite, vous savez que le service exécuté sur ce port est approuvé par l'administrateur système: il s'exécute en tant que root, ou du moins devait être démarré en tant que root.

Dans le vaste monde sauvage d'Internet, cela n'a pas d'importance. La plupart des serveurs sont administrés par les mêmes personnes que les services qui les exécutent; vous ne feriez pas plus confiance aux racines qu'aux autres utilisateurs.

Avec des machines multi-utilisateurs, en particulier sur un réseau local, cela peut être important. Par exemple, dans les jours précédant la cryptographie civile, une méthode populaire d'exécution de commandes Shell sur une autre machine était rsh ( r emote sh ell); vous pouvez utiliser l'authentification par mot de passe, ou vous pouvez vous authentifier simplement en prouvant que vous étiez l'utilisateur X sur la machine A (avec la machine B sachant que X @ A peut se connecter en tant que X @ B sans mot de passe). Comment le prouver? Le client rsh est root setuid, et utilise un numéro de port <1024, donc le serveur sait que le client avec lequel il parle est digne de confiance et ne mentira pas à quel utilisateur sur A l'invoque. De même NFS a été conçu pour être transparent en ce qui concerne les utilisateurs et les autorisations, donc une configuration courante était que sur un réseau local, chaque machine utilisait la même base de données utilisateur, et l'utilisateur N à A monter des systèmes de fichiers à partir du serveur B obtiendrait les autorisations de l'utilisateur N à B. Encore une fois, le fait que le client NFS provienne d'un numéro de port <1024 prouve que la racine à A a vérifié le client NFS, qui est censé assurez-vous que s'il transmet une demande prétendant provenir de l'utilisateur N, cette demande provient bien de l'utilisateur N.

Les utilisateurs non autorisés ne pouvant pas exécuter des serveurs sur des ports bas sont un autre avantage, mais pas le principal. À l'époque, l'usurpation d'identité était une nouveauté et les utilisateurs utilisant des serveurs d'usurpation seraient de toute façon rapidement annulés par les administrateurs vigilants.