오늘 이상한 행동을 발견했습니다. 새 그룹에 사용자를 추가하면 다음과 같습니다.
# gpasswd -a test myuser
groups
그런 다음 새 bash 세션에 연결하면 결과는 다음과 같습니다 groups myuser
.
myuser@mycomputer$ groups
wheel myuser
myuser@mycomputer$ groups myuser
wheel myuser test
재부팅할 때만 출력이 groups
동일하게 표시되지만 groups myuser
그룹이 반드시 동일한 순서로 표시되는 것은 아닙니다.
그래서 제 질문은 간단합니다. 왜죠?
답변1
새 그룹이 시작될 때까지는 그룹 멤버십 변경 사항이 적용되지 않기 때문입니다.로그인껍데기. 새로운 비로그인 대화형 쉘 세션(새 터미널을 열 때 얻는 세션)을 시작하는 것은 관련이 없습니다.
따라서 를 실행하면 groups
사용자가 현재 속한 그룹이 인쇄됩니다. 그러나 이러한 그룹은 사용자가 처음 로그인할 때 설정되며 다시 로그인할 때까지 변경할 수 없습니다. 따라서 groups
새 그룹은 포함되지 않습니다.
반면에 시스템은 실행할 때 groups myuser
검색하지 않습니다.현재의사용자는 다음에 속합니다지금은, 사용자가 속한 그룹을 찾습니다 myuser
. 이는 /etc/group
설정 파일을 읽어서 얻은 것입니다(아마도). 사용자가 의 새 그룹에 속하도록 설정되었으므로 /etc/groups
이 명령은 사용자가 그룹에 속하지 않더라도 해당 내용도 표시합니다.지금다시 로그인하지 않으셨기 때문에 이미 이 그룹에 속해 계십니다.
답변2
인수 없이 실행 하면
groups
현재 그룹 목록이 표시됩니다.프로세스. 일반적으로 목록은 단순히 상위 프로세스에서 상속되지만 , 및 유사하게 변경login
됩니다newgrp
.인수를 사용하여 실행 하면
groups
지정된 그룹에 대해 나열된(사용자 데이터베이스에) 그룹이 표시됩니다.사용자.login
다음번에 이 사용자 등에 대해 실행될 때 설정될 그룹 목록 입니다 .
이것이 사용자/그룹 데이터베이스 업데이트가 영향을 미치는 이유입니다.미래로그인 세션 - 이미 실행 중인 프로세스가 변경될 것으로 예상하지 마세요.