
アクセスするには、2つのプログラム(パスで示されている)のみが必要なデバイス(ビデオカード)があります/usr/bin/myprogram
。
デバイス用のファイル/dev
(例/dev/mydev1
:)がありますが、必要に応じて他の参照(バスID、ベンダー/製品IDなど)を使用することもできます。
udev
私が指定したプログラム以外にどのプログラムにもアクセスできないようにするには、ルールのようにどうすればよいですか?
答え1
従来のUNIXソリューションは、システムグループ(たとえばgroupadd -r vidcard
)を作成し、ルートとそのグループのメンバーのみがアクセスできるようにデバイスの権限を設定することです。 Linuxでは、/dev
起動するたびに最初から再生成されるudevルールの形式を取ります。ルールは次のとおりです。
KERNEL=="mydev[0-9]*", MODE="0660", GROUP="vidcard"
最後に、アクセスを必要とするプログラムはグループ所有者をvidcard
setgidビットに設定する必要があります。だから:
chown root:vidcard /usr/bin/myprogram
chmod 2711 /usr/bin/myprogram # this results in permissions -rwx--s--x
一般ユーザーはいいえvidcard
グループのメンバーシップが付与されます。会員資格を取得する唯一の方法は、公職に出馬することですmyprogram
。
myprogram
ユーザーが選択した他のプログラムを実行できる「シェル実行」機能または他の方法がある場合、そのユーザーが付与した追加の権限を削除する手順を実行するようにプログラムされていない限り、vidcard
そのシェル/他のプログラムはグループメンバーシップを継承できます。myprogram
あります。他のプログラムを起動する前に、gidビットを設定してください(setregid()
Linuxの場合)。