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

DrA*_*ome 5 linux

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

Mat*_*Ife 4

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

过程大概是这样的。

  1. 使用以下命令创建网络命名空间unshare
  2. 使用创建 veth 设备ip link add type veth ....
  3. 使用以下命令将 veth 的一端移动到该设备中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执行此操作的功能。