루트 계정에 항상 UID / GID 0이 있습니까?


50

내가 관리 한 모든 Linux 시스템에서 루트 계정의 GID 및 UID는 0입니다. 이것이 보장됩니까, 아니면 시스템이 루트에 다른 ID를 부여 할 수 있습니까?


3
ID 0은 모든 권리를가집니다. 실제 이름 (또는 이름 -multiple-)은 다를 수 있습니다. 예를 들어 내 서버에는 두 명의 uid 0 사용자가 있습니다. 하나는 'root', 하나는 'toor'입니다.
Hennes

답변:


80

실제로 귀하의 질문 에는 두 부분 이 있습니다.

Linux에서 수퍼 유저 계정에 항상 uid / gid 0/0이 있습니까?

예. 주석 에서 Rich Homolka 가 지적한 것처럼 루트 사용자를 확인해야 할 때 명시 적으로 uid 0을 확인하는 코드가 커널에 있습니다. 즉, 루트는 항상 최소한 uid 0을 갖습니다 .

uid가 0 인 사용자 계정의 이름은 항상 root입니까?

아니요 root . / etc / passwd 또는 다른 인증 저장소에 나열된 이름 일뿐입니다. 계정을 호출하는 것만으로도 adminOS 자체는 신경 쓰지 않지만 일부 응용 프로그램은라는 권한있는 계정이 존재할 것으로 기대하기 때문에 좋아하지 않을 수 있습니다 root. * nix에서 uid 0 계정을 호출하는 root것은 매우 강력한 규칙이지만 시스템에는 필요하지 않습니다 (시스템 관리 유틸리티를 포함하여 특정 사용자 소프트웨어에 필요할 수도 있음).

그것은 가리키는 밖으로로서, 또한을 언급하는 것은 가치가 사이먼 리히터 , BSD의에 종종 존재 두 번째 라는 이름의 규칙에 따라, 0 계정을 uid를 toor( "루트"철자를 거꾸로, 또한 어휘 적으로 제공 한 후 root 목록이 알파벳 순으로 정렬에서). 예를 들어, FreeBSD는 루트 사용자에게 사용자 정의 쉘 설정을 제공하여 루트 사용자에게 시스템의 루트 파티션에 존재하도록 보장 된 기본 쉘 (복구 목적에 유용함)을 남겨 둡니다 .


15
커널에 루트, uid == 0을 확인하는 코드가 있습니다. 예, 하드 코딩되어 있으며 영구적입니다.
Rich Homolka

1
BSD는 일반적으로 가지고 roottoorUID 0으로 모두
사이먼 리히터

@SimonRichter이 경우 name을 가진 수퍼 유저 계정이 root있으므로 인증 저장소 라이브러리가 동일한 UID를 가진 두 사용자에게 혼동되지 않는 한 아무런 문제가 없습니다 (이 경우 BSD는 그렇게하지 않습니다) 또는 라이브러리가 수정됩니다).
CVn

커널에 루트를 나타내는 UID = 0을 사용하고 "root_uid"라는 변수에 저장하는 코드가 있지만 실제로 "root" 라는 사용자에 의존하는 (6 년 후) 아무것도 찾지 못했습니다 . UID가 / etc / passwd에 있는지 여부에 관계없이 궁극적으로 UID = 0으로 프로세스가 시작됩니다. :)
dannysauer

15

1) 관리자는 항상 uid == 0입니다. 이것은 커널에서 코딩됩니다. 이것을 변경하려면 커널에서 약간의 코딩이 필요합니다. 이것에 대해별로 언급하지 않았으므로 완료되지 않았습니다. 예를 들어, 동일한 NFS를 공유하는 다른 유닉스에서는 일관성이 없습니다.

2) uid 0이 반드시 루트에 매핑 될 필요는 없습니다. 가장 좋은 예는 FreeBSD입니다. 두 개의 uid == 0 계정이 있으며 차이점은 쉘입니다. root는 간단한 쉘인 shell / bin / sh를 가지고 있으며 디스크가 불량하고 fsck / usr이 필요할 때 유용합니다. toor는 tcsh를 사용합니다. 비 상황이 아닌 상황에서 훨씬 유용합니다. 역사와 같은 것들이 있기 때문입니다.

또 다른 개인적인 예. NIS에 대한 루트 equiv (예 : uid = 0) 계정이있는 작업이 하나있었습니다. 비밀번호는 공란입니다! 새 sysadmin이 컴퓨터의 루트 암호를 기억하지 못했기 때문입니다. 나는 명백한 이유 때문에 이것에 대해 소리 쳤다 (정의상 NIS 암호는 공백을 숨길 수 없다). 이 계정이 마음에 들지 않았습니다.

그리고 실제로 uid 0을 루트로 제공하는 시스템은 아닙니다. passwd 파일이나 다른 이름 지정 디렉토리 (NIS, ldap)를 사용하여이 파일을 변경했지만 컴파일되지 않았습니다. / etc / passwd에 하나 이상의 uid 0 계정이 있어야하지만 실제로 필요할 때 네트워킹이 없을 수 있기 때문에 .

따라서 root는 항상 uid 0이지만 uid 0이 항상 루트 일 필요는 없습니다.


1
Oof, 단 하나의 대답 만 고르는 고통 ...
Tanaki

5
@Tanaki 일반적으로 질문에 가장 많이 도움이되는 답변을 "수락"하고 유용하다고 생각되는 모든 답변을 찬성하십시오. 가장 투표가 많거나 처음 작성된 답변을 받아 들여야한다는 말은 없습니다.
CVn

1

nonStop 서버를 사용하는 시스템의 경우 ROOT_UID는 0이 아니라 65535입니다.

OSS 사용자 및 그룹 OSS 환경은 사이트 관리자가 명시 적으로 작성하지 않는 한 일반적인 UNIX 기본 사용자 이름 및 사용자 ID를 제공하지 않습니다. 그러나 동등한 OSS 사용자 이름과 사용자 ID가 존재합니다. 예를 들어, UNIX 사용자 이름 root 및 사용자 ID 0과 연관된 특권은 사용자 SUPER.SUPER 및 해당 별명 인 65535 (수퍼 ID)의 OSS 사용자 ID (UID)에 대해 존재합니다.

참조 https://h20195.www2.hpe.com/V2/GetPDF.aspx/4AA4-6316ENW.pdf를

coreutils에서 root-uid.h 헤더 파일을 찾을 수 있습니다.

/* The user ID that always has appropriate privileges in the POSIX sense.

   Copyright 2012-2016 Free Software Foundation, Inc.

   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.

   Written by Paul Eggert.  */

#ifndef ROOT_UID_H_
#define ROOT_UID_H_

/* The user ID that always has appropriate privileges in the POSIX sense.  */
#ifdef __TANDEM
# define ROOT_UID 65535
#else
# define ROOT_UID 0
#endif

#endif
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.