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.