デバイスに書き込むにはどの 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と呼ばれますが、やの場合もあります。これは最も簡単な方法ですが、このグループは通常、すべてのシリアル デバイスのデバイス ノードの所有権を持ち、さらにすべての仮想端末デバイス ノードも所有する可能性があるため、機能を使用するよりも少しだけ安全です。ttyserialconsoleusbhotplug
  • 問題のデバイスに一致する udev ルールを記述し、それに ACL を追加して、コンテナーを実行しているユーザーがそのデバイスにアクセスできるようにします。これは、コンテナーがその特定のデバイス ノードにのみアクセスできることを意味するため、最も安全な方法です。USB ACM デバイスが複数ある場合は、さまざまなハードウェア ID の組み合わせが一致するようにしてください。USB デバイスの列挙順序は安定しておらず、通常は起動ごとに異なるためです。

答え2

さらに全て利用可能な機能は役に立ちません。特権コンテナが必要です。参考:この欠陥を追跡する Kubernetes の問題。

関連情報