기존 시스템의 UID 번호는 최대 2000 정도였습니다. 새로운 사용자 관리 시스템을 구현할 때 UID 충돌을 피하기 위한 옵션을 조사 중입니다.
한 가지 옵션은 재할당할 수 없는 UID 목록을 갖는 것입니다. 현재 이 문제를 조사 중입니다.
또 다른 쉬운 옵션은 더 높은 범위(3000+)를 사용하는 것입니다. 염두에 두어야 할 질문이 있나요?
이는 RHEL5, RHEL6 및 RHEL7에서 작동합니다.
답변1
모든 Unix 시스템에는 0(루트용으로 예약됨)부터 65535(잘못된 값으로 예약됨)까지의 범위에 있는 최소 16자리 사용자 ID가 있습니다. 많은 최신 버전(Linux 포함)은 더 큰 값을 지원하지만 혼합 네트워크에서는 모든 운영 체제, 파일 시스템 및 네트워크 프로토콜이 이를 지원하는지 확신하지 않는 한(예: 이전 버전의 NFS는 지원하지 않음) 이를 피해야 합니다. Unix 세계에는 일반적인 규칙이 있습니다. "작은" 값은 시스템용이고 "큰" 값은 관리자용입니다. "소형"과 "대형"에 대한 명확한 정의는 없습니다. 임계값은 일반적으로 100, 1000 또는 그 사이입니다. 또한 관례상 65534는 파일을 소유하지 않고 시스템 서비스를 실행하지 않는 사용자입니다 ( 전 세계에서 액세스할 수 있는 파일만 색인화하는 구현 nobody
과 같이 권한이 없어야 하는 작업에 사용됩니다 ).locate
결과적으로 1000에서 65533 사이의 모든 값은 안전합니다. 이는 그룹 ID에도 적용됩니다.
네트워크에서는 시스템별 계정에 대해 이 범위의 낮은 부분을 사용하고 네트워크 전체 계정에 대해 높은 부분을 사용하는 것이 일반적입니다. 여러 조직에서 사용자 계정을 만드는 경우 10000~19999 및 20000~29999와 같은 서로 다른 범위를 사용할 수 있습니다. 귀하의 경우 기존 시스템의 경우 1000~2999 범위, 새 시스템의 경우 3000~4999 범위를 결정할 수 있습니다. 또는 기존 시스템의 경우 1000~9999, 새 시스템의 경우 10000~19999입니다.
답변2
Linux 커널 2.6 이상에서는 부호 없는 32비트 정수를 UID 및 GID로 지원합니다. 즉, RHEL4+의 최대 UID는 4294967294(4294967295는 예약됨)여야 하지만 이는 시스템 설정 및 설치된 유틸리티, 특히 Shadow-utils에 따라 달라질 수 있습니다. 큰 UID를 시도하여 테스트할 수 있습니다. 발생하는 유일한 일은 UID가 거부된다는 것입니다(RHEL5에서 65536에서 4294967294 사이의 모든 것을 시도하십시오). RHEL6에서는 4294967294보다 높은 값은 거부됩니다.
# useradd -u 4294967295 test
useradd: invalid user ID '4294967295'
RHEL6 및 RHEL7 유틸리티는 32비트를 절대적으로 지원합니다. 아직 RHEL5에 있는 상자가 없기 때문에 RHEL5에 대해 말할 수 없습니다.
따라서 가능한 충돌을 피하는 것이 목표라면 100000과 같은 값으로 시작하는 것이 좋습니다.
추가 정보: 최신 커널 버전에서는 사용자 네임스페이스와 권한이 없는 컨테이너(docker, openvz 및 lxc 참조) 덕분에 40억 개의 UID를 사용하는 것이 그리 어렵지 않습니다. 제가 아는 한, RHEL은 아직 사용자 네임스페이스를 지원하지 않지만 RHEL7에서는 사용자 네임스페이스를 지원할 계획을 발표했기 때문에 곧 백포트될 것으로 예상됩니다.