사용자 식별자

User identifier

Unix와 유사한 운영체제는 사용자 ID 또는 UID로 약칭되는 사용자 ID라는 값으로 사용자를 식별합니다.UID는 Group Identifier(GID; 그룹 식별자) 및 기타 접근컨트롤 기준과 함께 사용자가 액세스할 수 있는 시스템리소스를 판별하기 위해 사용됩니다.패스워드 파일은 텍스트 사용자 이름을 UID에 매핑합니다.UID는 Unix 파일시스템, 실행 중인 프로세스, tar 아카이브 및 사용되지 않게 된 네트워크 정보 서비스의 inode에 저장됩니다.POSIX 준거 환경에서는 명령줄 명령어는 현재 사용자의 UID뿐만 아니라 사용자 이름, 프라이머리 사용자 그룹 및 그룹 식별자(GID) 등의 상세 정보를 제공합니다.

프로세스 속성

POSIX 규격에서는 프로세스 기술자 테이블에3개의 다른 UID 필드가 도입되어 특권 프로세스가 다른 역할을 동적으로 수행할 수 있게 되었습니다.

유효한 사용자 ID

유효한 UID(euid프로세스의 )는 대부분의 액세스체크에서 사용됩니다.또한 이 프로세스에서 생성된 파일의 소유자로 사용됩니다.유효 GID (egid 또한 사용 중인 특정 커널 구현의 의미 및 사용되는 마운트 옵션에 따라 접근컨트롤에 영향을 주고 파일 작성에도 영향을 줄 수 있습니다.BSD Unix 시멘틱스에 따르면 새로 작성된 파일에 부여된 그룹 소유권은 무조건 작성된 디렉토리의 그룹 소유권으로부터 상속됩니다.AT&따르면TUNIX System V 시멘틱스(Linux Variants에서도 채택)는 일반적으로 새로 작성된 파일에는 에 의해 지정된 그룹 소유권이 부여됩니다.egid파일을 생성하는 프로세스의 일부입니다.대부분의 파일 시스템은 새로 작성된 파일의 그룹 소유권에 관해 BSD 또는 AT&T 중 어느 것을 사용할지를 선택하는 방법을 구현하고 있습니다.S_ISGID(s-gid) 권한이 [1]설정되면 BSD 시멘틱스가 특정 디렉토리에 대해 선택됩니다.

파일 시스템 사용자 ID

Linux에는 파일 시스템 사용자 ID도 있습니다.fsuid파일 시스템에 대한 액세스 제어에 명시적으로 사용됩니다.에 일치합니다.euid특별히 설정되어 있지 않은 한.루트의 사용자 ID는 다음과 같은 경우에만 사용할 수 있습니다.ruid,suid, 또는euidroot 입니다.항상euid변경이 이루어지면 그 변경은 에 전파됩니다.fsuid.

의 의도fsuid프로그램(NFS 서버 등)이 특정 파일 시스템 권한으로 자신을 제한할 수 있도록 하는 것입니다.uid그것을 주지 않고uid신호를 보낼 수 있도록 허락해 주세요.커널 2.0 이후,fsuidLinux는 신호를 보내기 위해 SUSv3 규칙을 준수하기 때문에 더 이상 필요하지 않습니다.fsuid는 호환성의 [2]이유로 남아 있습니다.

저장된 사용자 ID

저장된 사용자 ID(suid)는 권한 상승으로 실행 중인 프로그램이 일시적으로 권한 없는 작업을 수행해야 할 때 사용됩니다.euid(일반적으로) 특권값에서0(특권값 이외의 값)에 의해 특권값이 저장됩니다.suid나중에 [3]프로그램의euid저장된 값으로 되돌릴 수 있습니다.suid권한 없는 프로세스로 인해 높은 권한을 복원할 수 있습니다.euid다음 세 가지 값 중 하나로 이동합니다.ruid, 의 가치suid또는 의 값euid.

실제 사용자 ID

실제 UID(ruid및 실제 GID(rgid)는 프로세스의 실제 소유자를 식별하고 신호 전송 권한에 영향을 줍니다.슈퍼 유저 권한이 없는 프로세스는, 송신자의 유저가 다음의 경우에 한해, 다른 프로세스에 신호를 송신할 수 있습니다.ruid또는euid수신기의 것과 일치합니다.ruid또는suid자녀 프로세스는 부모로부터 자격 정보를 상속받기 때문에 자녀와 부모가 서로 신호를 보낼 수 있습니다.

관습

유형

POSIX 에서는, UID 를 정수 타입으로 할 필요가 있습니다.대부분의 Unix 계열 운영체제는 UID를 부호 없는 정수로 나타냅니다.UID 값의 크기는 시스템에 따라 다릅니다. UNIX OS에 따라서는[which?] 15비트 값을 사용하여 최대 32767의[citation needed] 값을 사용할 수 있는 반면 Linux 등에서는 16비트 UID를 지원하여 65536개의 고유 ID를 사용할 수 있습니다.대부분의 최신 Unix 유사 시스템(예: 1990년 Solaris-2.0, 2001년 Linux 2.4)은 32비트 UID로 전환되어 4,294,967,296개의32 고유 ID를 사용할 수 있습니다.

예약 범위

Linux Standard Base Core Specification에서는 0 ~99 범위의 UID 값은 시스템에 의해 정적으로 할당되며 어플리케이션에 의해 생성되지 않도록 규정되어 있습니다.단, 100 ~499 의 UID는 시스템 관리자 및 포스트 인스톨 [4]스크립트에 의한 동적인 할당용으로 예약되어 있어야 합니다.

Debian Linux는 동적으로 할당된 시스템 사용자 및 그룹을 위해 100~999 범위를 예약할 뿐만 아니라 60000~64999 범위의 사용자와 그룹을 중앙 및 정적으로 할당하고 65000~65533 [5]범위를 추가로 예약합니다.

Systemd는 다음과 같은 특별한[6] UID 범위를 정의합니다.

  • 60001-60513: systemd-homed에 의해 관리되는 홈디렉토리용 UID
  • 61184-65519 (0xef00-0xfff):동적 사용자용 UID

FreeBSD 에서는 패키지에 UID가 필요한 포터는 50 ~999 의 범위에서 빈 UID 를 선택해, 스태틱 [7][8]할당을 등록할 수 있습니다.

일부 POSIX 시스템은 500부터 새로운 사용자에게 UID를 할당하고(macOS, Red Hat Enterprise Linux에서 버전 6까지), 다른 시스템은 1000부터 시작합니다(버전 7, openSUSE,[9] Debian[5] 이후 Red Hat Enterprise Linux).많은 Linux 시스템에서 이러한 범위는 에서 지정됩니다./etc/login.defs,위해서useradd및 유사한 도구입니다.

기업 네트워크(LDAP 및 NFS 서버 )에서의 중앙 UID 할당은 클라이언트컴퓨터에 로컬로 할당되어 있는 UID와의 경합을 피하기 위해 1000을 훨씬 웃도는 UID 번호 및 60000~65535 범위의 UID 번호만 사용하도록 제한될 수 있습니다.새로운 사용자가 로컬로 생성되면 로컬 시스템은 NSS에 [10]이미 존재하는 UID와의 경합을 확인하고 회피해야 합니다.

OS 레벨의 가상화에서는 Linux 네임스페이스를 사용하여 사용자 식별자를 재매핑할 수 있으므로 재매핑된 UID와 GID를 매핑할 범위를 할당해야 합니다.

  • snapd는 UID와 GID를 524288-589823(0x80000-0x8fff) 범위에 매핑합니다.
  • systemd-nspawn 컨테이너 단위 UID 범위의 자동 할당은 524288-1879048191(0x80000-0x6ffffff)[6] 범위를 사용합니다.

systemd 작성자는 OS 수준의 가상화 시스템은 컨테이너당 65536(2)개의16 UID를 할당하고 2의16 [6]정수배수를 추가하여 매핑할 것을 권장합니다.

특별한 값

  • 0: 슈퍼유저의 UID는 보통 0입니다.[11]
  • -1: 값(uid_t) -1는 생략된 [12]인수를 식별하기 위해 POSIX에 의해 예약됩니다.
  • 65535: 이 값은 uid_t가 16비트일 때 API 오류 반환 값이었기 때문에 여전히 회피됩니다.
  • Nobody: 과거 사용자 "nobody"에게 UID가 할당되었습니다.-2여러 운영 체제에서 사용되지만,[13] 2-115 = 32,767과 같은 다른 값도 OpenBSD에서 사용됩니다.16비트 UID와 32비트 UID 간의 호환성을 위해 현재 많은 Linux 배포판에서는 2-216 = 65,534로 설정되어 있습니다. 32비트 UID가 16비트 시스템 [14]호출의 반환 값에 맞지 않을 경우 Linux 커널은 기본적으로 이 값을 반환합니다.Fedora Linux는 시스템 사용을 위해 정적으로 할당된 범위의 마지막 UID(0~99)를 nobody: 99에 할당하고 대신 65534를 호출합니다.nfsnobody.

대체 수단

NFSv4는 정수 번호가 아닌 텍스트 "user@domain" 이름을 사용하여 프로토콜 패킷에서 사용자(및 그룹)를 식별함으로써 숫자 식별자 충돌을 방지하도록 설계되었습니다.단, 운영체제시스템의 커널과 로컬파일 시스템이 정수 사용자 ID를 계속 사용하는 한 로컬 UID 매핑메커니즘 또는 데이터베이스가 잘못 설정되거나 손실되거나 동기화되지 않은 경우 추가 변환 절차(idmap 데몬 프로세스 사용)가 발생할 수 있습니다.사용자 이름의 "@domain" 부분은 특정 이름을 할당한 기관을 나타내기 위해 사용할 수 있습니다. 예를 들어 다음과 같은 형식입니다.

  • Kerberos 왕국명
  • Active Directory 도메인 이름
  • 운영 체제 벤더 이름(배포 고유 할당용)
  • 컴퓨터 이름(디바이스 고유의 할당용)

그러나 실제로 많은 기존 구현에서는 NFSv4 도메인을 고정 값으로만 설정할 수 있으므로 사용할 수 없습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ chmod(1)Solaris 10 사용자 명령어 레퍼런스 매뉴얼
  2. ^ 케리스크, 마이클Linux 프로그래밍 인터페이스.No Starch Press, 2010, 페이지 171.
  3. ^ "Setuid Demystified" (PDF). Cs.berkeley.edu. Retrieved 2016-09-24.
  4. ^ "9.3. UID Ranges". Refspecs.linuxfoundation.org. Retrieved 2016-09-24.
  5. ^ a b "Debian Policy Manual – Section 9.2.2: UID and GID classes". Debian.org. 2019-07-18. Retrieved 2019-07-26.
  6. ^ a b c "Users, groups, UIDs and GIDs on systemd systems". GitHub. Retrieved 2020-09-26.
  7. ^ "FreeBSD Porter's Handbook". Freebsd.org. Retrieved 2016-09-24.
  8. ^ "Chapter 6. Special Considerations".
  9. ^ "RHEL7 System changes". Certdepot.net. 2016-01-17. Retrieved 2017-03-22.
  10. ^ https://systemd.io/UIDS-GIDS/ "두 할당 범위 모두: UID 할당이 이루어지면 먼저 NSS가 충돌 여부를 확인하고 엔트리가 발견되면 다른 UID가 선택됩니다."
  11. ^ "Getpwuid". Pubs.opengroup.org. Retrieved 2016-09-24.
  12. ^ "Chown". Pubs.opengroup.org. Retrieved 2016-09-24.
  13. ^ "NetBSD Problem Report #6594: the default "nobody" credentials (32767:9999) do not match mountd's default (-2:-2)". GnaNFSv4ts.netbsd.org. Retrieved 2016-09-24.
  14. ^ "Namespaces in operation, part 5: User namespaces". Lwn.net. Retrieved 2016-09-24.