
Configurei o Home Assistant em um contêiner Kubernetes. Ele precisa de acesso de gravação ao dispositivo /dev/ttyACM0 no computador host (ou seja, o computador que executa o contêiner). Funciona se eu fizer o contêiner “privilegiado” no Docker falar. O Kubernetes não dá acesso direto ao motor Docker, mas “privilegiado” também é possível com o Kubernetes.
O problema é que tornar um contêiner privilegiado é uma medida de último recurso. Kubernetes também permite definir recursos do Linux. Agora eu me pergunto se é possível conceder acesso de gravação a /dev/ttyACM0 com apenas (um conjunto de) recursos do Linux?
Pelo que vale, SYS_RAWIO
+ SYS_ADMIN
não foi suficiente.
Responder1
FOWNER
deveria fazer isso. A menos que seu software esteja tendo problemas ao emitir ioctls para configurar o link (nesse caso, você provavelmente precisará de SYS_ADMIN
ou TTY_CONFIG
), o problema é apenas de permissões de arquivo.
Dito isto, FOWNER
é umMUITOcapacidade perigosa de ceder. Qualquer coisa com essa capacidade pode ignorarTODOSverificações de permissões do sistema de arquivos.
Como alternativa, considere uma das seguintes opções se você conseguir executar esse contêiner com seu próprio usuário:
- Adicione esse usuário a qualquer grupo que possua
/dev/ttyACM0
. Normalmente, esse grupo será chamado de algo comotty
,serial
, ouconsole
, embora possa serusb
ouhotplug
. Esta é a opção mais fácil, mas é apenas um pouco mais segura do que usar recursos, porque esse grupo geralmente possui a propriedade dos nós de dispositivos para todos os dispositivos seriais e também pode possuir todos os nós de dispositivos terminais virtuais. - Escreva uma regra do udev para corresponder ao dispositivo em questão e adicione uma ACL a ela para permitir que o usuário no qual o contêiner está sendo executado possa acessá-lo. Este é o método mais seguro disponível, porque significa que o contêiner só pode acessar aquele nó de dispositivo específico. Se você tiver mais de um dispositivo USB ACM, certifique-se de combinar a combinação dos vários IDs de hardware, porque a ordem de enumeração dos dispositivos USB não é estável e geralmente varia de uma inicialização para outra.
Responder2
Mesmo adicionandotodosos recursos disponíveis não ajudam. Um contêiner privilegiado ainda é necessário. Verhttps://github.com/kubernetes/kubernetes/issues/60748para um problema do Kubernetes que rastreia essa deficiência.