最後にこのフレーズを見ました。この回答:
PS:権限のないユーザーとして実行するときにrfkillが機能する理由がわかりません。私のMintにはsetuidまたはsetgidビットはありません。
気になって私のアーチシステムを確認してみました。私のシステムの外観sudo
は次のとおりですrfkill
。ファイルサイズと日付が省略されました。 setuidビットがないようです(比較のためにrfkill
1つあります)。sudo
$ /usr/bin/env ls -lah $(which sudo) $(which rfkill)
-rwxr-xr-x 1 root root [OMITTED] /sbin/rfkill
-rwsr-xr-x 1 root root [OMITTED] /sbin/sudo
興味深いことに、rfkill
ワイヤレスアクセスを無効にして有効にするために実行されます。ここで述べたように、私のアカウントで実行しているにもかかわらずrfkill
(つまり、次のようなものではroot
ないか、sudo
似ていません)。
通常、ハードウェアを有効/無効にするコマンドは権限を使用して実行する必要があるため、rfkill
これを必要としない方法は何ですか?root
root
答え1
最新のLinuxシステムエコシステム、おおよそいつシステム/dev
これに基づいて、物理的にログインした状態(キーボードの前など)でアイテムへのアクセス権を変更できます。
人々が比較できる所有権/dev/rfkill
。たとえば、Debian 12 システムのローカル (物理) セッションにログインした UID 1000 を持つユーザーを表示する場合:
$ echo $UID
1000
$ getfacl -n /dev/rfkill
getfacl: Removing leading '/' from absolute path names
# file: dev/rfkill
# owner: 0
# group: 106
user::rw-
user:1000:rw-
group::rw-
mask::rw-
other::r--
したがって、この追加のACLは所有者にデバイスファイルへのアクセスを許可します。
user:1000:rw-
ユーザーが実際にログインした部分ではない場合(sleep 5
ログインプロンプトを使用してコンソールに切り替える時間がある場合)、このACLは削除されます(存在する場合)。
$ sleep 5; getfacl -n /dev/rfkill
getfacl: Removing leading '/' from absolute path names
# file: dev/rfkill
# owner: 0
# group: 106
user::rw-
group::rw-
mask::rw-
other::r--
接続されたカーネルドライバがデバイスファイルへのACL以上の追加アクセスまたは所有権を特に制限しない限り、これは追加の権限なしでそれを使用するアプリケーションに適用されます。
実行します(rootとして使用する方が良いですが、結果は実際には変わりません)。
inotifywait -m -r -e attrib /dev
ログインプロンプトを使用してコンソールに2回切り替えてから戻ってアイデアを取得するには、通常、次のようにします。
- オーディオ関連ファイル(
/dev/snd/
) - 動画関連ファイル(
/dev/dri/
) - リムーバブルデバイスファイルにすることができます(例:ターゲット...
/dev/cdrom
)。 - 仮想化用 KVM(
/dev/kvm
) - 私が見逃した他のファイルがあるかもしれません。
これはデフォルト値を反映しないかもしれませんが、アイデアを提供します。
クイック検索でこのアイテムを見つけました。システム文書は次の場所にあります。Linuxのマルチシート:
気づくログインしました管理する複数のデバイスクラスのACL、ユーザーコードが座席に接続されているデバイスノードにアクセスできるようにするユーザーがアクティブなセッションを持っている限り。これはデフォルトでアプリケーションに透過的です。
使用して管理する場合システム少なくとも2つのコンポーネントが動作します。
Udevdシステムに存在する対象デバイスにフラグを立ててください。
TAG+="uaccess"
経験的リストは次のように見つけることができます(
/lib
シンボリックリンクを持たないシステム/usr/lib
も検索する必要があります/usr/lib/udev/rules.d
)。grep -rw uaccess /etc/udev/rules.d /lib/udev/rules.d
他の結果のうち、rfkillの行は次のようになります
/lib/udev/rules.d/70-uaccess.rules
。KERNEL=="rfkill", SUBSYSTEM=="misc", TAG+="uaccess"
ログインしましたユーザーシートの変更を追跡し(プロセスの作成に加えて)、以前にタグ付けされたデバイスのACLを変更します。有アクセスユーザー席が有効な場合
小さな詳細については:
seat_set_active()
->seat_apply_acls()
->devnode_acl_all()
、後で確認してください有アクセスブランド。