사용자 프로세스가 자신에게 가장 높은 우선순위를 할당하는 것을 방지하기 위해 어떤 보안 제어가 있습니까?

사용자 프로세스가 자신에게 가장 높은 우선순위를 할당하는 것을 방지하기 위해 어떤 보안 제어가 있습니까?

저는 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우선 순위를 낮추거나 비실시간 정책으로 전환할 수만 있습니다.
  • 0이 아닌 값을 가진 스레드는 RLIMIT_RTPRIO우선 순위가 더 높게 설정되지 않는 한(권한 있는 스레드에 의해) 이 제한의 적용을 받습니다.

스레드는 CAP_SYS_NICE원하는 것은 무엇이든 할 수 있지만 그 밖의 모든 것은 엄격하게 제어됩니다.

관련 정보