파일 ( chmod g+w testfile
)의 권한을 변경 하고 실행 ls -l testfile
하면 다음을 제공합니다.
-rwxrwxr-x 1 user1 user1 0 2011-01-24 20:36 testfile
그런 다음 해당 그룹에 사용자를 추가했지만 ( ” / etc / group “에는 user1:x:1000:user2
행이 있음) 해당 파일을 user2로 편집하지 못했습니다. 왜 그렇습니까?
답변
user2
그룹 권한은 다음과 같은 방식으로 작동합니다.
- 로그인하면 프로세스에에서 언급 한 주 그룹의 그룹 구성원
/etc/passwd
과 사용자가 언급 된 모든 그룹이있게됩니다/etc/group
. (더 정확하게는,pw_gid
필드getpw(your_uid)
, 플러스 모든 그룹 있는 사용자가 명시 적 구성원입니다 . 저쪽에가/etc/passwd
와/etc/group
, 정보는 NIS 또는 LDAP와 같은 사용자 데이터베이스의 다른 종류에서 올 수 있습니다.) 주요 그룹이 프로세스의가된다 유효 그룹 ID 다른 그룹은 보충 그룹 ID가 됩니다. - 프로세스 가 파일 액세스 와 같은 특정 그룹의 멤버쉽이 필요한 조작을 수행하는 경우 해당 그룹은 프로세스의 유효 그룹 ID 또는 보충 그룹 ID 중 하나 여야합니다.
보시다시피, 사용자 그룹 멤버쉽 변경은 사용자가 로그인 할 때만 적용됩니다. 프로세스를 실행하기에는 너무 늦습니다. 따라서 사용자는 로그 아웃했다가 다시 로그인해야합니다. 문제가 너무 심하면 별도의 세션 (예 : 다른 콘솔 또는 ssh localhost
)으로 로그인 할 수 있습니다 .
그 과정에서 프로세스는 권한 (사용자 ID, 그룹 ID, 기능) 만 상실 할 수 있습니다 . 커널은 init
루트로 실행되는 프로세스 (부팅 후 첫 번째 프로세스)를 시작 하고 모든 프로세스는 결국 해당 프로세스에서 내려옵니다 ¹. login
공정 (또는 sshd
, 또는 당신을 기록 바탕 화면 관리자의 부분)는 여전히 루트로 실행됩니다. 작업의 일부는 루트 권한을 삭제하고 적절한 사용자 및 그룹으로 전환하는 것입니다.
setuid 또는 setgid 프로그램 실행 중 하나의 예외가 있습니다 . 해당 프로그램은 추가 권한을받습니다. 상위 프로세스 멤버십의 다양한 서브 세트와 setxid 실행 파일을 소유 한 사용자 또는 그룹의 추가 멤버쉽으로 작동하도록 선택할 수 있습니다. 특히 setuid 루트 프로그램에는 루트 권한이 있으므로 모든 것을 수행 할 수 있습니다 ². 이것은 프로그램 이 자신의 일을 좋아 su
하고 sudo
할 수있는 방법 입니다.
¹
때때로 init (initrd, udev)에서 파생되지 않은 프로세스가 있지만 원칙은 같습니다. 루트로 시작하여 시간이 지남에 따라 권한을 잃습니다.
²
SELinux와 같은 다단계 보안 프레임 워크 금지.
답변
user2가 로그 아웃했다가 다시 로그인해야 할 수도 있습니다 (또는 새 로그인 세션을 만들려면 ssh’ing을 시도하십시오). id --groups
사용자의 숫자 그룹 ID를 표시하려면 의 출력을 확인하십시오 .
답변
sudo su $(whoami)
기본적으로와 동일한 해결 방법이 ssh localhost
있지만 ssh 서버를 설치하지 않고도 사용할 수 있습니다.
루트가있는 한. 그러나 방금 새 그룹을 추가하고 권한을 변경 한 경우 가능합니다.
답변
호스트에 ControlMaster ssh 지시문을 사용하는 경우 사용자 로그 아웃이 도움이되지 않는 경우가 있습니다. 동일한 ControlMaster 연결 내에서 계정을 그룹에 추가하고 로그 오프 한 후 다시 로그온해도 세션에 새 멤버십이 표시되지 않습니다. 마스터 연결을 강제로 끊어야합니다.
ssh -O exit hostname
다시 로그온하기 전에.