Перейти к содержимому

Какие возможности Linux необходимы для записи на устройство?

0

Я установил Home Assistant в контейнере Kubernetes. Ему необходим доступ на запись к устройству / dev / ttyACM0 на главном компьютере (то есть на компьютере, на котором работает контейнер). Это сработает, если я сделаю контейнер «привилегированным» в Docker. Kubernetes не дает прямого доступа к движку Docker, но «привилегированный» возможен и с Kubernetes.

Проблема в том, что создание привилегированного контейнера является крайней мерой. Kubernetes также позволяет устанавливать возможности Linux. Теперь мне интересно, можно ли предоставить доступ на запись в / dev / ttyACM0 только с помощью (набора) возможностей Linux?

Для чего это стоит, SYS_RAWIO+ SYS_ADMINбыло недостаточно.

590 просмотров
Torsten Bronger спросил 8 лет назад
T 232

2 ответа

0

FOWNERдолжен сделать это. Если у вашего программного обеспечения нет проблем с выдачей ioctl для настройки ссылки (в этом случае вам, вероятно, понадобится либо SYS_ADMINили, либо другое TTY_CONFIG), проблема заключается только в одном из прав доступа к файлу.

Тем не менее, FOWNERэто очень опасная способность выдавать. Все, что имеет такую ​​возможность, может обойти ВСЕ проверки разрешений файловой системы.

В качестве альтернативы рассмотрите одно из следующих, если вы можете запустить этот контейнер под своим собственным пользователем:

  • Добавьте этого пользователя к любой группе /dev/ttyACM0. Обычно эта группа будет называться что - то вроде tty, serialили console, хотя это может быть вместо этого usbили hotplug. Это самый простой вариант, но он лишь немного безопаснее, чем использование возможностей, поскольку эта группа обычно владеет узлами устройства для всех последовательных устройств и может дополнительно владеть всеми узлами виртуальных терминальных устройств.
  • Напишите правило udev, соответствующее соответствующему устройству, и добавьте к нему ACL, чтобы позволить пользователю, с которым работает контейнер, получить доступ к нему. Это наиболее безопасный доступный метод, поскольку он означает, что контейнер может получить доступ только к этому конкретному узлу устройства. Если у вас несколько устройств USB ACM, убедитесь, что они совпадают по комбинации различных идентификаторов оборудования, поскольку порядок перечисления USB-устройств нестабилен и обычно меняется от одной загрузки к другой.
Austin Hemmelgarn ответил 8 лет назад
A 2 399
0
Принятый ответ

Даже добавление всех доступных возможностей не помогает. Привилегированный контейнер все еще необходим. См. Https://github.com/kubernetes/kubernetes/issues/60748 для решения проблемы Kubernetes, которая отслеживает этот недостаток.

Torsten Bronger ответил 8 лет назад
T 232