Linux-Kernel
存在哪些安全控制以使使用者程序無法為自己分配最高優先級?
我正在學習 Linux 程序調度程序並一直在閱讀 pthread_setsched 函式:https ://man7.org/linux/man-pages/man3/pthread_setschedparam.3.html
讓我感到驚訝的一件事是允許執行緒修改自己的優先級/類。我可以看到這對於配置某些多執行緒應用程序(例如生產者和消費者)有什麼意義,但是,任何程序都可以請求設置自己的優先級,這似乎是一個系統穩定性風險。是什麼阻止了我的 helloworld.out 以最高優先級請求 SCHED_FIFO?這可能會完全鎖定係統。
那麼有哪些機制可以防止程序完全控制調度程序呢?似乎可以設置系統錯誤 EPERM,但是,這是在哪裡配置的?
核心強制執行此操作。規則在“權限和資源限制”部分中
man 7 sched
有詳細說明;總之:
SCHED_DEADLINE
策略只能由特權執行緒修改(帶CAP_SYS_NICE
);- 設置為 0的實時執行緒
RLIMIT_RTPRIO
只能降低其優先級或切換到非實時策略;- 非零的執行緒
RLIMIT_RTPRIO
被綁定到該限制,除非它們的優先級被設置得更高(由特權執行緒)。執行緒
CAP_SYS_NICE
可以為所欲為,但其他任何事情都受到嚴格控制。