Riepilogo: "root" è il nome effettivo dell'account amministratore. "sudo" è un comando che consente agli utenti ordinari di eseguire attività amministrative. "Sudo" non è un utente.
Risposta lunga:
"root" (aka "superutente") è il nome dell'account dell'amministratore di sistema. Le origini del nome sono un po 'arcaiche, ma non importa.
L'utente root ha l'id utente 0 e nominalmente ha privilegi illimitati. Il root può accedere a qualsiasi file, eseguire qualsiasi programma, eseguire qualsiasi chiamata di sistema e modificare qualsiasi impostazione. (Ma vedi sotto¹).
Prima dell'invenzione del comando "sudo", se si desidera eseguire attività amministrative, è necessario accedere come root, ottenendo in qualche modo un prompt di accesso² oppure con il su
comando ("su" è l'abbreviazione di un utente sostitutivo.) ³
È un po 'una seccatura e non ti consente di conferire agli utenti poteri amministrativi parziali. Quindi è stato inventato il comando "sudo" (abbreviazione di "utente sostitutivo do").
Il comando "sudo" ti consente di eseguire comandi con privilegi di superutente purché il tuo ID utente sia nel file sudoers, dandoti l'autorizzazione necessaria.
Quindi, ad esempio, sudo vi /etc/hosts
ti permetterebbe di modificare il file hosts come se fossi in esecuzione come root. Non hai nemmeno bisogno della password di root, ma solo della tua password di accesso.
E, naturalmente, sudo su
ti permetterebbe semplicemente di diventare root. Il risultato è lo stesso di se si fosse effettuato l'accesso come root o se fosse stato eseguito il su
comando, tranne per il fatto che non è necessario conoscere la password di root ma è necessario trovarsi nel file sudoers.
Il file sudoers determina chi può usare il comando sudo e cosa può farci.
Il file sudoers è ciò che ti dà più amministratori⁴. In effetti, i tuoi amministratori sono root, oltre a tutti quelli elencati nel file sudoers. Senza il file sudoers, l'unico amministratore è root.
Infatti, nelle organizzazioni in cui qualcun altro gestisce il tuo computer per te, è abbastanza comune non conoscere la password di root del tuo computer - fintanto che sei nel file sudoers, non importa.
In un'azienda per cui ho lavorato, con una server farm enorme, solo un numero molto piccolo di persone conosceva le password di root. Invece, c'era un database di chi era autorizzato a lavorare su quali server. Un processo automatizzato ti aggiungerebbe ai file sudoers di quei server a cui eri autorizzato ad accedere e ti rimuoverà alla scadenza dell'autorizzazione.
¹ Ancora una cosa: le moderne versioni Unix ora possono limitare anche ciò che l'utente root può fare.
Sotto SELinux (Security Enhanced Linux), esiste effettivamente un elenco di controllo degli accessi che determina quale programma può fare cosa, e anche il root non può superare quelle restrizioni.
Con il sistema SIP ( System Integrity Protection ) di Apple (aka "rootless"), alcuni file e directory sono bloccati in modo che solo le applicazioni nella whitelist appropriata possano accedervi.
Questi sistemi esistono per proteggere un sistema dal caso in cui un utente malintenzionato riesca a ottenere l'accesso come root. (O in alcuni casi, per impedire agli utenti di eseguire il jailbreak dei loro dispositivi incorporati.) Per ovvie ragioni, è estremamente difficile aggirare queste restrizioni, anche con l'accesso root.
² Il prompt "login:" è un altro pezzo arcaico della storia di Unix, che risale a quando usavamo tutti i terminali ASCII su linee seriali, anziché i sistemi di finestre. È ancora possibile ottenere un prompt "login:" digitando semplicemente login
in qualsiasi finestra del terminale o aprendo una connessione ssh (o telnet o rsh) al computer da qualsiasi altra parte. Se lo desideri, puoi accedere come un altro utente da lì. (E se il tuo computer ha porte seriali, puoi comunque configurarlo per consentire l'accesso su di esse.)
³ È anche possibile ottenere l'accesso come root ai singoli programmi. Questi programmi possono fare tutto ciò che un utente con accesso root può fare, anche se eseguito da un normale utente. Questi sono in genere limitati a compiti specifici. Ad esempio, il programma crontab ha i privilegi di root in modo che possa modificare le tabelle cron. Ovviamente, "sudo" ha i privilegi di root in modo che possa fare quello che fa.
⁴ Tratterò un altro punto che ho precedentemente trattato. Ho usato "amministratore" e "radice" in modo intercambiabile, ma ci sono altri tipi di amministratori. Questi sono spesso chiamati "account di ruolo", vale a dire che questi account non appartengono a esseri umani reali, ma esistono invece per svolgere un ruolo specifico sul sistema. Se dai un'occhiata al /etc/passwd
file sul tuo sistema, troverai dozzine e dozzine di tali account.
Ad esempio, se mysql fosse installato sul tuo sistema, ci sarebbe un utente "mysql" e tutti i file di database, i file di configurazione e così via sarebbero tutti di proprietà di quell'utente. Solo quell'utente avrebbe le autorizzazioni necessarie per accedere ai file ed eseguire il server mysql. In un certo senso, quell'utente sarebbe un account amministratore, ma solo per mysql.
Se fosse necessario eseguire attività amministrative del database, si diventerebbe "mysql" con il su mysql
comando o si userebbe sudo
dove il file sudoers ti darebbe privilegi mysql per quei comandi specifici.