私は最初のバージョンを完成しました。LinuxカーネルモジュールC言語で書いた。このモジュールは、/dev/wn0
3つのLEDライトを備えたUSBデバイスを制御するデバイスファイル()を生成します。たとえば、rootとして実行すると、次のようになります。
echo "#ff0000" >/dev/wn0
...デバイスは明るい赤色に輝きます。
私の問題は、権限のないユーザーが(データを記録して)デバイスにアクセスできるようにしたいということです/dev/wn0
。これを行う標準的な方法はありますか?ファイルの権限を変更するのと同じくらい簡単ですか/dev/wn0
?これはセキュリティの問題を引き起こしますか?
答え1
まあ、私はいくつかの可能性を見る:
最速の方法はPOSIX権限と所有権のポイントです。誰かが読み書きできるようにしたい場合は、それに応じて権限を設定します。これらのユーザーをグループに入れて、デバイスの所有権をそのグループに変更し、グループに書き込み権限を付与するだけです。サーバーが管理されている場合は、それをルールに入れる必要があります
udev
。これは、ユーザーがBluetoothを使用できるようにするbluezなどの一部のツールの機能です。または、「ConsoleKit」を使用しない限り、少なくとも私のディストリビューションで使用される方法です。/dev
udev
装置が簡単で誰でも問題なく使用できる場合は、誰でも書くことができます。
デバイスに書き込むことができる一部のユーザーで始まり、デバイスをインポートしてUIDを変更して権限を放棄し、TCPなどを介してすべてのユーザーの要求を処理するデーモンを作成します。
デバイスに書き込むための小さなバイナリを作成します。つまり、
setuid
一部のユーザーはデバイスに書き込み、ユーザーにそれを使用してデバイスに書き込むことができます。それがすることです。許可されている場合は、一般ユーザーがファイルシステムをマウントできるようにルートmount
です。setuid
/etc/fstab
何も生成されません。追加これらのユーザーがデバイスを使用できることに同意する限り、セキュリティ上の問題。もちろん、デバイスにアクセスできる人は誰でもモジュールの脆弱性を悪用する可能性がありますが、これは人々にアクセスを許可する方法に関係なく可能です。デーモンを作成すると悪用される可能性があります。たぶん単純に保ち、コードが脆弱でないことを確認する方が良いかもしれません。
これを行う単一の標準的な方法はないと言いたいです。 UNIXシステムの特定の部分でこれを行う方法があり、各部分は解決する問題に対して最も便利な方法で行います。