Centos 6.4 只允许用户绑定到某个端口?

Centos 6.4 只允许用户绑定到某个端口?

如何配置 CentOS 6.4 服务器,以便某些用户只能在某些端口上运行服务器?例如,如果我有一个用于运行服务器的用户,并且我只希望他能够绑定到端口 1036。

答案1

我知道你可以使用网络命名空间来做到这一点,因为我就是这么做的。但这相当复杂。

过程是这样的。

  1. 使用创建网络命名空间unshare
  2. 使用以下方式创建 veth 设备ip link add type veth ....
  3. 使用ip link set vethX netns ${PIDOFUNSHARE}
  4. 在新的命名空间中启动环回(如果尚未启动)。
  5. 在新的命名空间和设备中设置一个 IP 地址(如果尚未设置)vethX
  6. 将新网络命名空间中的默认路由设置为父命名空间中的 IP。
  7. 设置一条静态路由到您在子命名空间中添加的 IP,以便vethX沿着父命名空间向下走。

现在,不受信任的用户当然拥有该 IP 的完全所有权,但您可以在父命名空间中使用 IPtables 对允许他们绑定到的特定端口进行 DNATing,并将通信限制在该端口。用户不可能有效地拒绝另一个用户在另一个端口上的服务,因为他有一个只能在该用户命名空间内工作的特定 IP。

请注意,如果您使用nslcdnscd进行名称解析服务,事情会变得更加复杂,因为用于进程间通信的 unix 套接字在子命名空间中无效。我能够修复此问题的唯一方法是修补这些程序以提供 TCP 传输并通过 TCP 在父命名空间中执行名称解析服务。

我还用 C 语言编写了一个程序,使用 netlink 调用来设置上述所有内容。该程序是闭源的,所以很遗憾我不能与你分享。

顺便说一下,在 Fedora 中执行此操作稍微容易一些,因为您可以在其中创建命名网络命名空间。但 EL6 不提供/proc/<pid>/ns执行此操作的功能。

相关内容