Su tutti i sistemi Linux che ho gestito, l'account di root ha un GID e un UID di 0. Questo è garantito o è possibile che il sistema fornisca a root un ID diverso?
Su tutti i sistemi Linux che ho gestito, l'account di root ha un GID e un UID di 0. Questo è garantito o è possibile che il sistema fornisca a root un ID diverso?
Risposte:
Ci sono in realtà due parti alla tua domanda.
L'account 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 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 il sistema operativo stesso non ti importerà, ma alcune applicazioni potrebbero non apprezzarlo perché si aspettano che esista un account privilegiato chiamato root
. La chiamata dell'account uid 0 su un * nix root
è una convenzione molto diffusa, ma non è richiesta dal sistema (sebbene possa essere richiesta da alcuni software per utenti, incluso eventualmente i programmi di utilità di amministrazione del sistema).
È anche interessante notare che, come fuori punte da Simon Richter , il BSD esiste spesso una seconda uid 0 conto, per convenzione chiamato toor
(che è "radice" scritto al contrario, e viene fornito lessicalmente dopo root
in una lista ordinata alfabeticamente). Ad esempio, FreeBSD lo usa per fornire a un utente root un'impostazione shell personalizzata, lasciando all'utente root una shell predefinita garantita sulla partizione root del sistema (utile ai fini del recupero).
root
e toor
, entrambi con UID 0.
root
, quindi nessun problema lì a condizione che le librerie del negozio di autenticazione non vengano confuse ai due utenti con lo stesso UID (nel qual caso i BSD non lo farebbero modo, o le librerie verrebbero riparate).
1) l'amministratore è sempre uid == 0. Questo è codificato nel kernel. Ci vorrebbe un po 'di codice nel kernel per cambiare questo. Non ha molto senso questo, quindi non è fatto. Ad esempio, sarebbe incoerente per altri unix che condividono, ad esempio, lo stesso NFS.
2) uid 0 non si associa necessariamente a root. Il miglior esempio è FreeBSD. Ha due account uid == 0, la differenza è la shell. root ha shell / bin / sh, che è una shell semplice, utile quando i tuoi dischi sono danneggiati e hai bisogno di fsck / usr. toor usa tcsh, che è molto più utile in situazioni non di emergenza, dal momento che ha cose come la storia, ecc.
Un altro esempio più personale; un lavoro che ho svolto in cui avevano un account radice equiv (ovvero uid = 0) su NIS. La password, vuota! Perché il nuovo amministratore di sistema non è riuscito a ricordare la password di root sui computer. Ho urlato per ovvie ragioni (le password NIS per definizione non possono nascondere il loro vuoto). Non ero contento di questo account.
E davvero non è il sistema che dà uid 0 è root, sei tu. Puoi cambiare questo 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, dato che potresti non avere reti 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 esplicitamente creati da un amministratore del sito. Tuttavia, esistono nomi utente e ID utente OSS equivalenti. Ad esempio, i privilegi normalmente associati alla radice del nome utente UNIX e all'ID utente 0 esistono per l'ID utente OSS (UID) di 65535 (l'ID super), che è l'utente SUPER.SUPER e i suoi alias.
Vedi 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