権限のないユーザーアカウントで実行されているユーザースペースアプリケーションにデバイスファイルを公開する標準的な方法は何ですか?

権限のないユーザーアカウントで実行されているユーザースペースアプリケーションにデバイスファイルを公開する標準的な方法は何ですか?

私は最初のバージョンを完成しました。LinuxカーネルモジュールC言語で書いた。このモジュールは、/dev/wn03つのLEDライトを備えたUSBデバイスを制御するデバイスファイル()を生成します。たとえば、rootとして実行すると、次のようになります。

echo "#ff0000" >/dev/wn0

...デバイスは明るい赤色に輝きます。

私の問題は、権限のないユーザーが(データを記録して)デバイスにアクセスできるようにしたいということです/dev/wn0。これを行う標準的な方法はありますか?ファイルの権限を変更するのと同じくらい簡単ですか/dev/wn0?これはセキュリティの問題を引き起こしますか?

答え1

まあ、私はいくつかの可能性を見る:

  • 最速の方法はPOSIX権限と所有権のポイントです。誰かが読み書きできるようにしたい場合は、それに応じて権限を設定します。これらのユーザーをグループに入れて、デバイスの所有権をそのグループに変更し、グループに書き込み権限を付与するだけです。サーバーが管理されている場合は、それをルールに入れる必要がありますudev。これは、ユーザーがBluetoothを使用できるようにするbluezなどの一部のツールの機能です。または、「ConsoleKit」を使用しない限り、少なくとも私のディストリビューションで使用される方法です。/devudev

  • 装置が簡単で誰でも問題なく使用できる場合は、誰でも書くことができます。

  • デバイスに書き込むことができる一部のユーザーで始まり、デバイスをインポートしてUIDを変更して権限を放棄し、TCPなどを介してすべてのユーザーの要求を処理するデーモンを作成します。

  • デバイスに書き込むための小さなバイナリを作成します。つまり、setuid一部のユーザーはデバイスに書き込み、ユーザーにそれを使用してデバイスに書き込むことができます。それがすることです。許可されている場合は、一般ユーザーがファイルシステムをマウントできるようにルートmountです。setuid/etc/fstab

何も生成されません。追加これらのユーザーがデバイスを使用できることに同意する限り、セキュリティ上の問題。もちろん、デバイスにアクセスできる人は誰でもモジュールの脆弱性を悪用する可能性がありますが、これは人々にアクセスを許可する方法に関係なく可能です。デーモンを作成すると悪用される可能性があります。たぶん単純に保ち、コードが脆弱でないことを確認する方が良いかもしれません。

これを行う単一の標準的な方法はないと言いたいです。 UNIXシステムの特定の部分でこれを行う方法があり、各部分は解決する問題に対して最も便利な方法で行います。

関連情報