在 Linux(CentOS,如果重要的话)上有没有办法让普通用户使用 1024 以下的端口?(在该端口上打开侦听 TCP 套接字)
目前我知道只有 root 有权使用这些端口。
Jul*_*ano 12
不在 CentOS 3/4/5 上(缺乏文件系统功能):
您可以为需要打开此端口的程序设置 CAP_NET_BIND_SERVICE 能力。Root 将在可执行文件上设置功能,然后任何用户都可以运行该可执行文件,它将能够使用 <1024 的端口。
要在可执行文件上设置功能:
setcap cap_net_bind_service=+ep /path/to/program
Run Code Online (Sandbox Code Playgroud)
IIRC 这是不可能的,或者出于安全原因不建议这样做。
但是,如果您希望用户能够侦听特定端口,则可以始终使用 TCP 转发器(如rinetdiptables 规则)将连接重定向到该端口到他们可以侦听的端口,并让他们将服务设置为侦听该更高的端口。
例如线
aa.bb.cc.dd 80 127.0.0.1 8000
Run Code Online (Sandbox Code Playgroud)
在 rinetd 的配置中,会将与地址上的端口 80 的连接转发到aa.bb.cc.dd非特权用户可以侦听的本地主机端口 8000。等效的 iptables 规则类似于
/sbin/iptables -t nat -A PREROUTING -p tcp -d aa.bb.cc.dd --dport 80 -j DNAT --to 127.0.0.1:8000
Run Code Online (Sandbox Code Playgroud)
与让任何用户侦听任何端口相比,无论哪种方式都能为您提供更细粒度的控制。
iptables 方法的优点是侦听应用程序将看到调用客户端的 IP 地址(使用 rinetd 方法它会看到所有连接都来自本地主机)。iptables 方法还允许 UDP 和 TCP。
小智 4
您可以创建一个运行 SUID 并在打开端口后删除权限的包装器。
| 归档时间: |
|
| 查看次数: |
16059 次 |
| 最近记录: |