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 admine 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).
roote 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