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

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

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

2 ответа2

0

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

0

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .