2009-06-18 5 views
4

useradd (영문) 맨 페이지에 따르면 1000 이하의 UID는 일반적으로 시스템 계정 용으로 예약되어 있습니다.잘 알려진 UID는 무엇입니까?

나는 자체 사용자로 실행될 서비스를 개발 중입니다. 잘 알려진 포트는 /etc/services에 있습니다.

잘 알려진 UID가 무엇인지 알 수있는 곳이 있습니까? 다른 사람의 UID와 충돌하는 것을 피하고 싶습니다.

+1

이 질문은 아마도 http://serverfault.com에 더 적합 할 것입니다. – Templar

+0

나는 처음에는 그럴 것이라고 생각했지만 시스템 관리자가 설치 한 프로그램의 UID를 선택하는 것이 아니 었습니다. 개발자 (또는 패키지 관리자)의 일입니다. –

+1

실제로 패키지 개발자가 루트 권한이 필요한 것 이외의 다른 소프트웨어에 대해 특정 UID 또는 GID를 요구하면 패키지가 손상됩니다. 선택하는 모든 가치에 대해 누군가는 어딘가에서 선택한 UID (또는 GID)를 사용하고 소프트웨어를 수용하기 위해 그것을 변경하지 않을 것입니다. (그리고 나는 그들을 비난하지 않습니다.) –

답변

7

getpwent(3)은 암호 데이터베이스 (일반적으로 /etc/passwd이지만 반드시 그런 것은 아니지만 예 : 시스템이 NIS 도메인에있을 수 있음)를 통해 반복됩니다. 시스템에 알려진 모든 UID가 여기에 표시되어야합니다.

데모 용으로 다음 쉘 조각과 C 코드는 모두 알려진 UID를 시스템에 인쇄해야합니다.

 
$ getent passwd | cut -d: -f3 
#include <pwd.h> 
#include <stdio.h> 
int main() { 
    struct passwd *pw; 
    while ((pw = getpwent())) 
     printf("%d\n", pw->pw_uid); 
} 

UID 0은 항상 루트 및 65534 nobody입니다 종래 UID,하지만 당신은 그 의지, 나 아무것도 안된다. 사용중인 UID는 운영체제, 배포판, 심지어 시스템에 따라 다릅니다. 예를 들어 Gentoo의 많은 시스템 서비스는 설치된 UID를 할당합니다. 사용중인 UID의 중앙 데이터베이스가 없습니다.

또한 /etc/login.defs은 "시스템 UID"가 무엇인지 정의합니다. 내 바탕 화면에서는 UID 100-999가 시스템 계정으로 취급되고 UIDS 1000-60000은 사용자 계정으로 구성되지만 쉽게 변경할 수 있습니다.

서비스를 작성하는 경우 필요에 따라 UID를 할당하도록 패키지 설치를 스크립팅하고 UID/사용자 이름을 사용하도록 소프트웨어를 구성 할 것을 제안합니다.

+1

Bane의 답변에 대한 귀하의 의견을 언급하거나이를 새로운 답변으로 기록 하시겠습니까? 그게 내 질문에 대한 진정한 대답 인 것 같다. 시스템 UID는 유닉스/리눅스 배포판에서 공통적 인 것이 아니기 때문에 문제를 해결할 수 없다. 나는 그것을 대답으로 받아 드리고 싶습니다. –

0

나는 그런 목록이 존재하는지 잘 모르겠다. 해당 UID가 /etc/passwd 파일, /etc/shadow 파일 및 NIS 글로벌 사용자 목록 파일을 통해 사용중인 것을 주목하고 사용중인 것을 알리는 방법은 무엇입니까? 그렇다면 그렇지 않은 것을 사용하십시오!

+1

글쎄, 그건 내 시스템에서 사용하고있는 UID이지만 거기에있을 수있는 모든 UID는 아닙니다. 예를 들어, 바람둥이가 설치되어 있지 않지만 UID 91을 사용합니다. –

0

Linux의 경우 /etc/login.defs으로 구성됩니다. 때로는 데비안 기반 시스템을 설치할 때 Red Hat-y 시스템과의 일관성을 위해 "uid start"옵션 (이름을 잊어 버렸습니다. 지금은 Linux가 아닙니다)을 1000에서 500으로 변경합니다.

man login.defs은 원하는 정보를 모두 제공해야합니다.

4

나는 이것이 오래된 게시물 인 것을 알고있다. 그러나 내가 2017 년에 여기에 있기 때문에 여전히 비슷한 질문에 답하려고 노력하고있다. 나는이 추가 정보가 같은 위치에있는 다른 누군가와 관련이 있다고 생각했다.

"잘 알려진 UID"의 개념은 배포본과 유닉스 변형이 많이 있기 전에 유닉스 초기로 거슬러 올라갑니다. "잘 알려진"UID는 adm, daemon, lp, sync, operator, news, mail 등과 같은 시스템 사용자를위한 것으로 간주되었으며 uid 충돌을 피하기 위해 모든 다양한 시스템에서 표준이었습니다. 이 사용자는 현대 유닉스 계열 운영 체제에 여전히 존재합니다.

조직 전체에서 uid를 표준화하는 것이 이러한 문제를 피하는 열쇠입니다. 위의 설명에서 지적했듯이, 요즘에는 uid가 '어딘가에'사용되기 쉽기 때문에 sysadmin이 목표로 할 수있는 최선의 방법은 uid가 유지 관리하는 모든 시스템에서 표준임을 보장하고, 응용 프로그램에 대한 새로운 uid가 간단 해집니다.

그 결과, 수년 동안 나는 아래에 링크 된 귀중한 게시물을 발견했으며, 슬프게도 주제에 대한 비슷한 게시물이 많지 않으며 찾을 수없는 것이 무엇인지 찾아 냈습니다. 리눅스에서 여러 호스트에서의 UID의 표준화 프로세스를 자동화하는 스크립트를 포함하여 다른 관련 게시물이 있습니다 당신은 'UID'태그에서이 블로그를 검색하는 경우

UNIX/Linux: Analyzing user/group UID/GID conflicts

.

User ID Definition도 중요한 리소스입니다.

간단한 대답은 충돌을 피하기 위해 조직 전체에서 고유하고 표준 인 한 사용하는 uid를 정말로 중요하게 생각하지 않는다는 것입니다.

관련 문제