Answers:
您可以使用linux网络名称空间为进程分配不同的网络配置。从理论上讲,应该可以配置PAM *来将每个用户设置在其自己的独立网络名称空间中,但是在该应用程序中以其自己的名称空间启动该应用程序可能更简单。
常见的设置可能描述创建Linux桥接口以将名称空间连接到网络。可以使用ipvlan(包含在3.19版及更高版本的内核中)或macvlan设备(对于无线,您不能使用macvlan)来存档更简单的设置。Linux内核文档提供了在网络名称空间中设置ipvlan 的详细示例。
遵循文档中的示例:
创建一个网络名称空间ns0
ip netns add ns0
在eth0(主设备)上创建ipvlan从设备
ip link add link eth0 ipvl0 type ipvlan mode l2
将从站分配给网络名称空间ns0
ip link set dev ipvl0 netns ns0
在网络名称空间ns0中配置从设备
ip netns exec ns0 ip link set dev ipvl0 up
ip netns exec ns0 ip link set dev lo up
ip netns exec ns0 ip -4 addr add 127.0.0.1 dev lo
ip netns exec ns0 ip -4 addr add $IPADDR dev ipvl0
ip netns exec ns0 ip -4 route add default via $ROUTER dev ipvl0
在$IPADDR
和中提供主机和路由器地址$ROUTER
。
使用以下命令在网络名称空间中运行应用程序 ip exec
ip netns exec ns0 <command>
要以其他用户身份运行命令,请使用通常的su <user> -c -- <command>
。
* 编辑:从理论到实践:我写了一个简单的PAM模块来演示如何改变每个用户的网络命名空间。您需要使用ip netns
上述配置网络名称空间,并将特定用户映射到特定名称空间。之后,所有用户进程将位于其配置的名称空间中,而不是默认名称空间中。该代码托管在github上。使用后果自负。
$IPADDR
,$ROUTER
必须由我提供,还是已经设置?
ubuntu 14.04
只会得到:Garbage instead of arguments "mode ...". Try "ip link help"
。