Linux 사용자는 여러 기본 사용자 그룹을 가질 수 있습니까?

Linux 사용자는 여러 기본 사용자 그룹을 가질 수 있습니까?

단일 Linux 사용자는 몇 개의 기본 그룹을 가질 수 있습니까? 사용자가 여러 기본 그룹을 가질 수 있는 경우 사용자에게 여러 기본 그룹을 어떻게 할당합니까? 하나만 있다면 그 이유는 무엇입니까?

답변1

아니요, 기본 그룹은 고유합니다. 즉, 사용자에게 기본 그룹이 할당됩니다. 이는 Unix 사용자 및 그룹 개념 때문입니다. 유닉스 초기에는 이런 경우가 있었고 나중에 마이너 그룹이 추가되었습니다. Unix 개발 초기에 여러 그룹에 대한 할당이 존재했다면 이들 사이에 아무런 차이가 없었을 수도 있습니다. 하지만 지금은 유닉스의 유산을 보고 있는 것 같습니다.

참고: 기본 그룹과 보조 그룹의 차이점아무것도 없다형식에 따라 다릅니다 /etc/passwd.만약에Unix/Linux는 여러 기본 그룹을 지원하므로 형식은 /etc/passwd이를 확실히 반영합니다. 보조 그룹이 할당되는 방식은 /etc/group실제로 버팀목입니다.

답변2

이는 linux/unix에서는 불가능합니다. 기본 그룹은 /etc/passwd 파일의 네 번째 필드이며 특정 형식을 갖습니다.

username:*:userid:groupid:gecos:homedir:shell

네 번째 필드에는 정수 목록이 허용되지 않습니다.

보조 그룹 할당은 /etc/group에 있습니다. 여기에서 여러 그룹의 사용자를 나열할 수 있습니다.

답변3

사용자는 두 개 이상의 기본 그룹을 가질 수 없습니다. 왜? 데이터에 액세스하는 데 사용되는 API는 passwd데이터를 하나의 기본 그룹으로 제한하기 때문입니다. 바라보다man 3 getpwent:

The getpwent() function returns a pointer to a structure containing
the broken-out fields of a record from the password database (e.g.,
the local password file /etc/passwd, NIS, and LDAP).  The first time
getpwent() is called, it returns the first entry; thereafter, it
returns successive entries.

The passwd structure is defined in <pwd.h> as follows:

   struct passwd {
       char   *pw_name;       /* username */
       char   *pw_passwd;     /* user password */
       uid_t   pw_uid;        /* user ID */
       gid_t   pw_gid;        /* group ID */
       char   *pw_gecos;      /* user information */
       char   *pw_dir;        /* home directory */
       char   *pw_shell;      /* shell program */
   };

노트:gid_t pw_git. 표준은pwd.h:

헤더는 최소한 다음 멤버를 포함해야 하는 구조를 <pwd.h>정의해야 합니다 .struct passwd

char    *pw_name   User's login name. 
uid_t    pw_uid    Numerical user ID. 
gid_t    pw_gid    Numerical group ID. 
char    *pw_dir    Initial working directory. 
char    *pw_shell  Program to use as shell. 

헤더는 에 설명된 대로 및 유형을 <pwd.h>정의해야 합니다 .gid_tuid_tsize_t<sys/types.h>.

그리고 페이지에서 types.h:

nlink_t, uid_t, , gid_tid_t은 정수형이어야 합니다.

따라서 표준에서는 기본 그룹 ID를 단일 정수로 제한합니다.

답변4

초기 Unix에서 사용자는 하나의 그룹에만 속했고 /etc/passwd파일에 등록되었습니다. 이는 한 명의 사용자와 한 그룹의 권한으로 실행되는 프로세스에서 발생하며 해당 항목은 로그인 시 실행되는 셸을 제공합니다.

나중에 사용자는 다른 그룹에 속할 수 있습니다(그룹별 액세스 권한을 얻기 위해). 그룹을 변경하는 명령이 있는데 chgrp(1), 이는 기본적으로 새 사용자 + 그룹으로 새 셸을 시작합니다. 이 파일에는 /etc/group사용자가 속할 수 있는 그룹(및 해당하는 경우 해당 그룹에 대해 변경할 비밀번호)이 나열되어 있습니다. 레코드의 기본 그룹은 /etc/passwd다음과 같습니다.기초적인그룹.

최신 Unix 시스템에는 사용자/비밀번호 데이터를 등록하기 위한 다양한 데이터베이스가 있습니다. 이에 대해서는 계속해서 설명하겠습니다 /etc/passwd. /etc/group하지만 단순화를 위해 오늘은 세부 사항이 특정 구성에 따라 다릅니다. 이러한 파일의 형식은 1980년대 이후 거의 변경되지 않았으며 필드의 일반적인 의미는 변경되지 않았습니다. 사용자 데이터에 액세스하기 위한 Unix API는 여전히 이러한 파일의 레이아웃에 따라 달라집니다.

나중에 프로세스는 동시에 둘 이상의 그룹에 속할 수 있습니다. 따라서 로그인 쉘에서 시작된 사용자 프로세스는 동시에 여러 그룹에 속하며, 이 그룹에서 사용자가 속할 수 있는 모든 그룹을 얻습니다 /etc/group.

이전 논의에서 현대 Unix 시스템에서 사용자는 (레거시 파일 형식으로 인해) 하나의 기본 그룹에만 속할 수 있지만 기본 그룹과 보조 그룹 간의 구분은 거의 사라졌습니다.

관련 정보