在Linux上,有没有办法限制最大并发端口数单用户可以同时绑定/侦听(可以在每个网络设备的基础上)吗?
即,如果用户可以同时绑定/侦听无限数量的端口,则恶意用户可能会尝试通过侦听所有可用端口来篡改其他用户的端口可用性,直到端口耗尽并且其他用户无法侦听任何端口。
答案1
为了能够监听端口,您需要创建一个套接字。这是通过以下方式完成的
sockfd = socket(AF_INET, SOCK_STREAM, 0);
(在C中)。然后您可以监听该文件描述符。
用户打开文件的最大数量,请参阅ulimit -h
您的系统上的最大数量。
我不记得您是否需要实际连接来打开文件的 ulimit,或者套接字上的侦听是否也算作打开文件。我认为聆听也很重要。
请注意,普通用户无法绑定到 1024 以下的端口。
Selinux 和 apparmor 还应该允许控制用户可以绑定为端口的内容(从未尝试过;仅来自文档)。
请注意,在现实生活中,我只见过临时端口的端口耗尽,而从未见过服务器端口的端口耗尽。