Я хочу запустить веб-сервер на моем Mac как процесс без полномочий root. Обычно только корневые процессы могут связываться с портом 80 (или любым портом ниже 1024).
Могу ли я открыть порт 80 специально, чтобы процессы без полномочий root могли прослушивать его?
Ответы:
Это сложно сделать по своему замыслу, и если у вас нет root-доступа к вашей машине, ни одно из следующих действий не будет работать, так как для настройки изменений требуется root. Однако после изменения программы пользовательского пространства будут иметь доступ без рута.
Есть два распространенных способа сделать это, и ваш выбор будет зависеть от того, почему вы пытаетесь обойти ограничение:
Укажите порт 80 на другой порт, например 8080
Переконфигурировав вашу машину для передачи всего трафика порта 80 на порт 8080 или любой другой порт по вашему выбору, вы можете позволить серверам пространства пользователя получать корневые привилегированные порты в той области, к которой им предоставлен доступ.
Процесс прост:
( источник )
Это временное изменение, и оно вернется после перезагрузки или сброса, как указано в последней строке.
Вы можете сделать изменение постоянным или добавить команду в качестве строки запуска перед запуском сервера, что, вероятно, более безопасно с точки зрения безопасности.
Использовать Authbind
Authbind был разработан специально для того, чтобы разрешить одной программе доступ к портам более низкого уровня, не предоставляя ей полный root-доступ.
Существует порт MacOSX:
https://github.com/Castaglia/MacOSX-authbind
Однако он все еще может быть ограничен трафиком IPv4, поэтому вам, возможно, придется провести дополнительное расследование, чтобы выяснить, соответствует ли он вашим потребностям.
источник
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
. Эта суть описывает использование альтернативного решенияpf
.Вы можете использовать
ncat
для пересылки трафика с веб-сервера, работающего на другом порту:Это перенаправит трафик через порт 80 на локальный хост: 1234. Однако, это немного круто, я бы не стал использовать его нигде, кроме быстрого тестирования и определенно не в производстве.
Обратите внимание, что это не позволит процессу без полномочий root связываться с ним, но, выбрав порт, с которым процесс может связываться, 1234 в этом примере, он будет выглядеть так, как будто он связан с портом 80. Это делает эквивалент переадресация порта 80 на порт 1234 с брандмауэром, но на гораздо более временной основе.
источник
ncat
поставляется сnmap
которым можно установить через порты Mac сsudo port install nmap
. Сам MacPorts можно установить с macports.org/install.php .Вы также можете использовать ssh для переадресации портов. Поэтому, если у вас сервер, работающий на 8080, вы можете перенаправлять трафик с порта 80. Вот скрипт, который я использую, который останавливает собственный Apache, если он работает, и перенаправляет трафик:
forward8080to80.command:
источник
То, что вы должны сделать, это открыть порт 80 на вашем маршрутизаторе и указать его на локальный IP-адрес вашего веб-сервера. Затем на вашем Mac включите общий доступ к Интернету в разделе «Системные настройки»> «Настройки общего доступа» и укажите его в каталоге по вашему выбору. Это работало для меня в прошлом, пока не переключился на 10.6 Server.
источник