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

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

我知道你可以使用networking命名空间来做到这一点,因为那是我做的。 但是这很复杂。

这个过程就是这样。

  1. 使用unshare创buildnetworking名称空间
  2. 创build一个veth设备使用ip link add type veth ....
  3. 将veth的一端移到这个设备上,使用ip link set vethX netns ${PIDOFUNSHARE}
  4. 在新的命名空间中引起回环(如果还没有的话)。
  5. 在新的命名空间和vethX设备中调出一个IP地址(如果还没有的话)。
  6. 将新networking名称空间中的默认路由设置为父名称空间中的IP。
  7. 设置一个静态路由到您添加到子名称空间中的ip,以便沿着父名称空间中的vethX

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

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

我也用C编写了一个程序,使用netlink调用来设置上面的所有内容。 该程序是封闭的源,所以不幸的是我不能与你分享。

为了logging,在Fedora中做这个更容易,因为你可以在其中创build命名的networking命名空间。 但EL6不提供/proc/<pid>/nsfunction来做到这一点。