새 그룹 멤버십을 적용하려면 newgrp 또는 su를 사용(또는 로그아웃했다가 다시 로그인)해야 하는 이유는 무엇입니까?

새 그룹 멤버십을 적용하려면 newgrp 또는 su를 사용(또는 로그아웃했다가 다시 로그인)해야 하는 이유는 무엇입니까?

새 그룹 멤버십을 표시하려면 새 로그인(또는 su또는 에 의해 시작된 새 로그인 셸 )이 필요한 이유는 무엇입니까?newgrp

bash(또는 다른 쉘)의 다른 인스턴스를 실행하는 것만으로는 --login작동하지 않지만 su 또는 newgrp와 같은 suid 루트 항목은 작동합니다.

상위 셸에서 상속된 항목이 있거나 새 그룹 멤버십을 숨기는 캐시가 있습니까?

답변1

하위 프로세스가 작성되면 프로세스 사용자 ID 및 그룹 ID가 상위 프로세스로부터 상속됩니다.

따라서 사용자 그룹을 변경할 때(실제로 디스크의 구성 파일을 변경하는 경우) 프로세스는 이를 자동으로 인식하지 않고 그룹 ID를 변경합니다(루트가 아닌 프로세스에는 권한이 없습니다).

bash를 시작하면...음, 그냥 bash를 시작하면 특별한 일이 일어나지 않습니다. 단지 상위 그룹 ID(그래픽 쉘 또는 기타 bash)를 상속받을 뿐입니다.

그러나 su를 실행하거나 로그인하면 모든 마법이 일어납니다. 그들은 모든 하위 프로세스가 이러한 ID를 상속하도록 로그인하고 사용자 ID 및 그룹 ID를 변경할 수 있는지 확인합니다(유효한 루트 ID가 필요한 시스템 호출을 사용하여 suid 비트를 설정함).

관련 정보