그룹을 만드는 방법을 검색할 때마다 예제는 항상 8장(즉, 셸) 명령을 가리킵니다. 일반적인 시스템 호출 목록을 보면(예:위키피디아 페이지), 그룹 ID를 설정하고 가져오는 명령이 표시되지만 생성 방법에 대한 세부 정보는 없습니다.
이 파일에서 파일 시스템 잠금을 획득하는 것으로 보이는 일부 코드를 찾았 /etc/groups
지만 일부 시스템(예: Android)에는 이 파일이 없습니다.
운영 체제는 그룹이 무엇인지 어떻게 알 수 있나요? 파일 및 프로세스 항목에 대한 순전히 메타데이터입니까?
답변1
커널은 그룹이 무엇인지 모릅니다. 그룹 ID만 알고 있습니다. 커널에 대한 그룹을 "생성"할 필요가 없으며 그룹 ID만 할당하면 됩니다(이 모든 것은 사용자에게도 적용됩니다).
이제 전체 운영 체제(커널 외부)는 그룹과 사용자를 관리합니다. 일반적으로 이름(그룹, 로그인)과 ID를 검색하여 서로 변환할 수 있지만 /etc/group
궁극적 으로 라이브러리 호출(시스템 호출 아님) (및 기타 getpw*) 및 ( 에 /etc/passwd
나열된 대로) 다른 옵션도 사용할 수 있습니다. 및 getgr*) 자격 증명 소스로 구성된 모든 항목을 통해 변환합니다./etc/nssswitch.conf
getpwent
getgrent
따라서 사용자와 그룹을 생성하는 셸 명령만 그렇게 수행되기 때문에 찾을 수 있습니다. 커널이 이 정보를 추적하지 않기 때문에 시스템 호출이 없습니다.
(기술적으로는 GUI 인터페이스를 사용하여 생성할 수 있지만 쉘 명령과 다르지 않습니다.)
Linux 커널(Android)의 일부 사용은 사용자와 그룹을 동적으로 생성합니다. 다시 말하지만, 이는 커널이 아닌 사용자 모드 Android 모니터링 시스템에 의해 관리됩니다.
답변2
파일 및 프로세스 항목에 대한 순전히 메타데이터입니까?
예, 커널은 어떤 사용자나 그룹이 존재하는지, 그 이름이 무엇인지 알거나 신경쓰지 않습니다. 그러나 프로세스가 속한 사용자 및 그룹에는 관심이 있습니다. 프로세스는 일반적으로 하나의 사용자 ID와 연결되지만 경우에 따라 여러 사용자 ID와 연결될 수도 있습니다. 프로세스는 기본 및 보조 그룹 목록과도 연결됩니다.
로그인하면 로그인 시스템은 시스템에서 사용하는 인증 데이터 소스를 기반으로 사용자 ID 및 관련 그룹을 프로세스에 할당합니다. 일반 독립 실행형 시스템에서는 /etc/passwd 및 /etc/group 파일이지만 관리되는 시스템에서는 다른 데이터 소스를 구성할 수 있습니다.
최신(Android가 아닌) Linux 시스템에서 이 프로세스는 일반적으로 PAM(플러그형 인증 모듈)이라는 메커니즘에 의해 제어됩니다.
그렇기 때문에 새 그룹에 추가한 후에는 로그아웃했다가 다시 로그인하거나 "newgrp"와 같은 도구를 사용해야 합니다.