다음 링크는 이러한 개념을 다른 상황에서 설명합니다. 나는 그들의 정의를 읽었지만, 그것들이 어떻게 관련되어 있는지, 또는 그중 일부가 동일한 지 여전히 알 수 없습니다.
다음은 혼란의 원인 중 하나입니다.
에 따르면 man id
, 입력하면 효과 적이고 실제 그룹 ID id
라고하는 것을 가져와야합니다.
id uid=501(joe) gid=501(joe) groups=501(joe), 100(users)
그러나 Wikipedia 는 기본 ID 와 보조 ID id
를 구별 하기위한 출력을 나타냅니다 . 또한, 위키 백과는 구별 차 대 보충 하고 효과적인 대 실제 그룹 ID. 이러한 개념은 서로 어떻게 관련이 있습니까?
또한 기본 그룹 ID = 그룹 ID = 현재 그룹 ID 인 것이 사실 입니까?
답변
여기에 두 가지 차이점이 있습니다.
- 사이에 실제 와 유효 그룹 ID
- 사이 주 및 보조 사용자 그룹
첫 번째 차이점은 프로세스가 실행되는 방법을 나타냅니다 . 일반적으로 명령 / 프로그램을 실행할 때 사용자의 권한으로 실행됩니다. 실제 그룹 ID 는 사용자의 기본 그룹과 동일합니다. 다른 특수 그룹의 구성원으로 일부 작업을 수행하기 위해 프로세스에 의해 변경 될 수 있습니다. 이를 위해 프로그램 setgid
은 유효 그룹 ID 를 변경 하는 기능을 사용합니다 .
두 번째 차이점은 사용자를 나타냅니다 . 각 사용자에게는 기본 그룹이 있습니다. 사용자 당 하나만 있으며 명령 출력에서 gid 라고합니다 id
. 그 외에도 각 사용자는 여러 보충 그룹에 속할 수 있으며 id
출력 끝에 표시됩니다 .
[편집하다] :
id
여기 맨 페이지 가 다소 오해의 소지가 있음에 동의합니다 . 정보 문서에서 제공하는 설명이 제거되어 있기 때문일 수 있습니다. 보다 명확하게 보려면 설명서 info coreutils "id invocation"
끝에 제안 된대로 실행하십시오 id
.
답변
커널 뷰
개념적으로 프로세스가 속해있는 3 가지 그룹 세트가 있습니다. 각 세트는 다음 세트의 서브 세트입니다.
- 프로세스의 기본 그룹 인 단일 그룹으로이 프로세스에서 작성된 파일이 속합니다.
- 그룹에 파일을 열 수있는 권한이 필요할 때 확인되는 그룹 집합입니다.
- 추가 권한 프로세스로 실행중인 프로세스가 사용할 수있는 그룹 세트.
역사적 이유로 이러한 세트는 각각 다음과 같습니다.
- 유효 그룹 ID (EGID);
- 유효 그룹 ID 및 보충 그룹 ID ;
- 위의 모든 플러스의 실제 그룹 ID 와 저장된 설정 그룹-ID .
일반적으로 프로그램에는 단일 사용자 ID가 있습니다. 실행 파일에 setuid 모드 비트가 설정 되어 있으면 프로그램에는 두 개의 사용자 ID가 있습니다. 유효 사용자 ID는 파일 권한, 사용자 별 제한, 프로세스가 루트로 실행 중인지 여부 등을 결정하는 데 사용됩니다. 프로세스는 항상 추가 권한이 필요하지 않거나 루트가 아닌 두 사용자간에 전환해야하는 경우 유효 사용자 ID와 실제 사용자 ID 사이를 전환 할 수 있습니다.
그룹에 대해 동일한 메커니즘이 존재합니다. 그룹의 경우 시스템을 설계 할 때 존재하지 않은 추가 기능이 있습니다. 프로세스는 여러 그룹의 구성원 일 수 있습니다. 이들은 보충 그룹 ID입니다.
사용자 데이터베이스보기
사용자가 인증되면 사용자의 쉘 (또는 사용자가 요청한 프로그램)을 시작하기 직전에 로그인 프로세스가 해당 사용자로 전환됩니다. 원하는 사용자로 전환하기 직전에 (그리고 루트 권한을 잃기 전에) 로그인 프로세스가 원하는 그룹으로 전환됩니다.
초기 유닉스 버전에서는 프로세스가 단일 그룹에만있을 수 있습니다. 이 그룹은 사용자 데이터베이스 (일반적으로 /etc/passwd
)에 저장된 사용자의 기본 그룹 ID 입니다. 이 그룹은 로그인 프로세스에 의해 시작된 쉘 또는 기타 프로그램의 실제 유효 그룹 ID가됩니다.
요즘에는 프로세스가 여러 그룹에 속할 수 있으므로 사용자도 여러 그룹에 속할 수 있습니다. 그룹 데이터베이스 (일반적으로 /etc/group
)에는 각 그룹의 사용자 목록이 포함됩니다. 이 그룹은 로그인 프로세스에 의해 시작된 프로그램의 보충 그룹 ID가됩니다.
답변
여기에 다른 많은 훌륭한 답변이 있지만, 여전히 혼란 스럽다면 다른 접근법이 있습니다. 나는 마스터가 아닌이 물건의 학생 일 뿐이 므로이 답변은 진행중인 작업이며 적어도 아직은 확실한 답변으로 간주되지 않습니다. 이 답변 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) 첫 번째 프로세스 는 유효 = 실제 = 로그인을 설정합니다.
EuID=RuID=LuID
EgID=RgID=LgID
3) 갈래 어린이 상속 RuID
, EuID
, RgID
,와 EgID
, (아마도 저장 및 좌약), 그러나,
-
새 프로그램의 파일에 s u id 비트가 설정되어 있으면 파일에서 유효로 설정하십시오.
EuID = FuID
-
실행할 새 프로그램의 파일에 s g id 비트가 설정되어 있으면 파일에서 유효로 설정하십시오.
EgID = FgID
참고 : 기본 파일 시스템의 suid 및 nosuid 마운트 옵션도 적용됩니다.
4A) 의 경우의 U 자 ID는 사용 된 세트 EuID
그리고, EuID
일시적으로 변경할 수있다 (예를 들면)의 뿌리에서 다운 그레이드를하지만, 처음 원래의 값으로 저장되어있어 OuID
필요한 경우에 복원 할 수 있도록.
4B) 만약 S g의 ID를 사용 하였다 세트 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.)*
참조 : man 자격 증명
추가 : / 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 }'