프로세스 GID란 무엇이며 어떤 용도로 사용되나요?

프로세스 GID란 무엇이며 어떤 용도로 사용되나요?

mod_wsgi에 대한 문서를 읽으면서 작업자 프로세스가 실행될 그룹을 선택할 수 있다는 것을 알았습니다.

파일의 그룹 소유권과 해당 그룹에 속한 사용자만 해당 파일에 대한 그룹 권한을 얻을 수 있는 방법을 이해할 수 있지만 이것이 실행 중인 프로세스에 어떻게 적용되는지는 이해하지 못합니다.

그렇다면 프로세스 GID는 무엇이며 어떤 용도로 사용됩니까?

답변1

이는 실제로 Unix 프로세스의 구성 요소에 따라 다릅니다. 프로세스는 두 가지 방법 중 하나로 구성될 수 있습니다. 이 함수를 통해 또는 C의 함수 fork()중 하나를 통해.exec()

fork()

fork()기본적으로 현재 프로세스를 복제하고 새 프로세스 ID(PID)를 할당합니다. 원래 프로세스의 하위 프로세스입니다. 다음 출력에서 ​​이 관계를 볼 수 있습니다 ps.

$ ps axjf
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
    1  5255  1964  1964 ?           -1 Sl     500   0:39 gnome-terminal
 5255  5259  1964  1964 ?           -1 S      500   0:00  \_ gnome-pty-helper
 5255 18422 18422 18422 pts/1    18422 Ss+    500   0:01  \_ bash
 5255 30473 30473 30473 pts/4    30473 Ss+    500   0:00  \_ bash
30473   782   782 30473 pts/4    30473 Sl     500   1:14  |   \_ evince s.pdf

gnome-terminal여기서는 이것이 상위 프로세스(PID = 5255)이고 bash하위 프로세스(PID = 18422, PPID = 5255) 임을 알 수 있습니다 .

노트:PPID = 상위 프로세스 ID.

프로세스가 상위 프로세스에서 분기되면 상위 프로세스가 현재 가지고 있는 열려 있는 파일에 대한 모든 파일 설명자 복사본과 상위 프로세스의 사용자 및 그룹 ID와 같은 특정 항목을 "상속"합니다.

노트:마지막 두 가지는 파일 시스템에 액세스할 때 프로세스가 갖게 될 파일 및 그룹 권한을 결정하는 것입니다.

그렇다면 프로세스가 상위 프로세스로부터 사용자 및 그룹 ID를 상속받는다면 루트나 단일 사용자가 모든 것을 소유하지 않는 이유는 무엇일까요? 이것이 들어오는 곳입니다 exec().

exec()1 부

특히 이 exec()기능 계열은 execve()현재 프로세스 이미지를 새로운 프로세스 이미지로 "대체"합니다. "프로세스 이미지"라는 용어는 실제로는 디스크의 실행 파일인 파일일 뿐입니다. 이것이 bash 스크립트가 하는 일입니다 /usr/bin/time.

사용자 ID와 그룹 ID는 어떻습니까? 먼저 '페르소나'의 개념을 알아보겠습니다.

페르소나

언제든지 각 프로세스에는 유효 사용자 ID, 유효 그룹 ID 및 보충 그룹 ID 세트가 있습니다. 이러한 ID는 프로세스의 권한을 결정합니다. 이들을 통칭하여프로세스의 역할, "누구"가 액세스 제어 목적인지 결정하기 때문입니다.

exec()2 부

따라서 "프로세스 이미지"를 교체할 수 있을 뿐만 아니라 exec()사용자 및 그룹 ID를 원래 "실제" ID에서 "유효한" ID로 변경할 수도 있습니다.

한 가지 예

이 데모에서는 기본 UID/GID로 셸에서 시작한 다음 보충 GID 중 하나를 사용하여 하위 셸을 생성하여 하위 셸에 유효한 GID로 만들 때 어떤 일이 발생하는지 보여 드리겠습니다.

이를 위해 나는 유닉스 명령을 사용할 것이다 newgrp. newgrp새 셸을 생성하고 이를 유효한 GID로 원하는 보조 그룹에 전달할 수 있습니다.

초보자의 경우:

$ id -a
uid=500(saml) gid=501(saml) groups=501(saml),502(vboxusers),503(jupiter)

이 셸이 현재 기본 UID/GID saml& 로 구성되어 있음을 알 수 있습니다 saml. 일부 파일을 터치하면 다음과 같은 경우도 있음을 알 수 있습니다.

$ touch afile1
$ touch afile2
$ ls -l
total 0
-rw-rw-r-- 1 saml saml 0 May 21 23:47 afile1
-rw-rw-r-- 1 saml saml 0 May 21 23:47 afile2

jupiter이제 보충 그룹을 유효한 GID로 만듭니다 .

$ newgrp jupiter
$ id -a
uid=500(saml) gid=503(jupiter) groups=501(saml),502(vboxusers),503(jupiter)

이제 일부 파일을 터치하면 다음과 같습니다.

$ touch afile3
$ touch afile4
$ ls -l
total 0
-rw-rw-r-- 1 saml saml    0 May 21 23:47 afile1
-rw-rw-r-- 1 saml saml    0 May 21 23:47 afile2
-rw-r--r-- 1 saml jupiter 0 May 21 23:49 afile3
-rw-r--r-- 1 saml jupiter 0 May 21 23:49 afile4

쉘의 유효 GID는 jupiter이므로 디스크와의 상호 작용으로 인해 jupiter일반 기본 그룹 대신 파일이 생성됩니다 saml.

인용하다

답변2

사용자는 파일에 액세스하지 않습니다. 단지 입력하고 이동하고 마우스를 클릭하기만 하면 됩니다. 프로세스만 파일에 액세스할 수 있습니다. 사용자는 프로세스를 시작하고 프로세스는 사용자(기본 및 보조 그룹 포함)와 관련된 권한을 갖습니다.

답변3

프로세스의 권한은 프로세스의 속성을 기반으로 합니다. 이는 /etc/passwd합계 항목을 직접적으로 기반으로 하지 않습니다 /etc/group. 이 파일은 사용자가 로그인한 경우에만 읽혀지며 세션 초기화 프로세스가 실행되는 uid 및 gid를 결정합니다. 동일한 세션의 후속 프로세스(이 초기 프로세스의 하위 프로세스 또는 일반적으로 하위 프로세스)는 이러한 uid 및 gid를 상속합니다(예외setuid/setgid프로그램).

대부분의 경우 프로세스의 GID는 프로세스가 액세스할 수 있는 파일을 결정합니다. 프로세스의 uid가 파일의 소유자인 경우 소유자 권한이 적용됩니다. 그렇지 않으면 프로세스의 gid(유효 또는 보충) 중 하나가 파일의 그룹 소유자인 경우 그룹 권한이 적용되고 그렇지 않으면 "기타" 권한이 적용됩니다.

관련 정보