로그 아웃하지 않고 Linux 사용자 그룹 할당 재로드 할 때

다음을 사용하여 사용자의 보조 그룹 목록을 할당 할 때 :

# usermod -G <grouplist> <user>

실행중인 모든 세션을 로그 아웃하지 않고이 그룹 할당을 강제로 적용 할 수 있습니까?

그룹 할당을 적용하려면 전체 세션을 기본적으로 파괴해야하므로 실행중인 쉘이 많은 Screen 세션이 있는 상황에서 매우 유용 합니다.

newgrp명령을 사용하여 실행중인 셸에서 사용자의 기본 그룹을 변경할 수 있다고 생각 합니다. 보조 그룹에 사용할 수있는 대안이 있습니까?

이상적으로는 모든 쉘에서 수동으로 실행하지 않고 각 쉘에서 적용되는 것을 원하지만 실패하면 Screen이 각각 동일한 명령을 실행하도록 할 수 있습니다.



답변

끔찍한 해 키지 만 두 newgrp그룹을 사용하여 특정 그룹에 대해 이것을 달성 할 수 있습니다 .

id -g

… 현재 기본 그룹 ID를 제공합니다. orig_group이 예제의 목적을 위해 이것을 호출합니다 . 그때:

newgrp <new group name>

…이 그룹을 기본 그룹으로 전환하여 groups또는 로 반환 된 그룹 목록에 추가합니다 id -G. 이제 더 :

newgrp <orig_group>

… 새 그룹을 볼 수있는 쉘을 얻게되며 기본 그룹은 원래 그룹입니다.

이것은 끔찍하며 한 번에 하나의 그룹 만 추가 할 수 있지만, 전체 X 세션에서 로그 아웃 / 로그 아웃하지 않고 그룹을 추가하는 데 몇 번 도움이되었습니다 (예 : 퓨즈를 사용자에게 그룹으로 추가하는 방법) sshfs가 작동하도록).

편집 : 암호를 입력 할 필요가 없습니다 su.


답변

쉘 내부에서 다음 명령을 실행할 수 있습니다

su - $USER

id는 이제 새로운 그룹을 나열합니다 :

id


답변

링크의 멋진 트릭 은 훌륭합니다!

exec su -l $USER

이 작업을 잊어 버릴 때마다 여기에 게시 할 것이라고 생각했습니다. 이것은 Google에서 처음으로 나타나는 링크입니다.


답변

1. 로그 아웃 한 후 다시 로그인하지 않고 새 그룹으로 쉘 가져 오기

하나의 그룹 만 추가하는 경우 다음을 사용했습니다.

exec sg <new group name> newgrp `id -gn`

이것은 Legooolas의 2 계층 newgrp 트릭에 대한 변형이지만 한 줄에 있으며 기본 그룹을 수동으로 입력 할 필요가 없습니다.

sgnewgrp이지만 새 그룹 ID로 실행할 명령을 수락합니다. exec두 번 “로그 아웃”할 필요가 없습니다 새로운 쉘, 기존의 쉘을 대체 수단.

su를 사용하는 것과 달리 암호를 입력 할 필요가 없습니다. 또한 그룹을 추가하지 않고 환경을 새로 고치지 않으므로 현재 작업 디렉토리 등을 유지합니다.

2. 세션의 모든 화면 창에서 명령 실행

at화면의 명령은 (이것은 화면의 명령이 아닌 쉘 명령입니다주의) 지정 어떤 창에서 명령을 실행합니다.

다음 명령을 사용하여 기존의 모든 화면 세션으로 명령을 보낼 수 있습니다.

screen -S <session_name> -X at \# stuff "exec sg <new_group_name> newgrp \`id -gn\`^M"

idScreen 세션에서 실행 하려면 백틱을 이스케이프 처리해야하며 , 명령이 끝날 때 화면을 ‘입력’하려면 ^ M을 사용하십시오.

또한 화면의 stuff명령은 단순히 사용자를 대신하여 명령 텍스트를 입력합니다. 따라서 화면 창 중 하나에 명령 프롬프트에서 반으로 작성된 명령이 있거나 쉘 (예 : emacs, top) 이외의 응용 프로그램을 실행중인 경우 이상한 일이 발생할 수 있습니다. 이것이 문제라면 몇 가지 아이디어가 있습니다.

  • 반으로 작성된 명령을 제거하려면 명령 시작 부분에 “^ C”를 추가하면됩니다.
  • emacs 창 등에서 명령을 실행하지 않으려면`at ‘에게 창 제목 등을 필터링하도록 요청할 수 있습니다 (위의 예에서는 모든 창과 일치하는 “#”을 사용하지만 창 제목, 사용자별로 필터링 할 수 있음) 등).

특정 창 (창 번호로 식별)에서 명령을 실행하려면 다음을 사용하십시오.

screen -S <session_name> -p 0 -X stuff "exec sg <new_group_name> newgrp \`id -gn\`^M"


답변

사용하여 newgrp나에게 명령 해결 문제를 :

newgrp <GroupName>

이 블로그 게시물 에 자세한 설명이 있습니다.


답변

그룹은 일반적으로 로그인시 열거되며, 로그 아웃했다가 다시 로그인하지 않고 그룹 열거를 다시 실행하도록 할 방법이 없습니다.

여기에 투표 한 많은 답변은 새로운 환경을 가진 새로운 쉘을 호출하는 해결 방법을 사용하는 것 같습니다 (다시 로그인하는 것과 동일). 부모 셸과 계속 실행되는 다른 모든 프로그램은 일반적으로 클린 로그 아웃 및 로그인 후 새 셸에서 다시 호출 될 때까지 일반적으로 새 그룹 멤버쉽을받지 않습니다.


답변

당신은 이것을 할 수 있습니다.

을 사용하여 원하는만큼 그룹을 추가하십시오 usermod -G. 그런 다음 실행중인 세션을 가진 사용자 newgrp -는 ‘-‘인수 만 사용하여 실행 하십시오.

이렇게하면 그룹 ID가 기본값으로 다시 초기화되지만 보조 그룹도 설정됩니다. 다음 명령을 실행하면이를 확인할 수 groups이전과 이후, 현재 세션 usermodnewgrp.

이것은 열린 세션마다 실행해야합니다-화면에 대해 잘 모르겠습니다. 그러나 모든 열린 세션을 반복하고 실행할 newgrp수 있다면 좋을 것입니다. 그룹 또는 그룹 ID를 아는 것에 대해 걱정할 필요가 없습니다.

행운을 빈다