Chcę uruchomić serwer WWW na komputerze Mac jako proces inny niż root. Zwykle tylko procesy root mogą łączyć się z portem 80 (lub dowolnym portem poniżej 1024).
Czy mogę otworzyć port 80 specjalnie, aby procesy inne niż root mogły nasłuchiwać?
Chcę uruchomić serwer WWW na komputerze Mac jako proces inny niż root. Zwykle tylko procesy root mogą łączyć się z portem 80 (lub dowolnym portem poniżej 1024).
Czy mogę otworzyć port 80 specjalnie, aby procesy inne niż root mogły nasłuchiwać?
Odpowiedzi:
Jest to trudne z założenia i chyba że masz dostęp do roota na swoim komputerze, żadne z poniższych działań nie będzie działać, ponieważ wymagają rootowania do skonfigurowania zmian. Jednak po zmianie programy przestrzeni użytkownika będą miały dostęp bez rootowania.
Istnieją dwa typowe sposoby osiągnięcia tego, a wybór zależy od tego, dlaczego próbujesz obejść to ograniczenie:
Poprzez rekonfigurację komputera, aby przekazywał cały ruch z portu 80 do portu 8080 lub dowolnego wybranego portu, możesz zezwolić serwerom przestrzeni użytkownika na odbieranie portów uprawnień root w obszarze, do którego mają dostęp.
Proces jest prosty:
Krok 1: Wyświetl aktualne reguły zapory.
sudo ipfw show
Krok 2: Dodaj regułę przekierowania portów (od 80 do 8080)
sudo ipfw add 100 fwd 127.0.0.1,8080 tcp from any to any 80 in
Jeśli chcesz usunąć reguły zapory, uruchom:
sudo ipfw flush
( źródło )
Jest to zmiana tymczasowa i zostanie przywrócona po ponownym uruchomieniu lub spłukaniu, jak wskazano w ostatnim wierszu.
Możesz wprowadzić tę zmianę na stałe lub dodać polecenie jako linię startową przed uruchomieniem serwera, co jest prawdopodobnie bezpieczniejsze z punktu widzenia bezpieczeństwa.
Authbind został zaprojektowany specjalnie w celu umożliwienia jednemu programowi dostępu do portów niższego poziomu bez zapewnienia pełnego dostępu do katalogu głównego.
Istnieje port OS X:
https://github.com/Castaglia/MacOSX-authbind
Nadal może być ograniczony do ruchu IPv4, jednak może być konieczne dodatkowe badanie, aby sprawdzić, czy spełnia twoje potrzeby.
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!
Możesz użyć ncat
do przekazywania ruchu z serwera WWW działającego na innym porcie:
sudo ncat -l -p 80 -c ' ncat -l -p 1234'
Spowoduje to przekierowanie ruchu na porcie 80 do localhost: 1234. Jest to jednak trochę kłopotliwe, nie użyłbym jej nigdzie poza szybkimi testami i zdecydowanie nie w produkcji.
Zauważ, że nie pozwoli to na połączenie z procesem innym niż root, ale wybierając port, z którym proces może się połączyć, 1234 w tym przykładzie będzie wyglądać, jakby był powiązany z portem 80. Robi to odpowiednik przekierowanie portu 80 na port 1234 z zaporą ogniową, ale o wiele bardziej tymczasowo.
ncat
pochodzi z, nmap
który można zainstalować za pośrednictwem portów Mac z sudo port install nmap
. Sam MacPorts można zainstalować z macports.org/install.php .
Możesz także użyć ssh do przekierowania portów. Więc jeśli masz serwer działający na 8080, możesz przekierowywać ruch z portu 80. Oto skrypt, którego używam, który zatrzymuje natywny apache, jeśli jest uruchomiony i przekazuje ruch:
polecenie forward8080to80.command:
echo "You may close this terminal and the forwarding will continue."
echo "To stop, kill the ssh process found by `sudo lsof -i ':80' | grep LISTEN`"
sudo apachectl stop
sudo ssh user@127.0.0.1 -L 80:127.0.0.1:8080
Powinieneś być w stanie otworzyć port 80 na routerze i skierować go na lokalny adres IP twojego serwera WWW. Następnie na komputerze Mac włącz opcję Udostępnianie Internetu w panelu Preferencje systemowe> Preferencje udostępniania i wskaż wybrany katalog. W przeszłości działało to dla mnie do momentu przejścia na serwer 10.6.