Im이 현재 사용자로 로그인 한 경우`groups`의 출력이`groups user`와 다른 이유는 무엇입니까?


21

다음과 같은 결과가 왜 다른지 잘 모르겠습니다. 사용자를 지정하지 않은 그룹은 현재 로그인 한 사용자가 속한 모든 그룹에 그룹을 제공한다는 것을 알고 있습니다.

jacob@box:~$ groups
jacob adm lp dialout cdrom plugdev lpadmin sambashare

jacob@box:~$ groups jacob
jacob : jacob

또한 "현재 프로세스의 그룹"(그룹 매뉴얼 페이지에서)은 무엇을 의미합니까? 그들은 어디에 설치되어 있습니까?

참고 : 내 배포판은 우분투입니다.


@Jake 로그 아웃 한 다음 다시 로그인하십시오.

1
이 문제가 반대로 발생합니다. 'groups myname'은 / etc / groups 파일에있는 모든 그룹을 제공하지만 'groups'만 수행하면 기본 그룹 만 표시됩니다. 그리고 실제로 특정 보조 그룹에 있어야하는 명령은 권한 부족으로 인해 실패합니다. 물론이 원인을 알고 있었으면 좋겠다.
Todd Walton

답변:


11

다음 중 하나 일 수 있습니다.

  • 버그 일 수 있습니다 (의심하더라도)
  • 로그 아웃했다가 다시 로그인해야 할 수도 있습니다

그룹은에서 설정됩니다 /etc/group.


8

모든 프로세스에 현재 실제 유효 사용자 ID와 실제 유효 그룹 ID가있는 것처럼 보충 그룹 목록 도 있습니다 . 이것들은 커널에 의해 유지되는 숫자 (이름이 아님)입니다. 로그인 할 때 사용자 ID처럼 로그인 프로세스 (또는 디스플레이 관리자)에 의해 설정됩니다. 그것들은 사용자 ID처럼 하위 프로세스에 의해 상속됩니다.

groups인수없이 실행 하면 궁극적으로 getgroups () 를 호출 하여 커널에서 보충 그룹 목록을 얻습니다. (Linux 시스템에서 / usr / bin / groups는 "id -Gn"을 실행하는 쉘 스크립트로 getgroups ()를 호출합니다.

groups username명령 을 실행 하면 해당 사용자가 로그인 할 때 보조 그룹의 상태를 "추측"해야합니다. 일반적으로 / etc / group을 읽거나 NIS와 대화하거나 nscd 또는 대화를 통해이를 수행합니다. 작동하는 많은 방법.

관찰하고있는 것은 현재 실제 사용자 ID와 / etc / passwd의 항목이 일치하지 않음을 발견하는 것과 유사합니다. 즉, 시스템 구성에 약간의 문제가 있지만 더 조사하지 않고는 말하기가 어렵습니다.


3

(참고 :이 groups명령은 여전히 ​​유용하지만 대부분 id 명령으로 대체됩니다 .)

사용자는 기본적으로 사용자가 /etc/passwd로그인 하는 파일 파일에 정의 된 기본 그룹을 가지고 있지만 오늘날 다른 소스가있을 수 있습니다. 또한 파일에 전통적으로 지정된 2 차 또는 보충 그룹으로 알려진 추가 그룹의 구성원 일 수도 /etc/groups있지만 오늘은 추가 소스 (예 : NIS, LDAP, SAMBA 등)에서 가져 오거나 암시 될 수 있습니다.

기본 및 보조 그룹은 로그인시 정의되며 현재 상태를 유지 합니다. 그러나 사용자는 언제든지 명령 을 사용하여 현재 활성 기본 그룹 을 변경할 수 있습니다 newgrp.

로그인 프로세스는 기본 및 보조 그룹을 설정합니다. 나중에는 일반적으로 libc 함수 initgroups를 호출하여 보조 그룹 데이터 목록을 컴파일하고이를 setgroups 함수로 전달 하여 프로세스 컨텍스트에서이를 설정합니다.

정보 출처 initgroups는 다음과 같습니다.

GNU C 라이브러리 및 기타 특정 응용 프로그램에서 다양한 범주 및 이름 순서로 이름 서비스 정보를 얻을 수있는 출처를 결정합니다. 각 정보 범주는 데이터베이스 이름으로 식별됩니다.

groups명령은 현재 사용자에게 적용된 그룹을 표시하며 목록은 현재 기본 그룹으로 시작한 다음 로그인시 보충 그룹이 표시됩니다. 로그인 시점 이후의 데이터 소스 변경 사항은 표시된 목록에 반영되지 않습니다.

groups username명령은 Linux 에 해당 사용자의 그룹 을 계산 하도록 요청하며 ,이 파일은 주로 파일 /etc/password/etc/groups추가 소스를 사용합니다. 이것은 시스템 파일의 현재 상황을 반영하며 로그인 시점부터 여전히 유효한 현재 그룹 과 같지 않을 수 있습니다 .

groups username는 로그인 프로세스가 분명히 귀하의 경우에는 무슨 일 귀하의 추가 그룹을 계산하는 데 사용하는 모든 소스를 사용하지 않는 경우 명령은 다른 결과를 제공 할 수 있습니다. 이러한 소스는 로그인을 통해 액세스 할 수 없거나 명령으로 문의하지 않을 수 있습니다.

id username로그인 프로세스만큼 완벽하지는 않지만 명령을 사용하면 더 나은 결과를 얻을 수 있습니다. 이 id명령은 이전 명령보다 최신이며보다 정확한 groups명령이었습니다.

groups명령이 정확하고 정확한 결과를 제공 하지만 명령을 수행하여 groups username명령을 수행 할 수 없다는 것을 잘 알고 있습니다 .

groups명령 의 소스 코드를 검사하지 않고 groups usernameLinux 배포판에서 명령을 구현하면 모든 보충 그룹에서 나온 ( /etc/groups사용하지 않는 경우) 사용하지 않는 것으로 분석 /etc/nsswitch.conf됩니다. 따라서 기본 그룹 이름 만 표시됩니다 jacob.

자세한 내용은 다음을 참조하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.