Qual capacidade do Linux é necessária para gravar em um dispositivo?

Qual capacidade do Linux é necessária para gravar em um dispositivo?

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_ADMINnão foi suficiente.

Responder1

FOWNERdeveria fazer isso. A menos que seu software esteja tendo problemas ao emitir ioctls para configurar o link (nesse caso, você provavelmente precisará de SYS_ADMINou 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 como tty, serial, ou console, embora possa ser usbou hotplug. 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.

informação relacionada