使用するコードがありますsched_setscheduler
~からsched.h
sched_param sched;
sched.sched_priority = 70;
sched_setscheduler(getpid(), SCHED_FIFO, &sched);
しかし、 sudo
root
完全な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))。
答え2
少し奇妙で、オペレーティングシステムの脆弱性を公開するが、解決策があります。
この期間中、postinst
私は次のことを行います。
cp $(which chrt) bin/chrt
setcap cap_sys_nice+ep bin/chrt
その後、コードからプロセスを開始します。
bin/chrt -o -p 70 getpid()
公開されたばかりの脆弱性は、このバージョンを使用している人は誰でもchrt
管理者権限なしでこれを実行できることです。厳密に制御されたターゲット環境を実行しているため、この脆弱性は問題ありませんが、ターゲット環境を制御できない人にはお勧めできません。