Вы можете назначить различные конфигурации сети процессу, используя сетевые пространства имен linux . Теоретически должна быть возможность настроить PAM * для установки каждого пользователя в отдельном сетевом пространстве имен, но, скорее всего, проще запустить рассматриваемое приложение в его собственном пространстве имен.
Обычная настройка может описывать создание интерфейса моста Linux для подключения пространств имен к сети. Немного более простую настройку можно заархивировать с помощью ipvlan (входит в версию ядра 3.19 и выше) или устройства macvlan (для беспроводной связи вы не можете использовать macvlan ). В документации ядра Linux есть подробный пример настройки ipvlan в пространстве имен сети.
Следуя примеру в документации:
Создайте пространство имен сети ns0
ip netns add ns0
Создать ipvlan slave на eth0 (ведущее устройство)
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 . Используйте на свой страх и риск.
ubuntu 14.04
я только получаю:Garbage instead of arguments "mode ...". Try "ip link help"
.