답변:
실제로 귀하의 질문 에는 두 부분 이 있습니다.
Linux에서 수퍼 유저 계정에 항상 uid / gid 0/0이 있습니까?
예. 주석 에서 Rich Homolka 가 지적한 것처럼 루트 사용자를 확인해야 할 때 명시 적으로 uid 0을 확인하는 코드가 커널에 있습니다. 즉, 루트는 항상 최소한 uid 0을 갖습니다 .
uid가 0 인 사용자 계정의 이름은 항상
root
입니까?
아니요 root
. / etc / passwd 또는 다른 인증 저장소에 나열된 이름 일뿐입니다. 계정을 호출하는 것만으로도 admin
OS 자체는 신경 쓰지 않지만 일부 응용 프로그램은라는 권한있는 계정이 존재할 것으로 기대하기 때문에 좋아하지 않을 수 있습니다 root
. * nix에서 uid 0 계정을 호출하는 root
것은 매우 강력한 규칙이지만 시스템에는 필요하지 않습니다 (시스템 관리 유틸리티를 포함하여 특정 사용자 소프트웨어에 필요할 수도 있음).
그것은 가리키는 밖으로로서, 또한을 언급하는 것은 가치가 사이먼 리히터 , BSD의에 종종 존재 두 번째 라는 이름의 규칙에 따라, 0 계정을 uid를 toor
( "루트"철자를 거꾸로, 또한 어휘 적으로 제공 한 후 root
목록이 알파벳 순으로 정렬에서). 예를 들어, FreeBSD는 루트 사용자에게 사용자 정의 쉘 설정을 제공하여 루트 사용자에게 시스템의 루트 파티션에 존재하도록 보장 된 기본 쉘 (복구 목적에 유용함)을 남겨 둡니다 .
root
와 toor
UID 0으로 모두
root
있으므로 인증 저장소 라이브러리가 동일한 UID를 가진 두 사용자에게 혼동되지 않는 한 아무런 문제가 없습니다 (이 경우 BSD는 그렇게하지 않습니다) 또는 라이브러리가 수정됩니다).
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이 항상 루트 일 필요는 없습니다.
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