프로세스가 시스템 호출을 발행할 수 있는지 여부를 Linux는 어떻게 알 수 있습니까?

프로세스가 시스템 호출을 발행할 수 있는지 여부를 Linux는 어떻게 알 수 있습니까?

프로세스가 권한이 있는 프로세스에서만 실행할 수 있는 시스템 호출을 실행하려고 한다고 가정해 보겠습니다.

프로세스가 그러한 시스템 호출을 발행하도록 허용되는지 Linux는 어떻게 알 수 있습니까? Linux는 프로세스의 fsuid(파일 시스템 사용자 ID)를 보고 루트 프로세스인지 확인합니까? 아니면 프로세스의 fsuid(파일 시스템 사용자 ID)를 확인합니까? 시스템 사용자 ID) 루트 프로세스인지 확인하시겠습니까?능력시스템 호출을 실행하는 데 필요한 기능이 있는지 확인하십시오. 아니면 Linux가 이에 대해 다른 방식으로 알고 있습니까?

답변1

일반적으로 커널은 프로세스의 기능을 살펴보고 필요한 기능이 있는지 확인합니다. 이 정보는 관련 시스템 호출의 매뉴얼 페이지에서 찾을 수 있으며, 이 작업을 수행하려면 "프로세스에 CAP_XYZ 기능이 필요합니다"라는 내용이 나와 있습니다. 예를 들어 매뉴얼 페이지를 보십시오.kill(2), 우리는 다음을 살펴봅니다:

   For  a process to have permission to send a signal, it must either
   be privileged (under Linux: have the CAP_KILL  capability  in  the
   user  namespace  of  the target process), or the real or effective
   user ID of the sending process must equal the real or  saved  set-
   user-ID  of  the  target process.

또한create_module(2)페이지에서 다음을 볼 수 있습니다.

DESCRIPTION
   create_module()  attempts  to  create  a loadable module entry and
   reserve the kernel memory that will be needed to hold the  module.
   This system call requires privilege.
...
ERRORS
...
   EPERM  The   caller   was   not   privileged  (did  not  have  the
          CAP_SYS_MODULE capability).

기능은 커널이 내부 데이터 구조에 기록하는 각 프로세스의 속성이기 때문에 커널이 이러한 검사를 수행할 수 있습니다.

관련 정보