다음 링크에서는 이러한 개념을 다양한 맥락에서 설명합니다. 나는 그들의 정의를 읽었지만 여전히 그들이 어떻게 관련되어 있는지 또는 그들 중 일부가 동일한지 알 수 없습니다.
내 혼란의 원인에 대한 예는 다음과 같습니다.
~에 따르면man id
, 내가 입력하면 id
그들이 말하는 내용을 얻을 수 있습니다효과적인그리고진짜그룹 ID.
id uid=501(joe) gid=501(joe) groups=501(joe), 100(users)
하지만,위키피디아id
구별하기 위해 출력을 나타냅니다.기초적인그리고다시 채우다신분증. 또한 Wikipedia는 다음을 구별합니다.기초적인그리고다시 채우다그리고효과적인그리고진짜그룹 ID. 이러한 개념은 서로 어떻게 관련되어 있습니까?
또한 이것이 사실인가요?기초적인그룹 ID =그룹 ID=현재의그룹 ID?
답변1
여기서는 두 가지 다른 차이점을 혼합하고 있습니다.
- ~ 사이진짜그리고효과적인그룹 ID
- ~ 사이기초적인그리고다시 채우다사용자 그룹
첫 번째 차이점은 다음과 같습니다.프로세스 작동 방식. 일반적으로 명령/프로그램을 실행하면 사용자의 권한으로 실행됩니다. 그것은 가지고있다진짜그룹 ID는 사용자의 기본 그룹과 동일합니다. 이는 다른 특수 그룹의 구성원으로 특정 작업을 수행하는 프로세스에 의해 변경될 수 있습니다. 이를 위해 프로그램은 setgid
자신의 속성을 변경하는 기능을 사용합니다.효과적인그룹 ID.
두 번째 차이점은 다음과 같습니다.사용자. 각 사용자는 자신의메인 그룹. 사용자당 하나만 호출됩니다.지드명령의 출력에서 id
. 또한 각 사용자는 여러 그룹에 속할 수 있습니다.보충 그룹- 이 열은 출력 끝에 있습니다 id
.
[편집하다] :
나는 id
여기 맨페이지가 다소 오해의 소지가 있다는 점에 동의합니다. 이는 정보 문서에서 제공하는 설명을 압축한 버전이기 때문일 수 있습니다. 더 명확하게 보려면 info coreutils "id invocation"
매뉴얼 끝 부분에 제안된 대로 실행하십시오 id
.
답변2
커널 보기
개념적으로 프로세스는 세 그룹에 속합니다. 각 그룹은 다음 그룹의 하위 집합입니다.
- 프로세스에서 생성된 파일이 속할 프로세스의 기본 그룹 역할을 하는 단일 그룹입니다.
- 그룹이 파일을 열기 위해 권한이 필요할 때 확인되는 그룹 집합입니다.
- 추가 권한으로 실행되는 프로세스에서 활용할 수 있는 그룹 집합입니다.
역사적인 이유로 이러한 세트는 다음과 같습니다.
- 이것유효 그룹 ID(좋다);
- 유효 그룹 ID 플러스보조 그룹 ID;
- 위의 모든 플러스실제 그룹 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 }'