Назад | Перейти на главную страницу

systemd: как включить / отключить сетевой интерфейс с локальным входом?

У нас есть настройка, в которой студенты входят (используя LDAP auth) на машины Ubuntu 16.04, где установлены две сетевые карты: одна для подключения к локальной сети и Ethernet, а вторая - для подключения к пользовательским устройствам (например, Raspberry Pi). . В настоящее время вторичный сетевой интерфейс (и связанный с ним iptables правила и dnsmasq daemon) постоянно работает, но мы бы хотели его включить только пока пользователь локально авторизован.

Насколько я понимаю, используя systemd должна быть возможность иметь службу (которая может быть скриптом, запускающим или отключающим сетевой интерфейс), работающим, когда пользователь входит в систему и выходит из нее. Однако нам нужно убедиться, что для этого будут работать только локальные логины (например, tty1-6 или логин с графическим интерфейсом на lightdm) (это сделано из соображений соответствия, поскольку мы не можем оставлять «бесплатно для использования» «сетевые кабели, которые могут работать без надлежащей аутентификации пользователя), и я не могу понять в документации, как это сделать правильно.

На данный момент я попробовал этот файл модуля:

[Unit]
Description=LAN sharing for users

[Service]
Type=oneshot
RemainAfterExit=false
Restart=no
ExecStart=/sbin/ifup eth1
ExecStop=/sbin/ifdown eth1

[Install]
WantedBy=default.target

Но мне не удается запустить этот запуск от имени пользователя root при входе в систему или как гарантировать, что это локальный вход. Возможно ли это вообще с systemd (на Ubuntu 16.04 LTS, т.е. systemd версии 229-4), и как это правильно реализовать? Я ожидал, что это будет тривиально (я бы рассматривал это как предоставление привилегий для периферийного устройства, такого как звуковая карта, только локально зарегистрированным пользователям).