我想将一系列 udp 端口限制为单个应用程序(或用户)。我想要实现的不仅仅是阻止bind()
其他 uid 的 a,而且还从可以自动分配的池中删除范围。
例如,如果有人尝试显式绑定 12345,但没有运行指定的应用程序,他们应该获得 EPERM。如果有人试图绑定一个未指定的端口,他们不应该尝试随机绑定 12345。
有什么系统可以在这里提供帮助吗?我尝试浏览 apparmor / selinux 文档,但它们似乎只做阻塞部分。
我想将一系列 udp 端口限制为单个应用程序(或用户)。我想要实现的不仅仅是阻止bind()
其他 uid 的 a,而且还从可以自动分配的池中删除范围。
例如,如果有人尝试显式绑定 12345,但没有运行指定的应用程序,他们应该获得 EPERM。如果有人试图绑定一个未指定的端口,他们不应该尝试随机绑定 12345。
有什么系统可以在这里提供帮助吗?我尝试浏览 apparmor / selinux 文档,但它们似乎只做阻塞部分。
在 Linux 上执行此操作的最简单方法是在标准临时端口范围的顶部或底部范围保留一个块。
通过运行找出您当前的范围是多少
然后通过在其中回显一些不同的内容来设置它(并修改 sysctl.conf 或类似内容以使其在启动时也发生)。我的系统使用 32768-61000,因此我可以将其更改为 32768-60000 与 SELinux/AppArmor 一起为我的应用程序保留 60001-61000。
我不知道有一种方法可以在短暂范围的中间开辟一个缺口。
看看 portreserve 实用程序。但实际的服务必须先请求 portreserve 释放端口,然后服务才能使用它。
安装portreserve,然后只有通过 portrelease 请求它们的程序才能拥有套接字。