如何configurationCentOS 6.4服务器,以便某些用户只能在某些端口上运行服务器? 例如,如果我有一个用于运行服务器的用户,我只希望他能够绑定到端口1036。
我知道你可以使用networking命名空间来做到这一点,因为那是我做的。 但是这很复杂。
这个过程就是这样。
unshare
创buildnetworking名称空间 ip link add type veth ....
ip link set vethX netns ${PIDOFUNSHARE}
vethX
设备中调出一个IP地址(如果还没有的话)。 vethX
。 现在,不受信任的用户当然拥有该IP的完整所有权,但是您可以在父命名空间中使用IPtables对允许绑定的特定端口执行DNATing,并将通信限制为仅限于该端口。 用户不可能有效地拒绝另一个用户的服务,因为他有一个特定的IP,只能在该用户名空间内工作。
注意,如果使用nslcd
或nscd
作为名称parsing服务,情况会更复杂,因为用于进程间通信的unix套接字在子名称空间中无效。 我能够解决这个问题的唯一方法是修补这些程序,以提供TCP传输,并通过TCP在父命名空间中执行名称parsing服务。
我也用C编写了一个程序,使用netlink调用来设置上面的所有内容。 该程序是封闭的源,所以不幸的是我不能与你分享。
为了logging,在Fedora中做这个更容易,因为你可以在其中创build命名的networking命名空间。 但EL6不提供/proc/<pid>/ns
function来做到这一点。