Linux服务器启动80端口:prmission denied

服务器启动80端口:prmission denied

在普通用户下启动应用程序提示listen udp :443 bind: permission denied,demo涉及到的目录均为普通用户,切换到root用户可正常启动。

解决方案

前言:linux对于非root权限用户不能使用1024以下的端口,对于一些服务,过高的权限,会带来一定的风险。(例如80、443)

方案:设置port_start

linux 允许非 root 用户默认只能使用 1024 以上端口,sysctl 可以修改该起始端口。

代码解读

net.ipv4.ip_local_port_range:定义了UDP和TCP连接使用的本地端口范围,最好设置为一个偶数,一个奇数。必须大于或等于 ip_unprivileged_port_start。net.ipv4.ip_unprivileged_port_start:是命名空间粒度的配置,定义了非特权端口的最小值。特权端口需要root或 CAP_NET_BIND_SERVICE 才能绑定。默认值为1024。

代码解读

#临时生效sysctl net.ipv4.ip_unprivileged_port_start=0#永久生效echo "net.ipv4.ip_unprivileged_port_start=0" >> /etc/sysctl.confsysctl -p

其他linux内核参数见 https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt

理论概要

在IPv4协议下,TCP/UDP协议端口,使用2个字节Byte,总计16位二进制位表示。

TCP报文结构如下:

Linux服务器启动80端口:prmission denied插图

端口部分详情:

Linux服务器启动80端口:prmission denied插图1

假设一台服务器仅有1个IP,那么这个IP上 理论上最多同时使用 65535 个端口。

在TCP协议中,通信双方需要各自打开1个端口,然后在这个端口上通过3次握手建立连接,连接建立后双方将会保持端口的占用,直到连接断开,如果端口耗尽后,就会拒绝连接。

Linux服务器启动80端口:prmission denied插图2

那么对于通信双方来说无论是服务端、客户端,在连接后都会使用1个端口用于通信,根据协议的最大理论上线,双方的连接数理论上限 65535个连接。

问题分析与解决

而实际上在Linux系统中,不会达到该上限就会被拒绝连接。

通常Linux系统的TCP连接数量在: 28200 左右

这是因为Linux系统限制了端口开放的范围

查看操作开放端口范围:

代码解读

cat /proc/sys/net/ipv4/ip_local_port_range

Linux服务器启动80端口:prmission denied插图3

默认情况下端口开放范围通过ip_local_port_range参数控制,该参数默认值为32768 60999,表示开放端口的范围 [32768 ~ 60999],总计:28231 个端口,所以连接上限在28200左右。

运行时配置

因此可以调整系统端口开放范围来实现增大连接上限的目的,例如设置开放范围为[1025 ~ 65530]

代码解读

echo "1025 65530" > /proc/sys/net/ipv4/ip_local_port_range

注意:端口范围的下限受到ip_unprivileged_port_start参数的限制,该参数默认值为1024,因此我们此处下限设置为1025,如果需要也配置该参数。参数描述详见 Linux kernel ip-sysctl.txt

该种配置方式适用于运行时,在操作系统重启之后会重置会默认参数

持久化配置

为了持久化保留该参数,我们需要手动配置/etc/sysctl.conf文件。

编辑/etc/sysctl.conf文件

代码解读

vi /etc/sysctl.conf

添加配置参数:

代码解读

net.ipv4.ip_local_port_range=1025 59000

Linux服务器启动80端口:prmission denied插图4

配置完成后,使其生效

代码解读

sysctl -p /etc/sysctl.conf

查看应用后的配置情况:

代码解读

cat /proc/sys/net/ipv4/ip_local_port_range

参考文献

[1]. Linux . Document .https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt

[4]. Huang Huang 的博客 . net.ipv4.ip_local_port_range 的值究竟影响了啥 . 2019.05 . https://mozillazg.com/2019/05/linux-what-net.ipv4.ip_local_port_range-effect-or-mean.html

[5]. 腾讯云 . linux下设置ip_local_port_range参数 . 后场技术 . 2020.09 . https://cloud.tencent.com/developer/article/1691625

原文链接:https://blog.csdn.net/peng78585/article/details/144058015?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522e35722db5102f7d261388a1c66f5731e%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=e35722db5102f7d261388a1c66f5731e&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-24-144058015-null-null.nonecase&utm_term=%E9%A3%9E%E7%89%9BOS

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享