Qual recurso do Linux é necessário para gravar em um dispositivo?

0

Eu configurei o Home Assistant em um contêiner do 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 tornar o contêiner “privilegiado” no Docker. O Kubernetes não fornece acesso direto ao mecanismo do Docker, mas o "privilegiado" também é possível com o Kubernetes.

O problema é que tornar um contêiner privilegiado é uma medida de último recurso. O Kubernetes também permite definir recursos do Linux. Agora me pergunto se é possível conceder acesso de gravação a / dev / ttyACM0 com apenas (um conjunto de) recursos do Linux?

Por que vale a pena, SYS_RAWIO + SYS_ADMIN não foi suficiente.

    
por Torsten Bronger 02.08.2018 / 19:56

2 respostas

0

Mesmo a adição de todas capacidades disponíveis não ajuda. Um contêiner privilegiado ainda é necessário. Consulte o link para um problema do Kubernetes que rastreia essa deficiência.

    
por 04.08.2018 / 20:34
0

FOWNER deve fazê-lo. 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 uma das permissões de arquivo.

Dito isso, FOWNER é uma capacidade perigosa MUITO para ser distribuída. Qualquer coisa com esse recurso pode ignorar as verificações de permissões do sistema de arquivos ALL .

Como alternativa, considere uma das opções a seguir se você puder colocar esse contêiner em execução sob 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 usb ou hotplug . Esta é a opção mais fácil, mas é apenas um pouco mais segura do que usar recursos, porque esse grupo geralmente tem a propriedade dos nós de dispositivos para todos os dispositivos seriais e também possui todos os nós de dispositivos terminais virtuais.
  • Grave uma regra do udev para corresponder ao dispositivo em questão e adicione uma ACL a ele para permitir que o usuário que o contêiner esteja executando acesse-o. Esse é o método mais seguro disponível, porque significa que o contêiner só pode acessar esse nó de dispositivo específico. Se você tiver mais de um dispositivo ACM USB, certifique-se de combinar na combinação dos vários IDs de hardware, pois a ordem de enumeração do dispositivo USB não é estável e geralmente varia de uma inicialização para a próxima.
por 02.08.2018 / 20:59