我已经搜索了很长一段时间,但找不到它.
我在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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。