Linux-Kernel

存在哪些安全控制以使使用者程序無法為自己分配最高優先級?

  • February 16, 2022

我正在學習 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可以為所欲為,但其他任何事情都受到嚴格控制。

引用自:https://unix.stackexchange.com/questions/690966