Je souhaite exécuter un serveur Web sur mon Mac en tant que processus non root. Normalement, seuls les processus racine peuvent être liés au port 80 (ou à tout port inférieur à 1024).
Puis-je ouvrir le port 80 spécifiquement pour que les processus non root puissent l'écouter?
Réponses:
Cela est difficile à réaliser par conception et, à moins que vous n'ayez un accès root à votre machine, les opérations suivantes ne fonctionneront pas, car elles nécessitent l'installation de root pour configurer les modifications. Une fois modifiés, cependant, les programmes en espace utilisateur auront accès sans avoir la racine.
Il existe deux méthodes courantes pour y parvenir. Le choix de votre choix dépend de la raison pour laquelle vous essayez de contourner la restriction:
Pointez le port 80 sur un autre port, tel que 8080
En reconfigurant votre ordinateur pour qu'il transmette tout le trafic du port 80 au port 8080, ou à l'un des ports de votre choix, vous pouvez autoriser les serveurs d'espace utilisateur à recevoir des ports de privilèges racine dans la zone à laquelle ils ont accès.
Le processus est simple:
( source )
Il s’agit d’un changement temporaire, qui sera rétabli une fois que vous aurez redémarré ou sera effacé comme indiqué à la dernière ligne.
Vous pouvez rendre la modification permanente ou ajouter la commande en tant que ligne de démarrage avant de démarrer votre serveur, ce qui est probablement plus sûr du point de vue de la sécurité.
Utiliser Authbind
Authbind a été spécialement conçu pour permettre à un programme d'accéder aux ports de niveau inférieur sans lui donner un accès root complet.
Il y a un port MacOSX:
https://github.com/Castaglia/MacOSX-authbind
Il se peut qu’il reste limité au trafic IPv4, de sorte que vous devrez peut-être effectuer des recherches supplémentaires pour déterminer s’il répond à vos besoins.
la source
launchd
.plist
... `"ProgramArguments": [ "path/to/authbind", "/usr/bin/php", "-c", "/www/.router.ini", "-S", "0.0.0.0:80", "-t", "/www", "/www/.router.php"]
Woohoo!ipfw
. Cet élément essentiel décrit une solution alternative utilisantpf
.Vous pouvez utiliser
ncat
pour transférer le trafic d'un serveur Web s'exécutant sur un autre port:Cela transférera le trafic sur le port 80 à localhost: 1234. C’est un peu un problème, cependant, je ne l’utiliserais pas ailleurs que dans les tests rapides et certainement pas en production.
Notez que cela ne permettra pas à un processus non-root de s'y lier, mais en choisissant un port auquel le processus peut se lier, 1234 dans cet exemple, il semblera qu'il est lié au port 80. Cela équivaut à transfert du port 80 au port 1234 avec un pare-feu, mais de manière beaucoup plus temporaire.
la source
ncat
est livré avecnmap
qui peut être installé via les ports Mac avecsudo port install nmap
. MacPorts lui-même peut être installé à partir de macports.org/install.php .Vous pouvez également utiliser ssh pour effectuer un transfert de port. Ainsi, si vous avez un serveur fonctionnant sous 8080, vous pouvez transférer le trafic du port 80. Voici un script que j'utilise, qui arrête Apache en natif s'il est en cours d'exécution et transmet le trafic:
forward8080to80.command:
la source
Ce que vous devriez être capable de faire est d’ouvrir le port 80 de votre routeur et de le diriger vers l’adresse IP locale de votre serveur Web. Ensuite, sur votre Mac, activez le partage Web dans le volet de préférences Préférences Système> Partage et pointez-le sur le répertoire de votre choix. Cela a fonctionné pour moi dans le passé jusqu'à ce que je passe à 10.6 Server.
la source