服务器启动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报文结构如下:
端口部分详情:
假设一台服务器仅有1个IP,那么这个IP上 理论上最多同时使用 65535 个端口。
在TCP协议中,通信双方需要各自打开1个端口,然后在这个端口上通过3次握手建立连接,连接建立后双方将会保持端口的占用,直到连接断开,如果端口耗尽后,就会拒绝连接。
那么对于通信双方来说无论是服务端、客户端,在连接后都会使用1个端口用于通信,根据协议的最大理论上线,双方的连接数理论上限 65535个连接。
问题分析与解决
而实际上在Linux系统中,不会达到该上限就会被拒绝连接。
通常Linux系统的TCP连接数量在: 28200 左右
这是因为Linux系统限制了端口开放的范围
查看操作开放端口范围:
代码解读
cat /proc/sys/net/ipv4/ip_local_port_range
默认情况下端口开放范围通过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
配置完成后,使其生效
代码解读
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