L'account root ha sempre UID / GID 0?


50

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?


3
L'ID 0 ha tutti i diritti. Il nome effettivo (o i nomi -multiple-) possono differire. Ad esempio il mio server ha due utenti uid 0. Uno chiamato 'root', uno chiamato 'toor'.
Hennes,

Risposte:


80

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


15
C'è del codice nel kernel per verificare la radice, uid == 0. Sì, è hard coded e permanente.
Rich Homolka,

1
Normalmente BSD ha roote toor, entrambi con UID 0.
Simon Richter il

@SimonRichter Nel qual caso esiste un account superutente con il nome 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).
un CVn il

C'è del codice nel kernel che usa UID = 0 come rappresentante di root, e lo memorizza in variabili denominate "root_uid", ma non ho trovato nulla (6 anni dopo) che in realtà dipende dall'utente chiamato "root". Sia che l'UID sia in / etc / passwd o meno, tuttavia, alla fine ci saranno processi avviati con UID = 0. :)
dannysauer,

15

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.


1
Oof, il dolore di scegliere una sola risposta accettata ...
Tanaki,

5
@Tanaki In generale, "accetta" la risposta che ti ha aiutato di più a rispondere alla tua domanda e vota tutte le risposte che hai trovato utili. Non c'è niente che dice che devi accettare la risposta più votata o la prima scritta.
un CVn il

1

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.