Linux : 그룹 및 그룹 사용자 이름


12

아무도 리눅스 명령을 왜 알고 있습니까?

    groups 

와 다른 출력을 보여줍니다

    groups username 

로그인 한 사용자는 username 매개 변수와 동일합니다. 예:

    thorsten@ubuntu:~/tmp$ groups
    thorsten adm dialout cdrom plugdev lpadmin admin sambashare
    thorsten@ubuntu:~/tmp$ groups thorsten
    thorsten : thorsten adm dialout cdrom plugdev nogroup lpadmin admin sambashare

1
이 질문의 사본이 너무 많아서 어디서부터 시작 해야할지조차 모릅니다.
user1686

답변:


12

당신이 실행하면 , 그것은 조회 1 에서 주어진 사용자를 하고 (이 LDAP, NIS 또는 뭔가 다른 사람이 될 수 있지만 2 와 쇼)를 사용하면 모든 그룹이 발견했다.groups username/etc/passwd/etc/group

당신이 실행할 때 다른 한편으로는, groups인수없이 명령을 단순히 모든 그룹이 나열되어 그 자체 에 속하는 3 입니다 - 필요는 없다 에 나와있는 것과 같은 /etc/group. (자세한 설명은 아래를 참조하십시오.) 실제로, GID를 그룹 이름으로 변환하기위한 유일한 검색 /etc/group입니다.


각 프로세스에는 "실제 그룹 ID"(기본 GID), "유효 그룹 ID"(EGID) 및 "보조 그룹"ID (보조 GID) 목록이 포함 된 자격 증명 세트가 있습니다. 기본적으로 프로세스는 부모로부터 자격 증명을 상속합니다. 그러나 루트 (UID 0)로 실행되거나 CAP_SETUID기능이 있는 프로세스 는 임의의 자격 증명을 설정할 수 있습니다.

특히 tty, X11 또는 SSH를 통해 Linux에 로그인 할 때 로그인 프로세스 (/ bin / login, gdm, sshd)는 사용자 이름을 조회하여 UID, 기본 GID 및 보조 GID를 결정합니다. . 개인용 컴퓨터에서 이것은 파일 passwdgroup파일 (또는 NIS, LDAP 등) 에서 적절한 행을 읽는 것을 의미합니다 .

다음으로, 로그인 프로세스는 스위치 4 세션을 시작하기 전에 그 자격 증명을, 당신은 지금부터 시작 모든 프로세스는 동일한 UID 및 GID가있을 것이다 - 시스템이 확인하지 않는 /etc/group이상 5 와 만든 수정을 선택하지 않습니다.

이런 식으로 /usr/bin/groups프로세스는 데이터베이스에있는 내용이 아니라 로그인했을 때 와 동일한 그룹에 속합니다 .

참고 : 위의 설명은 거의 모든 유닉스에도 적용됩니다. 윈도우 NT 제품군 (UID 및 GID 모두 "SID가"라고 제외하고, 자격 증명은 "프로세스 토큰"라고 더 "기본 그룹"이 없으며, CAP_SETUID이다 SeCreateTokenPrivilege 또는 SeTcbPrivilege ); 대부분의 다른 다중 사용자 운영 체제에서도 가능합니다.


1 getpwuid () 및 getgrouplist ()는 사용자 그룹을 조회하는 데 사용됩니다.

2 Linux에서 glibc는 이 정보를 찾을 위치/etc/nsswitch.conf결정 하는 데 사용 합니다 .

3 groups getgid (), getegid () 및 getgroups ()를 사용하여 자체 자격 증명을 얻습니다.

4 setuid (), setgid (), initgroups () 및 관련.

5 예외는 물론, 상승 (실행되는 다양한 도구입니다 setuid를 등) su, sudo, sg, newgrp, pkexec, 등. 이것은 su $USER업데이트 된 그룹 목록으로 쉘을 생성 한다는 의미입니다 .


3

groups자체적으로 프로세스 소유자의 현재 그룹 멤버쉽을 제공합니다 . groups <username>프로세스가 시작된 후 또는 프로세스 소유자가 변경된 후 groupdb가 변경된 경우 와 다를 수 있습니다 .


groups현재 멤버쉽을 제공하지는 않지만 로그인 프로세스 (/ sbin / login, gdm, sshd)가 호출 할 당시 "현재"멤버쉽을 제공했습니다 initgroups().
user1686

1

컴퓨터를 다시 시작하면 그룹과 그룹 사용자 모두 동일한 결과를 제공해야합니다.

그들이 다른 이유는 컴퓨터를 시작할 때 회원이 아닌 새 그룹에 자신을 추가했기 때문입니다.


전체 시스템을 재부팅 할 필요는 없습니다. 새 로그인 세션을 시작하기 만하면됩니다 (예 :을 사용하여 새 가상 콘솔 su에서 현재 세션 다시 열기 닫기). newgrp새 그룹이 포함 된 프로세스를 시작 하는 데 사용할 수도 있습니다 .
pabouk

1
나는 매번 작동하는 간단한 빠른 수정 솔루션을 제공하려고했습니다. 이미이 질문에 대한 답변에 대한 다른 답변이 많이 있습니다. 때로는 사람들이 원하는 것처럼 내 경우처럼 여러 단계를 거치지 않고 작동하는 간단한 솔루션입니다.
Alex

0

를 실행 updatedb하고 변경 사항이 있는지 확인하십시오.

groupdb가 변경되지 않은 OSX 시스템에서도 동일합니다.

albert-hotspot:~ sami$ groups sami
staff com.apple.access_screensharing com.apple.sharepoint.group.2 everyone _appstore localaccounts _appserverusr admin _appserveradm _lpadmin _lpoperator _developer
albert-hotspot:~ sami$ groups
staff com.apple.access_screensharing com.apple.sharepoint.group.2 everyone _appstore localaccounts _appserverusr admin _appserveradm _lpadmin _lpoperator _developer
albert-hotspot:~ sami$ 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.