ユーザーに予約を許可する

ユーザーに予約を許可する

使用するコードがありますsched_setscheduler~からsched.h

sched_param sched;
sched.sched_priority = 70;
sched_setscheduler(getpid(), SCHED_FIFO, &sched);

しかし、 sudoroot

完全なroot権限を付与せずにユーザーまたはプロセスにこの機能へのアクセス権を付与する方法はありますか?

- 編集する -

ドロバート一つを与えた良い答え使用能力について。では、postinst単に以下を追加します。

setcap cap_sys_nice+ep /path/to/myapp

ここで問題は次のとおりです。

bin$ ./myapp
./myapp error while loading shared libraries: libmylib.so: cannot open shared object file: No such file or directory

$LD_LIBRARY_PATHプログラムはrpath。そうだ予想される動作。解決策はありますか?

setcap cap_setpcap+ep myapp動的ロードを実行する前に試してみましたが、prctl(PR_CAPBSET_DROP, CAP_SETPCAP);役に立たないようです。

ベストアンサー1

スケジューラと優先順位を変更するには、このCAP_SYS_NICE機能のみが必要です。sched(7) の権限とリソースの制限。マンページを見ることもできます。sched_setscheduler、 sched(7) に言及します。

プログラムにこの機能を提供する方法はいくつかあります。最も簡単な方法はおそらく次のとおりです。セットキャップ:

# setcap cap_sys_nice=ep /usr/local/bin/your-program

これはset-user-idと同様に機能しますが、より制限的です(1つの機能のみを提供するため)。もちろん、CAP_SYS_NICEはプログラムにシステムを停止する権限を効果的に付与します(リアルタイム操作ですべてのCPU時間を占めます)。

別の方法には、rootとして実行ラッパー(他のすべての権限を削除する)を使用するか、RealtimeKit / PolicyKitなどを使用して権限を増やす方法があります。

(機能の詳細については、以下から始めることをお勧めします。能力(7))。

おすすめ記事