如何配置 CentOS 6.4 服务器以便某些用户只能在某些端口上运行服务器?例如,如果我有一个用于运行服务器的用户,而我只希望他能够绑定到端口 1036。
我知道你可以使用网络命名空间来做到这一点,因为我就是这样做的。但它相当复杂。
过程大概是这样的。
unshareip link add type veth ....ip link set vethX netns ${PIDOFUNSHARE}vethX。vethX在父命名空间中向下访问。现在,不受信任的用户当然拥有该 IP 的完全所有权,但您可以使用父名称空间中的 IPtables 对允许绑定的特定端口进行 DNATing,并将通信限制为仅限该端口。用户不可能有效地拒绝另一个用户在另一个端口上的服务,因为他拥有只能在该用户命名空间内工作的特定 IP。
请注意,如果您使用nslcd或nscd进行名称解析服务,事情会更加复杂,因为用于进程间通信的 unix 套接字在子命名空间中无效。我能够解决此问题的唯一方法是修补这些程序以提供 TCP 传输并通过 TCP 在父命名空间中执行名称解析服务。
我还用 C 语言编写了一个程序,它使用 netlink 调用来设置上述所有内容。该程序是闭源的,因此不幸的是我无法与您分享。
根据记录,在 Fedora 中执行此操作要容易一些,因为您可以在其中创建命名网络名称空间。但 EL6 不提供/proc/<pid>/ns执行此操作的功能。
| 归档时间: |
|
| 查看次数: |
397 次 |
| 最近记录: |