存在哪些安全控制措施可以使用户进程无法为自己分配最高优先级?

存在哪些安全控制措施可以使用户进程无法为自己分配最高优先级?

我正在学习 Linux 进程调度程序,并且一直在阅读 pthread_setsched 函数:https://man7.org/linux/man-pages/man3/pthread_setschedparam.3.html

让我惊讶的一件事是线程可以修改自己的优先级/类别。我可以看到这对于配置某些多线程应用程序(例如生产者和消费者)是如何有意义的,但是,任何进程都可以只请求设置自己的优先级,这似乎存在系统稳定性风险。是什么阻止我的 helloworld.out 以最高优先级请求 SCHED_FIFO?这可能会完全锁定系统。

那么有什么机制可以防止进程完全控制调度程序呢?好像可以设置系统错误EPERM,但是,这个在哪里配置呢?

答案1

内核强制执行此操作。规则详述于的“权限和资源限制”部分man 7 sched;总之:

  • SCHED_DEADLINE策略只能由特权线程修改(使用CAP_SYS_NICE);
  • 设置为0的实时线程RLIMIT_RTPRIO只能降低优先级或切换到非实时策略;
  • 具有非零值的线程RLIMIT_RTPRIO将受到该限制,除非它们的优先级已设置为更高(由特权线程)。

线程CAP_SYS_NICE可以做任何他们想做的事,但其他任何事情都受到严格控制。

相关内容