特定の特権ファイルへの非特権ユーザーアクセスを許可する

特定の特権ファイルへの非特権ユーザーアクセスを許可する

強化されたシステムを実行していますジェンツーそして私はインストールしましたXorgフラックスボックス、 そしてコンキーこれらを組み合わせて、最小限のウィンドウ マネージャー デスクトップを作成します。このシステムには、2 人のメイン ユーザーrootと、ログインする通常の実行ユーザーがいます。

問題は、Conkyが内部から温度とバッテリーの情報にアクセスしようとして/sys/class/thermal/thermal_zone1/temp/sys/class/power_supply/BAT1/uevent権限が拒否されたエラーが発生し、表示したいデータが空またはゼロ値として表示されることです。これらは両方のファイルの権限値です。

  File: '/sys/class/thermal/thermal_zone0/temp'
  Size: 4096            Blocks: 0          IO Block: 4096   regular file
Device: 12h/18d Inode: 3719        Links: 1
Access: (0444/-r--r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-03-14 20:14:54.143855495 +0000
Modify: 2015-03-14 20:14:54.143855495 +0000
Change: 2015-03-14 20:14:54.143855495 +0000
 Birth: -

  File: '/sys/class/power_supply/BAT1/uevent'
  Size: 4096            Blocks: 0          IO Block: 4096   regular file
Device: 12h/18d Inode: 3907        Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-03-14 19:23:15.227055847 +0000
Modify: 2015-03-14 19:23:15.227055847 +0000
Change: 2015-03-14 19:23:15.227055847 +0000
 Birth: -

プロセス全体にroot経由でアクセスsudoを許可せずに、Conky が特定の特権ファイルにアクセスできるようにする方法はありますか? で実行できるように sudoers ルールを設定することはできますNOPASSWDが、Conky に完全なルート権限を与えることは望ましくありません。

できれば、プロセスにこれらのファイルへの読み取りアクセスのみを与えたいのですが、副作用なしにこれらのファイルを誰でも読み取り可能にすることはできますか?

編集: 問題の根本原因が分かりました。ファイル自体が問題なのではなく、すでに誰でも読み取り可能な状態になっているため、ファイルを含むディレクトリがユーザーによってのみ drwx されるのです。 および ディレクトリを誰でも読み取り可能にすると、何か悪影響があるでしょ/sys/class/thermal/sys/class/power_supply/sys/class?

編集2: 強化機能の 1 つにより、通常のユーザーはルート権限なしでこれらのファイルにアクセスできないことが判明しました。この結論に至った理由は、ls -alh通常のユーザーとしてディレクトリを実行すると、すべての rwx フラグが、0704 (drwx---r--) に設定した後でも疑問符として表示されるからです。残念ながら、現在の唯一の選択肢は、NOPASSWD sudo ルールを使用して Conky をルートとして実行し、Fluxbox が問題なく起動できるようにすることです。

答え1

私があなたの立場だったら、facl の使用を検討します:

sudo setfacl -Rm u:1000:r /sys/class/

ここで、1000 は conky を実行するユーザーの UID です。上記の例では、/sys/class の下にあるすべてのファイルが、UID 1000 で実行されるすべてのプロセスによって読み取り可能になるように変更されますが、特定のファイルを選択した場合は、さらに制限される可能性があります。

上記の 2 つのファイルだけを読み取り可能にしたい場合は、次のようにします。

sudo setfacl -m u:1000:rx /sys
sudo setfacl -m u:1000:rx /sys/class/
sudo setfacl -m u:1000:r /sys/class/thermal
sudo setfacl -m u:1000:r /sys/class/power_supply

私も Gentoo 強化カーネルを実行しているマシンを持っていますが、アクセス制御リストをどのように処理するかはわかりません。テスト後にこの回答を更新します。

私も conky を実行していますが、これらの権限のハードルをどうやって回避したか思い出せません。

関連情報