사용자를 그룹에 추가했지만 파일에 대한 그룹 권한은 여전히 ​​영향을 미치지 않습니다 testfile하면 다음을 제공합니다. -rwxrwxr-x

파일 ( 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

다시 로그온하기 전에.


답변