Jak mogę otworzyć port 80, aby proces inny niż root mógł się z nim połączyć?


46

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ć?


Powiązane: link1 , link2
— Nathan Farrington

bardziej jak pytanie unix.stackexchange.com , prawda?
— Filip Bartuzi

1
dlaczego Unix, jeśli jest w systemie MacOS?
— nhed

Odpowiedzi:


27

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:

Wskaż port 80 na inny port, na przykład 8080

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.

Użyj Authbind

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.


LOVE MacOSX-authbind ... Pozwala uruchomić na przykład serwer WWW na porcie 80 - jako „zwykły administrator”. tj. w twoim 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!
— alex grey

13
OS X Yosemite usuwa ipfw. Ta lista opisuje użycie alternatywnego rozwiązania pf.
— lizosening

Pamiętaj, że przekierowanie ruchu do nieuprzywilejowanego portu może być niepewne, jeśli korzystasz ze wspólnego środowiska; inny proces może się połączyć z tym portem, zanim zrobi to twój program lub jeśli twój program nawet chwilowo rozłączy port w celu szybkiego ponownego uruchomienia.
— Lie Ryan

authbind jest naprawdę świetnym rozwiązaniem, dzięki!
— favo,

7

Możesz użyć ncatdo 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.


2
To jest dobre obejście. NB. ncatpochodzi z, nmapktó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 .
— William Denniss,

To po prostu daje mi wiążące: adres już używane błędy.
— Matt Joiner

To samo tutaj - nie działało. To załatwiło sprawę
— Sebastian J.

2

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

Przekierowywanie portów Ssh może mieć dość niską wydajność, a funkcje bezpieczeństwa nie mają większego sensu w środowisku lokalnym-> lokalnym. Lepiej używać wbudowanego przekierowania portów w osx lub czegoś takiego jak ncat.
— Shayne

-3

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.


1
Szukam tego jako rozwiązania dla mojej własnej maszyny deweloperskiej. Ponieważ muszę pracować w miejscach, w których nie mam kontroli nad routerem, to rozwiązanie dla mnie nie działa. Podejrzewam, że powinno to działać, jeśli konfigurujesz serwer i z jakiegoś powodu nie masz dostępu do konta root.
— Avner,

Tak więc, żeby być jasnym, próbujesz skonfigurować serwer WWW w różnych witrynach klienckich, ale nie masz dostępu do otwartego portu 80? Jak otworzysz port na routerze, jeśli nie masz dostępu? Czy rozumiem poprawnie, czy jestem daleko od bazy?
— Matt Love

Próbuję po prostu użyć portu 80 na moim własnym komputerze programistycznym, a nie na serwerze produkcyjnym. W każdym razie wdrażam na heroku.
— Avner
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.