Perché un utente con privilegi di root non è più in ~?


20

Solo per curiosità, vorrei sapere perché, quando eseguo l'accesso come root, non sono più in / home / user . Qual è la ragione e cosa fa esattamente la directory / root ?

Non sono un utente avanzato. Rispondi con parole semplici o fornisci un link che fornisca spiegazioni chiare e semplici. Uso Ubuntu 16.04 e accedo come root da sudo -i. Come spiegato qui , sudo -iha / root come home. Voglio sapere qual è il motivo; c'è qualche vantaggio essere lì? E non in ~ come l'utente di sudo -s.


11
root è anche un utente, quindi ha la sua homedirectory personale , ma questa è chiamataroot
damadam,

3
Puoi usare sudo -sper essere nella stessa directory utente.
Pilota

3
@ Pilot6 mi dispiace che ho aggiunto che contemporaneamente ho visto il tuo commento: D Spero non ti dispiaccia :)
Rinzwind

2
@Unbesiegbarkeit man sudorisponderà alla domanda. Per essere semplice, user -iutilizza le impostazioni dell'utente root, ma sudo -sle impostazioni dell'utente corrente.
Pilota

Risposte:


28

Non si sta registrando come root eseguendo un sudocomando. Stai avviando una shell con i privilegi di root.

Se si desidera rimanere nella home directory dell'utente corrente, è possibile utilizzare sudo -sinvece del sudo -icomando.

cd ~ti porterà nella stessa directory come se non fossi in una shell con i privilegi di root. Letteralmente /home/$USER.

Quando si utilizza sudo -i, il sistema si comporta come se si fosse effettuato l'accesso come rootutente. A causa di ciò

cd ~ 

ti porta alla home directory dell'utente root che è /root.

/rootdirectory è una home directory per l' rootutente.

La differenza principale è che i file delle impostazioni della shell come .bashrcsono usati da /rootin caso di sudo -ie da un utente normale in caso di sudo -s.


3
Quali sono i vantaggi di avere / root come casa?
Codito ergo sum,

2
File come .bashrcsono usati da lì in una shell specifica. Nella maggior parte dei casi non c'è molta differenza.
Pilota

11
@Unbesiegbarkeit / home potrebbe non essere montato in determinate circostanze, ad es. Modalità utente singolo, nessun accesso alla rete, ecc. E root deve comunque essere in grado di accedere in tali circostanze.
doneal24,

2
@ DougO'Neal Se /homenon è disponibile, il problema non esiste. Quindi accedi davvero come root.
Pilota

4
@ Pilot6: ci sono differenze o dovrebbero esserlo. Ad esempio, sui miei computer, ho impostato il file. * Shrc di root per rendere visivamente evidente che sto eseguendo come root, ad esempio un prompt in un formato diverso e colorato in rosso. Inoltre, gli alias sono impostati per non fare determinate cose che potrebbero essere dannose se eseguite come root, ecc.
jamesqf,

29

Il motivo per cui la casa rootdell'utente è /roote non /home/rootè perché di solito /homeè un punto di montaggio su una partizione / volume / disco separata ... (per vari motivi, come spazio su disco o remoto, ...)

Se per qualche motivo il montaggio /homenon dovesse riuscire, potresti comunque connetterti come rooted essere nella tua /roothome directory per investigare e sistemare le cose

Inoltre, per manutenzione, configurazione iniziale, ridimensionamento, ... verrai connesso come roote dovresti essere in grado di smontare / rimontare/home


7
+1, questa dovrebbe essere la risposta accettata. Potresti cambiare la home di root in modo che sia ovunque, ma lasciamo / root per essere su / e non a / home per motivi di recupero.
ntg

16

Qual è la ragione e cosa fa esattamente la directory / root?

root ha / root come home e quando passi a root ti farà finire nella sua home. Questa è la natura di sudo -i. sudo -sfa lo stesso ma non cambia directory. Manuale per sudo :

-s [command]

L'opzione -s (shell) esegue la shell specificata dalla variabile d'ambiente SHELL se è impostata o la shell come specificato nel database delle password. Se viene specificato un comando, viene passato alla shell per l'esecuzione tramite l'opzione -c della shell. Se non viene specificato alcun comando, viene eseguita una shell interattiva.

-i [command]

L'opzione -i (simula il login iniziale) esegue la shell specificata dalla voce del database delle password dell'utente di destinazione come shell di login . Ciò significa che i file di risorse specifici per l'accesso come .profile o .login verranno letti dalla shell. Se viene specificato un comando, viene passato alla shell per l'esecuzione tramite l'opzione -c della shell. Se non viene specificato alcun comando, viene eseguita una shell interattiva. sudo tenta di passare alla home directory dell'utente prima di eseguire la shell. La politica di sicurezza deve inizializzare l'ambiente su un set minimo di variabili, simile a quello presente quando un utente accede. La sezione Ambiente di comando nel manuale sudoers (5) documenta come l'opzione -i influenza l'ambiente in cui un comando è eseguito quando la politica sudoers è in uso.

L'utente root deve far parte del sistema. Quando metti / home su una diversa partizione e root fa parte di / home, potresti avere seri problemi se la partizione non montasse. Per lo stesso motivo abbiamo anche

/bin
/sbin 

e

/usr/bin
/usr/sbin

Quando metti / usr su una partizione e / usr non monta hai ancora un sistema funzionante.


2
Come risponde alla domanda? È un commento?
Pilota

2
Il sudo -i non faceva parte della domanda quando ho risposto ;-)
Rinzwind

2
Abbiamo domande e risposte su sudo -ivs sudo -s?
Pilota

2
Potremmo. Avrò una ricerca. modifica Non ne ho trovato uno, ma ricordo di
averne

2
Sembra che ne abbia visto uno qui, ma non sono riuscito a trovarlo.
Pilota

15

Il filesystem Linux è strutturato in un modo specifico. I file binari essenziali sono presenti /bin/, i file del caricatore di avvio sono presenti /boot/, la maggior parte dei file di dispositivo sono presenti /dev/, i punti di montaggio per i supporti rimovibili sono /media/inclusi, ecc ...

Vedi https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard .

Alcuni dettagli minori possono differire da distro a distro (ad es. /usr/bin/Vs. /usr/local/bin/), ma in generale quasi tutte le distro Linux seguono la stessa struttura di directory.

Per rispondere alla tua domanda:

Sono presenti le home directory degli utenti /home/. In linea di principio, Linux è un sistema operativo multiutente. Potresti avere solo un account utente sul tuo laptop con la sua directory home in /home/<username>/, ma se guardi /home/su un server Linux condiviso, vedrai molte home directory: una per ogni account utente. L'idea è che ogni utente del sistema abbia i permessi di scrittura solo nella propria directory home. Se il tuo nome utente è bob, puoi leggere, scrivere ed eliminare i file /home/bob/ma non puoi toccare nulla dentro /home/alice/o dentro /var/log/.

rootè diverso però. rootè l'utente amministrativo e dispone dei privilegi di scrittura ovunque sul sistema (e può agire come qualsiasi utente del sistema). Quindi ha senso che rootabbia la home directory speciale /root/perché rootnon è un utente normale. A parte questo, /root/è solo una normale directory senza magia speciale, anche se è abbastanza probabile (anche probabile) che le utilità di sistema facciano affidamento /root/sull'essere la casa dell'utente root.

Quando si esegue sudo -iin un terminale, si passa dall'essere l'utente normale boball'essere root. Nota che questa opzione ha effetto solo sulla finestra del terminale in cui hai digitato sudo -i. Per il tuo file manager sei ancora bobe se apri un'altra finestra del terminale sei ancora boblì. In questo contesto il simbolo ~è una scorciatoia per la home directory dell'utente corrente. Per bob ~mezzo /home/bob/ma per root ~mezzo /root/.

Spero che chiarisca le cose per te.


3
Questa è una risposta perfetta!
Pilota

5
Vale probabilmente la pena notare che la home directory di Root era originariamente /. La posizione standard è stata modificata per motivi di sicurezza (tutti devono essere in grado di elencare i file /, in modo che chiunque potesse vedere quali dotfile aveva l'utente root.
Austin Hemmelgarn,

14

Vedo che tutti stanno rispondendo a ciò che accade quando si accede come root (si ottiene una directory ~ che non è in / home) ma nessuno sta dicendo perché. Ecco perché:

Se l'intera struttura / home diventa inutilizzabile e devi correggerla, o se devi riallocare / home perché sta esaurendo lo spazio, devi farlo in qualche modo. Non è possibile accedere come qualsiasi utente che ha ~ in / home, perché si bloccherebbe non appena si tenta di fare qualcosa. Quindi l'utente root ha hir ~ altrove.


3
Provalo e, a seconda delle impostazioni di sicurezza e di distribuzione come utente normale, non effettuerai l'accesso o finirai con / come cwd e $ HOME semplicemente inaccessibili. Il punto è che root vorrà probabilmente avere accesso alla sua home directory quando altri no, ad esempio a causa di file con esigenze speciali lì. Simile sulla maggior parte dei CSS hai spazio riservato per root, e gli account di sistema hanno dir home fuori / home
PlasmaHH

2
Le risposte di alexf e arp, postate più tardi, dicono sostanzialmente la stessa cosa. Nessuno legge i post esistenti prima di aggiungere la propria risposta?
Jennifer,

@ Dan - Ho ripristinato le tue modifiche. Vale a dire:
Jennifer,

(1) Suppongo che sia un miglioramento mettere / home e ~ nelle caselle di spunta, ma non è così importante farlo, perché tutti sanno cosa intendo comunque. Sapevi cosa intendevo dire. (2) "andresti in crash non appena provi" è incoerente nel tempo. "faresti" è "faresti" e "farebbe" è passato, quindi deve andare con "provato" che è passato anziché "provare" che è presente. (3) "hir" è un nuovo pronome inventato da Kate Bornstein; copre "lui" e "lei" ed è utile quando non si conosce il genere. ("Ze" copre "lui" e "lei".)
Jennifer,

@Jennifer Nessun problema. Si impara qualcosa di nuovo ogni giorno. Pensavo hirfosse un errore di battitura. Grazie per tutte le informazioni! Consiglio vivamente di mantenere dura la formattazione del codice, ma dipende da te.
Dan,

8

Dici di non essere un utente avanzato, quindi proverò a scrivere una risposta dettagliata.

Quando usi Linux, devi ricordare alcune cose importanti:

  • Linux è un sistema multiutente. È stato concepito così fin dall'inizio, seguendo la filosofia Unix (notare il diverso approccio adottato da Windows, che è stato concepito come un sistema a singolo utente)

  • Come sistema multiutente, Linux ha la capacità di separare i file appartenenti a ciascun utente nel sistema. Il modo in cui Linux esegue ciò è assegnando a ogni utente una sottocartella all'interno della /home/directory. Ogni file utente è di sua proprietà e solo lui può aprirli, modificarli o consentire ad altri utenti di usarli. Al contrario, ogni file nel filesystem appartiene a un utente e quell'utente ha il potere su chi può vedere o usare quel file. Come menzionato in un'altra risposta, in origine gli utenti potevano collocare i propri file ovunque nel sistema, ma a un certo punto divenne evidente che le cose dovevano essere organizzate meglio e /home/("slash-home") divenne il luogo in cui i file dell'utente dovevano essere.

  • Ci sono, tuttavia, file di cui il sistema stesso e / o ogni singolo utente nel sistema ha bisogno: binari, file di dispositivo, file di sistema, eccetera (ricorda: in Linux e in qualsiasi altro sistema simile a unix, tutto è un file) . Questo file necessari a livello globale sono memorizzati in diversi luoghi lungo il filesystem, organizzati in varie cartelle all'interno della root del filesystem : /. Inoltre, questi file necessari a livello globale non appartengono a un particolare utente del sistema, ma al sistema stesso ... ma ciò può creare confusione: chi possiede i binari? Chi concede le autorizzazioni per questi file necessari a livello globale?

  • Poiché ogni file nel sistema "necessita di un proprietario", deve esserci un "utente speciale" in grado di amministrare i file necessari a livello globale. Inoltre, questo "utente speciale" può fare cose che nessun altro utente nel sistema può fare: può creare altri utenti per il sistema. Questo utente è chiamato "superutente" (per noi mortali) o "root" (per il sistema).

  • Ora, questo superutente è un altro utente del sistema, ma ha poteri (e responsabilità) molto superiori a quelli di altri utenti: la manutenzione, ad esempio. Quindi è naturale pensare che "root" abbia bisogno di un posto dove mettere le sue cose, ma non deve essere confuso con le cose che appartengono agli altri utenti. Quindi, invece di avere una sottocartella di seguito /home/, "root" ha il suo spazio riservato nel filesystem: /root/(chiamato "slash-root"). Ricorda: "root" è un utente molto speciale, quindi ha bisogno di un posto speciale e privilegiato per mettere le sue cose.

  • Ora, Ubuntu non ha un account root abilitato per impostazione predefinita, quindi un utente "normale" deve avere l'autorità su tutto il sistema. È qui che sudoentra in gioco il comando ("switch user and do"): consente a un utente normale (precedentemente incluso nell'elenco "sudoers") di eseguire comandi come se fosse un altro utente, ad esempio "root".

  • Infine, queste -iopzioni significano "simulare il login iniziale". Ciò significa che sudoleggerà i dati del "profilo dell'utente di destinazione" prima di eseguire il comando dato. Se non si fornisce un comando, sudoverrà avviata un'istanza della shell con il profilo (root) dell'utente di destinazione ... e ciò inizia con lo spostamento nella cartella "home" dell'utente "target". Quindi sudo -iti sposterà a fare la cartella principale di root ( /root/).

Spero che questo ti aiuti a capire cosa succede sudo -i.


MODIFICARE

Penso di aver lasciato qualcosa di non chiarito, quindi le aggiungerò qui:

  • Ho detto sopra: "in Linux, tutto è un file". E intendo, letteralmente! I documenti e le immagini sono file, ma anche terminali (quelli a cui è possibile accedere premendo [CTRL] + [ALT] + [Fn]), unità fisiche e la tastiera, ad esempio. Un sistema simile a unix funziona leggendo o scrivendo i dati da / verso i file e indirizzando il flusso di dati verso / dai file appropriati nel sistema, che rappresentano il file con cui stai lavorando e l'inserimento delle chiavi che stai digitando, e l'output che stai vedendo sullo schermo. Alcuni di questi file possono essere utilizzati direttamente dagli utenti, ma altri no; ad esempio, non è possibile leggere o scrivere direttamente su un disco rigido, ma è necessario consentire a Linux di collegare una normale cartella sfogliabile al file del dispositivo (sotto /dev/) che rappresenta il disco rigido.

  • Un filesystem Linux può estendersi su più unità fisiche . Un semplice esempio è quando si collega una chiavetta USB: Linux può montare quell'unità (il montaggio è il processo mediante il quale il sistema collega una cartella standard, dove è possibile vedere i file in una shell o navigatore di file, a un file del dispositivo in /dev/) e puoi lavorare con esso e, quando hai finito, chiedi a Linux di smontare l'unità e quindi rimuoverla dalla porta USB. La cosa importante qui è che questo ciclo "mount - unmount" influenza * lo stesso filesystem "che usi tutti i giorni: non crei un nuovo filesystem ogni volta che aggiungi o rimuovi un'unità fisica, ma aggiungi quell'unità fisica al filesystem ( ancora una volta, confronta questa filosofia con l'approccio di Wndows).

  • Poiché il filesystem può estendersi su più unità fisiche, diventa evidente che diversi file del sistema possono essere scritti in unità fisiche diverse. Un'unità può memorizzare i file binari di sistema ( /bin/) e un'altra può archiviare i file dell'utente ( /home/e i suoi discendenti). In una configurazione a più unità, è comune aver /home/scritto in un'unità fisica diversa rispetto a /root/, quindi, se il sistema si interrompe e gli utenti non riescono ad accedere perché l'unità dove /home/smette di funzionare, root può farlo . (Questo è semplicistico ... molte cose devono essere copiate in ogni unità fisica per consentire a root di accedere se nessun altro utente può, ma questo può darti un'idea generale).

  • E quel carattere tilde ( ~) ... indica la home directory dell'utente corrente . Se hai effettuato l'accesso come "bob", allora cd ~ti porterà a /home/bob/, ma se hai effettuato l'accesso come "root", allora cd ~ti porterà a/root/

tl; dr Quindi ora penso che tutto sia detto:

  • "root" è un utente speciale, con poteri e responsabilità ben al di sopra degli altri utenti

  • "/ root /" è il luogo in cui "root" può archiviare i propri contenuti, senza rischiare che vengano confusi con altri elementi appartenenti agli utenti normali. Questa cartella può essere scritta in un'unità fisica diversa da /home/.

  • sudo -iavvia una shell simulando il login di root e ciò implica il passaggio alla cartella principale di root. Come con qualsiasi altro utente, cd ~ti porterà alla tua home directory, ma, se sei root, lo sarà/root/

  • Se il sistema è installato su diverse unità fisiche, root può accedere e provare a risolvere le cose anche se un'altra unità nel sistema si guasta.


1
Risposta perfetta!
Arch

7

Il motivo principale per cui la home directory di root deve essere trattata diversamente:

Quando le cose vanno male, devi essere in grado di eseguire attività di ripristino del sistema non appena riesci a montare il filesystem /.

A seconda della configurazione dell'utente, le home directory potrebbero trovarsi su un file system diverso o potrebbero persino essere montate sulla rete.

Per accedere come root (ovvero inserire il nome root e la password di root al prompt di login) dalla console è necessario solo un filesystem montato.

(Questo è anche il motivo per cui le utility di base sono in / bin e / sbin invece di / usr / bin o / usr / sbin - tutto in / usr è sacrificabile.)

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.