장치에 쓰려면 어떤 Linux 기능이 필요합니까?

장치에 쓰려면 어떤 Linux 기능이 필요합니까?

Kubernetes 컨테이너에 Home Assistant를 설정했습니다. 호스트 컴퓨터(즉, 컨테이너를 실행하는 컴퓨터)의 /dev/ttyACM0 장치에 대한 쓰기 권한이 필요합니다. Docker에서 컨테이너를 "권한"으로 설정하면 작동합니다. Kubernetes는 Docker 엔진에 대한 직접 액세스를 제공하지 않지만 Kubernetes에서도 "권한 부여"가 가능합니다.

문제는 컨테이너를 특권으로 만드는 것이 최후의 수단이라는 것입니다. Kubernetes를 사용하면 Linux 기능을 설정할 수도 있습니다. 이제 Linux 기능만으로 /dev/ttyACM0에 대한 쓰기 액세스 권한을 부여할 수 있는지 궁금합니다.

그만한 가치가 있기 때문에 SYS_RAWIO+ SYS_ADMIN로는 충분하지 않았습니다.

답변1

FOWNER해야합니다. 소프트웨어에서 링크를 구성하기 위해 ioctl을 실행하는 데 문제가 없는 한(이 경우 SYS_ADMIN또는 중 하나가 필요할 수 있음 TTY_CONFIG) 문제는 전적으로 파일 권한 중 하나입니다.

FOWNER,매우위험한 능력을 내놓는다. 그 능력을 가진 것은 무엇이든 우회할 수 있다모두파일 시스템 권한 확인.

대안으로, 이 컨테이너를 자체 사용자로 실행할 수 있는 경우 다음 중 하나를 고려하십시오.

  • 해당 사용자를 그룹이 소유한 모든 그룹에 추가하십시오 /dev/ttyACM0. 일반적으로 이 그룹은 tty, serial또는 과 같이 호출되지만 또는 console대신 호출될 수도 있습니다 . 이것은 가장 쉬운 옵션이지만 기능을 사용하는 것보다 조금 더 안전할 뿐입니다. 왜냐하면 이 그룹은 일반적으로 모든 직렬 장치에 대한 장치 노드의 소유권을 갖고 있으며 추가로 모든 가상 터미널 장치 노드도 소유할 수 있기 때문입니다.usbhotplug
  • 문제의 장치와 일치하는 udev 규칙을 작성하고 ACL을 추가하여 컨테이너가 실행 중인 사용자가 장치에 액세스할 수 있도록 허용합니다. 이는 컨테이너가 해당 특정 장치 노드에만 액세스할 수 있다는 것을 의미하므로 가장 안전한 방법입니다. USB ACM 장치가 두 개 이상 있는 경우 다양한 하드웨어 ID의 조합이 일치하는지 확인하십시오. USB 장치 열거 순서는 안정적이지 않고 일반적으로 부팅할 때마다 달라지기 때문입니다.

답변2

추가해도모두사용 가능한 기능은 도움이 되지 않습니다. 권한 있는 컨테이너가 여전히 필요합니다. 보다https://github.com/kubernetes/kubernetes/issues/60748이 결함을 추적하는 Kubernetes 문제에 대해 알아보세요.

관련 정보