In realtà ci sono due parti alla tua domanda.
L'account del superutente ha sempre uid/gid 0/0 su Linux?
Sì. Come sottolineato da Rich Homolka in un commento, c'è del codice nel kernel che controlla esplicitamente l'uid 0 quando è necessario controllare l'utente root, il che significa che root ha sempre almeno uid 0.
È il nome dell'account utente con uid 0 sempre
root
?
No. root
è solo un nome, elencato in /etc/passwd o in qualche altro archivio di autenticazione. Potresti anche chiamare l'account admin
, e al sistema operativo stesso non interessa, ma ad alcune applicazioni potrebbe non piacere perché si aspettano che esista un account privilegiato chiamato root
. Chiamare l'account uid 0 su un *nix root
è una convenzione fortemente radicata, ma non è richiesta dal sistema (sebbene possa essere richiesta da alcuni software userland, eventualmente incluse le utilità di amministrazione del sistema).
Vale anche la pena notare che, come sottolineato da Simon Richter, sui BSD esiste spesso un secondo uid 0 account, per convenzione denominato toor
(che è "root" scritto al contrario, e anche lessicalmente viene dopo root
in un elenco ordinato alfabeticamente). Ad esempio, FreeBSD lo utilizza per fornire a un utente root un'impostazione di shell personalizzata, lasciando all'utente root una shell predefinita che è garantita per esistere sulla partizione root del sistema (utile per scopi di ripristino).
1) l'amministratore è sempre uid ==0. Questo è codificato nel kernel. Ci vorrebbe del codice nel kernel per cambiarlo. Non ha molto senso in questo, quindi non è fatto. Ad esempio, sarebbe incoerente per altri unix che condividono lo stesso NFS, ad esempio.
2) uid 0 non corrisponde necessariamente a root. Il miglior esempio è FreeBSD. Ha due account uid ==0, la differenza è la shell. root ha la shell /bin/sh, che è una shell semplice, utile quando i tuoi dischi sono difettosi e hai bisogno di fsck /usr. toor usa tcsh, che è molto più utile in situazioni non di emergenza, dato che ha cose come la cronologia, ecc.
Un altro esempio più personale; un lavoro che avevo dove avevano un account root equiv (cioè uid=0) su NIS. La password, vuota! Perché il nuovo amministratore di sistema non riusciva a ricordare la password di root sulle macchine. Ho urlato su questo per ovvi motivi (le password NIS per definizione non possono nascondere il loro vuoto). Non ero contento di questo account.
E in realtà non è il sistema che dà uid 0 è root, sei tu. Puoi cambiarlo usando i file passwd o altre directory di denominazione (NIS, ldap) ma non è compilato. Anche se dovresti avere almeno un account uid 0 in /etc/passwd, poiché potresti non avere una rete quando ne hai davvero bisogno .
Quindi root è sempre uid 0, ma uid 0 non è necessariamente sempre root.
Bene, per i sistemi che utilizzano il server nonStop, ROOT_UID non è 0 ma 65535.
Utenti e gruppi OSS L'ambiente OSS non fornisce nomi utente e ID utente predefiniti UNIX comuni, a meno che non vengano creati in modo esplicito da un amministratore del sito. Tuttavia, esistono nomi utente e ID utente OSS equivalenti. Ad esempio, i privilegi normalmente associati al nome utente UNIX root e all'ID utente 0 esistono per l'ID utente OSS (UID) 65535 (il super ID), che è l'utente SUPER.SUPER e i suoi alias.
Vedere https://h20195.www2.hpe.com/V2/GetPDF.aspx/4AA4-6316ENW.pdf
In coreutils, puoi trovare quel file di intestazione 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