如何在Linux上以普通用户身份在端口80上运行服务器?

前端之家收集整理的这篇文章主要介绍了如何在Linux上以普通用户身份在端口80上运行服务器?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经搜索了很长一段时间,但找不到它.

我在Ubuntu Linux上并希望在端口80上运行服务器,但由于Ubuntu的安全机制,我收到以下错误

java.net.BindException: Permission denied:80

我认为应该很简单,要么禁用这种安全机制,以便所有用户都可以使用端口80,或者为当前用户分配所需的权限以访问端口80.

解决方法

简答:你不能.低于1024的端口只能由root打开.根据评论 – 好吧,你可以使用 CAP_NET_BIND_SERVICE,但是这种应用于java bin的方法将使得任何java程序都可以使用此设置运行,如果不是安全风险,这是不可取的.

答案很长:您可以将端口80上的连接重定向到您可以作为普通用户打开的其他端口.

以root身份运行:

# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

由于环回设备(如localhost)不使用预先路由规则,如果需要使用localhost等,也可以添加此规则(thanks @Francesco):

# iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 8080

注意:上述解决方案不适合多用户系统,因为任何用户都可以打开端口8080(或您决定使用的任何其他高端口),从而拦截流量. (致CesarB).

编辑:根据评论问题 – 删除上述规则:

# iptables -t nat --line-numbers -n -L

这将输出如下内容

Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    REDIRECT   tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:8080 redir ports 8088
2    REDIRECT   tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80 redir ports 8080

你感兴趣的规则是nr. 2,所以删除它:

# iptables -t nat -D PREROUTING 2

猜你在找的Linux相关文章