GID, 현재, 기본, 보충, 유효 및 실제 그룹 ID?

GID, 현재, 기본, 보충, 유효 및 실제 그룹 ID?

다음 링크에서는 이러한 개념을 다양한 맥락에서 설명합니다. 나는 그들의 정의를 읽었지만 여전히 그들이 어떻게 관련되어 있는지 또는 그들 중 일부가 동일한지 알 수 없습니다.

내 혼란의 원인에 대한 예는 다음과 같습니다.

~에 따르면man id, 내가 입력하면 id그들이 말하는 내용을 얻을 수 있습니다효과적인그리고진짜그룹 ID.

id uid=501(joe) gid=501(joe) groups=501(joe), 100(users)

하지만,위키피디아id구별하기 위해 출력을 나타냅니다.기초적인그리고다시 채우다신분증. 또한 Wikipedia는 다음을 구별합니다.기초적인그리고다시 채우다그리고효과적인그리고진짜그룹 ID. 이러한 개념은 서로 어떻게 관련되어 있습니까?

또한 이것이 사실인가요?기초적인그룹 ID =그룹 ID=현재의그룹 ID?

답변1

여기서는 두 가지 다른 차이점을 혼합하고 있습니다.

  1. ~ 사이진짜그리고효과적인그룹 ID
  2. ~ 사이기초적인그리고다시 채우다사용자 그룹

첫 번째 차이점은 다음과 같습니다.프로세스 작동 방식. 일반적으로 명령/프로그램을 실행하면 사용자의 권한으로 실행됩니다. 그것은 가지고있다진짜그룹 ID는 사용자의 기본 그룹과 동일합니다. 이는 다른 특수 그룹의 구성원으로 특정 작업을 수행하는 프로세스에 의해 변경될 수 있습니다. 이를 위해 프로그램은 setgid자신의 속성을 변경하는 기능을 사용합니다.효과적인그룹 ID.

두 번째 차이점은 다음과 같습니다.사용자. 각 사용자는 자신의메인 그룹. 사용자당 하나만 호출됩니다.지드명령의 출력에서 id​​. 또한 각 사용자는 여러 그룹에 속할 수 있습니다.보충 그룹- 이 열은 출력 끝에 있습니다 id.

[편집하다] :

나는 id여기 맨페이지가 다소 오해의 소지가 있다는 점에 동의합니다. 이는 정보 문서에서 제공하는 설명을 압축한 버전이기 때문일 수 있습니다. 더 명확하게 보려면 info coreutils "id invocation"매뉴얼 끝 부분에 제안된 대로 실행하십시오 id.

답변2

커널 보기

개념적으로 프로세스는 세 그룹에 속합니다. 각 그룹은 다음 그룹의 하위 집합입니다.

  1. 프로세스에서 생성된 파일이 속할 프로세스의 기본 그룹 역할을 하는 단일 그룹입니다.
  2. 그룹이 파일을 열기 위해 권한이 필요할 때 확인되는 그룹 집합입니다.
  3. 추가 권한으로 실행되는 프로세스에서 활용할 수 있는 그룹 집합입니다.

역사적인 이유로 이러한 세트는 다음과 같습니다.

  1. 이것유효 그룹 ID(좋다);
  2. 유효 그룹 ID 플러스보조 그룹 ID;
  3. 위의 모든 플러스실제 그룹 ID그리고저장된 컬렉션 그룹 ID.

일반적으로 프로그램에는 사용자 ID가 있습니다. 실행 파일이 있는 경우설정값모드 비트가 설정되면 프로그램에는 두 개의 사용자 ID가 있습니다. 유효 사용자 ID는 파일 권한, 사용자별 제한, 프로세스가 루트로 실행되는지 여부 결정 등과 관련됩니다. 프로세스에 항상 추가 권한이 필요하지 않거나 루트가 아닌 두 사용자 사이를 전환해야 하는 경우 유효 사용자 ID와 실제 사용자 ID 사이를 전환할 수 있습니다.

그룹에도 동일한 메커니즘이 존재합니다. 시스템을 설계할 때 존재하지 않았던 그룹에 대한 추가 기능이 있습니다. 프로세스는 여러 그룹의 구성원이 될 수 있습니다. 이는 보충 그룹 ID입니다.

사용자 데이터베이스 보기

사용자가 인증되면 사용자의 셸(또는 사용자가 요청하는 프로그램)을 시작하기 전에 로그인 프로세스가 해당 사용자로 전환됩니다. 원하는 사용자로 전환하고 루트 권한을 잃기 직전에 로그인 프로세스가 원하는 그룹으로 전환됩니다.

이전 버전의 UNIX에서는 프로세스가 하나의 그룹에만 있을 수 있었습니다. 그룹은 사용자 데이터베이스(일반적으로 /etc/passwd) 에 저장되는 사용자의 기본 그룹 ID입니다 . 이 그룹은 로그인 프로세스에 의해 시작된 쉘 또는 기타 프로그램의 실제적이고 효과적인 그룹 ID가 됩니다.

요즘에는 프로세스가 여러 그룹에 속할 수 있으므로 사용자도 여러 그룹에 속할 수 있습니다. 그룹 데이터베이스(일반적으로 /etc/group)에는 각 그룹의 사용자 목록이 포함되어 있습니다. 이러한 그룹은 로그인 프로세스에 의해 시작된 프로그램의 보충 그룹 ID가 됩니다.

답변3

여기에는 다른 훌륭한 답변이 많이 있지만 나처럼 여전히 혼란스럽다면 또 다른 접근 방식이 있습니다. 저는 이 분야의 석사가 아닌 학생일 뿐이라는 점을 참고하시기 바랍니다., 따라서 이 답변은 진행 중인 작업이며 적어도 아직은 신뢰할 수 있는 답변으로 간주되지 않습니다. 이 답변 v0.2를 고려하십시오.

그룹은 단순할 수도 있고 복잡할 수도 있습니다.

ID 키는 아래와 같이 사용됩니다.

KEY  Full name --------  Description---------------------------------------------

 u   User                 uID = User  ID (a unique # associated with each user)
 g   Group                gID = Group ID (a unique # associated with each group)
                            While each /etc/passwd entry has one uID and one gID,
                            additional gIDs can be associated with a users via
                            /etc/group.


 L   Login          IDs - uID and gID produced from the Login process.  
                            ('L' is not exactly standard Linux terminology, but
                            useful for explanations below.)

 F   File           IDs - uID and gID retrieved from a file's ownership.
                            ('F' is not exactly standard Linux terminology, but
                            useful for explanations below.)


 R   Real           IDs - Who actually                      runs a process 
 E   Effective      IDs - Who spoofed via setuid or setgid, runs a process
 O   Original Eff.  IDs - Place to save the original Effective ID when changing 
                          it (e.g. temporarily downgrading it) so can later 
                          restore it.  Also called "Saved ID"; (but 'S' was not 
                          used for here to help avoid confusion with the 'S' in  
                          'SetUserID' & SetGroupID.)
 +   Supplimentary gIDs - Optional, additional groups (none or more) running 
                          this process which can be used to test for permissions.

사용자 및 그룹 ID 이름:

Category          USER  GROUP  Notes  
----------------- ----  -----  -------------------------------------------  
 From login:      LuID  LgID   From /etc/passwd lookup

 From files:      FuID  FgID   Each file has these. Set by creator process.


 For each running process:

            Real  RuID  RgID   Actual   user starting the program
       Effective  EuID  EgID   Assigned user starting the program*
           Saved  OuID  OgID   Saves original effective ID.
   Supplementary        +gID1  (optional, additional groups)
                        +gID2     
                         ...  

프로세스가 ID를 얻는 방법:

1)로그인사용자 이름을 확인하고 에서 반환 LuID합니다 .LgID/etc/passwd

2)첫 번째 프로세스Effective=real=login으로 설정합니다. 즉,

EuID=RuID=LuID 
EgID=RgID=LgID

삼)두 갈래로 갈라진 아이RuID, EuID, RgID및 , (&는 저장 및 지원할 수 있음)을 상속 EgID하지만,

  • 만약에실행할 새 프로그램의 파일에 ID 비트를 설정한 다음 파일에서 유효한 비트를 설정합니다.

    EuID=FuID

  • 만약에G실행할 새 프로그램의 파일에 ID 비트를 설정한 다음 파일에서 유효한 비트를 설정합니다.

    EgID=FgID

참고: 기본 파일 시스템수에이드그리고노수이드설치 옵션도 적용됩니다.

4a)의 경우아이디가 사용되었습니다EuID그런 다음 설정을 EuID일시적으로 변경할 수 있지만(예: 루트에서 다운그레이드) 원래 값은 OuID나중에 필요한 경우 복원할 수 있도록 먼저 저장됩니다.

4b)의 경우G아이디가 사용되었습니다EgID그런 다음 설정을 EgID일시적으로 변경할 수 있지만(예: 루트에서 다운그레이드) 원래 값은 OgID나중에 필요한 경우 복원할 수 있도록 먼저 저장됩니다.


파일을 생성하려는 경우:

File's new id's are set from effective id's: FuID=EuID and FgID=EgID
(Permissions are set from umask.)

읽기 가능:

If FuID = EuID  and  user-read bit is set, or  
If FgID = EgID  and group-read bit is set, or  
If FgID = +gID1 and group-read bit is set, or  
If FgID = +gID2 and group-read bit is set, ...  
then allow reading.

쓰기 위해 열려 있음:

(Same as above but write bit set to allow writing.)

공개 실행:

(Same as above but execute bit set to allow execution.)

메시지를 보내야 하는 경우:

Use RuID and RgID.  (Not EuID or EgID). *(Not sure where I read this.)*

인용하다:남성 상품권

추가의:다음은 /etc/group 파일을 예쁘게 인쇄하는 유틸리티입니다:

cat /etc/group | sort -t: -k3n | awk  -F ':' \
  'BEGIN{printf "\n%-20s %-3s %-8s %s", \
           "Group name","pw", "Group ID ", "User list"}\
   BEGIN{printf "\n%-20s %-3s %-8s %s\n", \
           "----------","--", "---------", "---------"} \
        { printf "%-20s %-3s %8d %s\n", $1, $2, $3, $4 }'

관련 정보