我想在Mac上以非root用户身份运行Web服务器。通常,只有根进程才能绑定到端口80(或低于1024的任何端口)。
我可以专门打开端口80,以便非root进程可以监听吗?
我想在Mac上以非root用户身份运行Web服务器。通常,只有根进程才能绑定到端口80(或低于1024的任何端口)。
我可以专门打开端口80,以便非root进程可以监听吗?
Answers:
这在设计上很难做到,除非您具有对计算机的超级用户访问权限,否则以下任何一项都不起作用,因为它们需要超级用户才能设置更改。但是,一旦更改,用户空间程序将无需root就可以访问。
有两种常见的方法可以完成此操作,您选择哪种方法取决于您尝试解决限制的原因:
通过将计算机重新配置为将所有端口80流量传递到端口8080或您选择的任何端口,则可以允许用户空间服务器在它们可以访问的区域中接收root用户特权端口。
这个过程很简单:
步骤1:查看当前的防火墙规则。
sudo ipfw show
步骤2:添加端口转发规则(80至8080)
sudo ipfw add 100 fwd 127.0.0.1,8080 tcp from any to any 80 in
如果要删除防火墙规则,请运行:
sudo ipfw刷新
(来源)
这是一个临时更改,将在您重新启动后恢复,或者按照最后一行中的指示进行刷新。
您可以使更改成为永久更改,也可以在启动服务器之前将命令添加为启动行,从安全角度考虑,这可能更安全。
Authbind是专门为允许一个程序访问较低级别的端口而没有给予其完全根访问权限而设计的。
有一个OS X端口:
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"]
呜呼!
您可以ncat
用来转发来自其他端口上运行的Web服务器的流量:
sudo ncat -l -p 80 -c ' ncat -l -p 1234'
这会将端口80上的流量转发到localhost:1234。这有点麻烦,但是我不会在快速测试之外的任何地方使用它,而且绝对不会在生产中使用它。
请注意,这不允许非根进程绑定到该端口,但是通过选择该进程可以绑定到的端口,在本示例中,它看起来像是绑定到端口80。使用防火墙将端口80转发到端口1234,但这只是暂时的。
ncat
附带nmap
可以通过Mac Ports使用进行安装sudo port install nmap
。MacPorts本身可以从macports.org/install.php安装。
您也可以使用ssh进行端口转发。因此,如果您有一台运行在8080上的服务器,则可以从端口80转发流量。这是我使用的脚本,如果该脚本正在运行,它将停止本地apache并转发流量:
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
您应该能够做的是打开路由器上的端口80,并将其指向Web服务器的本地IP地址。然后在Mac上,从“系统偏好设置”>“共享”偏好设置窗格中启用“ Web共享”,然后将其指向您选择的目录。过去,这一直适用于我,直到切换到10.6 Server。