현재(셸) 프로세스 내에서 내 그룹에 추가할 수 있나요? [복사]

현재(셸) 프로세스 내에서 내 그룹에 추가할 수 있나요? [복사]

그룹에 자신을 추가하면 새로 시작된 프로세스에만 적용됩니다. 실제로는 그보다 더 제한적입니다. 새 로그인에서만 작동하는 것 같습니다. 정확한 메커니즘이 무엇인지는 모르겠지만 그것은 내 질문이 아닙니다(나도 그것에 대해 궁금하긴 하지만).

내 질문은: 내 그룹 멤버십을 업데이트할 수 있습니까?현재 쉘 프로세스에서?

나는 대답이 '아니요'라고 생각합니다.

예(직접 복사하여 붙여넣는 것이 아닙니다):

$ groups ; groups kst
kst oldgroup1 oldgroup2
kst : kst oldgroup1 oldgroup2
$ sudo adduser kst newgroup
[sudo] password for kst:
Adding user `kst' to group `newgroup' ...
Adding user kst to group newgroup
Done.
$ groups ; groups kst
kst oldgroup1 oldgroup2
kst : kst oldgroup1 oldgroup2 newgroup
$

이후 adduser내 계정은 의 회원이지만 newgroup현재 쉘 프로세스에는 해당 멤버십이 반영되지 않습니다.

가장 확실한 해결책은 로그아웃했다가 다시 로그인하는 것이지만, 이는 불편합니다.

답변1

이는 프로세스 자체 외부에서는 불가능합니다. 바라보다이 슈퍼유저 질문디버거를 사용하여 프로세스에 연결하고 실행하는 방법에 대한 추가 토론 및 답변setgid()내부에서.

새 그룹 멤버십 획득을 완료하기 위해 새 로그인이 필요한 이유는 루트로 실행 중이거나 프로세스 UID 및 GID가 셸 프로세스에 대해 설정되어야 하기 때문입니다. login이는 sshd이미 setuid및 을 호출하고 있음을 의미합니다 setgid.

관련 정보