Warum ist ein Benutzer mit Root-Rechten nicht mehr in ~?

20

Aus Neugier möchte ich wissen, warum ich, wenn ich mich als root anmelde, nicht mehr in / home / user bin . Was ist der Grund und was genau macht das / root- Verzeichnis?

Ich bin kein fortgeschrittener Benutzer. Bitte antworten Sie mit einfachen Worten oder geben Sie einen Link mit klaren, einfachen Erklärungen an. Ich benutze Ubuntu 16.04 und melde mich als root von an sudo -i. Wie es hier erklärt wird , sudo -ihat / root als Zuhause. Ich möchte wissen, was der Grund ist. Gibt es einen Vorteil, dort zu sein? Und nicht in ~ wie der Benutzer von sudo -s.

Codito ergo Summe
quelle
11
root ist auch ein Benutzer, also hat er sein persönliches homeVerzeichnis, aber dieses heißtroot
damadam
3
Sie können verwenden sudo -s, um sich im selben Benutzerverzeichnis zu befinden.
Pilot6
3
@ Pilot6 sorry, ich habe das zur gleichen Zeit hinzugefügt, als ich deinen Kommentar gesehen habe: D Hoffe, es macht dir nichts aus :)
Rinzwind
2
@Unbesiegbarkeit man sudobeantwortet die Frage. Um einfach zu sein, user -iverwenden Sie die Root-Benutzereinstellungen, aber sudo -sdie aktuellen Benutzereinstellungen.
Pilot6

Antworten:

28

Sie melden sich nicht als root an, indem Sie einen sudoBefehl ausführen. Sie starten eine Shell mit Root-Rechten.

Wenn Sie im Ausgangsverzeichnis des aktuellen Benutzers bleiben möchten, können Sie sudo -sanstelle des sudo -iBefehls verwenden.

cd ~Sie gelangen in dasselbe Verzeichnis, als befänden Sie sich nicht in einer Shell mit Root-Rechten. Wörtlich /home/$USER.

Wenn Sie verwenden sudo -i, verhält sich das System so, als wären Sie als rootBenutzer angemeldet . Aus diesem Grund

cd ~ 

bringt Sie zum Stammverzeichnis des Benutzers /root.

/rootVerzeichnis ist ein Ausgangsverzeichnis für den rootBenutzer.

Der wesentliche Unterschied besteht darin , dass Shell - Einstellungen Dateien wie .bashrcaus verwendet werden , /rootbei sudo -i, und von einem normalen Benutzer bei sudo -s.

Pilot6
quelle
3
Welche Vorteile hat / root als Zuhause?
Codito ergo sum
2
Dateien wie .bashrcwerden von dort in einer bestimmten Shell verwendet. In den meisten Fällen gibt es keinen großen Unterschied.
Pilot6
11
@Unbesiegbarkeit / home kann unter bestimmten Umständen nicht gemountet werden, z. B. im Einzelbenutzermodus, ohne Netzwerkzugriff usw., und root muss sich unter diesen Umständen noch anmelden können.
doneal24
2
@ DougO'Neal Wenn /homenicht verfügbar, besteht das Problem nicht. Dann loggen Sie sich wirklich als root ein.
Pilot6
4
@Pilot6: Es gibt Unterschiede, oder sollte es sein. Beispielsweise habe ich auf meinen Computern die. * Shrc-Datei von root eingerichtet, um visuell zu verdeutlichen, dass ich als root ausgeführt werde - z. B. Eingabeaufforderung in einem anderen Format und in roter Farbe. Aliase sind auch so eingerichtet, dass sie bestimmte Dinge nicht tun, die schädlich sein könnten, wenn sie als root ausgeführt werden, & c.
Jamesqf
29

Der Grund, warum das Haus des rootBenutzers ist/root und nicht, /home/rootliegt darin, dass es sich in der Regel /homeum einen Einhängepunkt für eine separate Partition / ein separates Volume / eine separate Festplatte handelt (aus verschiedenen Gründen, z. B. Speicherplatz oder Remote).

Wenn das Mounten aus irgendeinem Grund /homefehlschlagen sollte, können Sie trotzdem eine Verbindung herstellenroot und sich in Ihrem Ausgangsverzeichnis /rootbefinden, um Nachforschungen anzustellen und Fehler zu beheben

Darüber hinaus sind Sie für die Wartung, die Ersteinrichtung, die Größenänderung rootusw. so verbunden, wie Sie es möchten und können sollten/home

alexf
quelle
7
+1, Dies sollte die akzeptierte Antwort sein. Sie können das Stammverzeichnis so ändern, dass es sich überall befindet, aber wir lassen / root aus Wiederherstellungsgründen auf / und nicht auf / home.
ntg
16

Was ist der Grund und was genau macht das / root-Verzeichnis?

root hat / root als sein Zuhause und wenn Sie zu root wechseln, werden Sie in seinem Zuhause landen. Das ist die Natur von sudo -i. sudo -smacht das selbe aber wechselt nicht die verzeichnisse. Handbuch für sudo :

-s [command]

Mit der Option -s (Shell) wird die Shell ausgeführt, die von der Umgebungsvariablen SHELL angegeben wird, wenn sie festgelegt ist, oder die Shell, die in der Kennwortdatenbank angegeben ist. Wenn ein Befehl angegeben ist, wird er über die Option -c der Shell zur Ausführung an die Shell übergeben. Wird kein Befehl angegeben, wird eine interaktive Shell ausgeführt.

-i [command]

Mit der Option -i (Erstanmeldung simulieren) wird die durch den Kennwortdatenbankeintrag des Zielbenutzers angegebene Shell als Anmeldeshell ausgeführt . Dies bedeutet, dass anmeldungsspezifische Ressourcendateien wie .profile oder .login von der Shell gelesen werden. Wenn ein Befehl angegeben wird, wird er über die Option -c der Shell zur Ausführung an die Shell übergeben. Wird kein Befehl angegeben, wird eine interaktive Shell ausgeführt. sudo versucht, in das Ausgangsverzeichnis dieses Benutzers zu wechseln, bevor die Shell ausgeführt wird. Die Sicherheitsrichtlinie initialisiert die Umgebung mit einem minimalen Satz von Variablen, ähnlich wie bei der Anmeldung eines Benutzers. Der Abschnitt Befehlsumgebung im sudoers (5) -Handbuch dokumentiert, wie sich die Option -i auf die Umgebung auswirkt, in der sich ein Befehl befindet wird ausgeführt, wenn die sudoers-Richtlinie verwendet wird.

Der Root-Benutzer muss Teil des Systems sein. Wenn Sie / home auf eine andere Partition setzen und root ein Teil von / home ist, treten ernsthafte Probleme auf, wenn die Partition nicht bereitgestellt wird. Aus dem gleichen Grund haben wir auch

/bin
/sbin 

und

/usr/bin
/usr/sbin

Wenn Sie / usr auf eine Partition setzen und / usr nicht mounten, haben Sie immer noch ein funktionierendes System.

Rinzwind
quelle
2
Wie beantwortet dies die Frage? Ist es ein Kommentar?
Pilot6
2
Das Sudo -i war nicht Teil der Frage, als ich antwortete ;-)
Rinzwind
2
Haben wir eine Frage & Antwort zu sudo -ivs sudo -s?
Pilot6
2
Hmm wir könnten. Ich werde eine Suche haben. Bearbeiten Ich fand nicht ein , aber ich erinnerte man sehen , aber das war auf unserer dutch Ubuntu - Forum: D
Rinzwind
2
Es scheint, dass ich hier einen gesehen habe, aber auch keinen gefunden habe.
Pilot6
15

Das Linux-Dateisystem ist spezifisch strukturiert. Wichtige Binärdateien sind in/bin/ , Bootloader-Dateien befinden sich in /boot/, die meisten Gerätedateien befinden sich in /dev/, Bereitstellungspunkte für Wechselmedien befinden sich in/media/ usw.

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

Einige kleinere Details können von Distribution zu Distribution unterschiedlich sein (z /usr/bin/ vs./usr/local/bin/ ), aber im Allgemeinen folgen fast alle Linux-Distributionen der gleichen Verzeichnisstruktur.

Zur Beantwortung Ihrer Frage:

Die Home-Verzeichnisse der Benutzer befinden sich in /home/. Grundsätzlich ist Linux ein Mehrbenutzer-Betriebssystem. Auf Ihrem Laptop befindet sich möglicherweise nur ein Benutzerkonto mit dem zugehörigen Basisverzeichnis. /home/<username>/Wenn Sie sich jedoch /home/einen gemeinsam genutzten Linux-Server ansehen , werden viele Basisverzeichnisse angezeigt: eines für jedes Benutzerkonto. Die Idee ist, dass jeder Benutzer des Systems Schreibberechtigungen nur in seinem eigenen Ausgangsverzeichnis hat. Wenn Sie einen Benutzernamen haben bob, können Sie Dateien in lesen und schreiben und löschen, /home/bob/aber Sie können nichts in /home/alice/oder in berühren /var/log/.

rootist allerdings anders. rootist der administrative Benutzer und hat überall auf dem System Schreibrechte (und kann als jeder Benutzer des Systems agieren). Es macht also Sinn, dass rootdas spezielle Homeverzeichnis /root/da rootkeinen regulären Benutzer hat. Davon abgesehen /root/handelt es sich nur um ein reguläres Verzeichnis ohne besondere Magie, obwohl es durchaus möglich (und sogar wahrscheinlich) ist, dass Systemdienstprogramme darauf angewiesen /root/sind, die Heimat des Benutzers zu sein root.

Wenn Sie sudo -iin einem Terminal ausführen , wechseln Sie vom normalen Benutzer bobzum normalen Benutzer root. Beachten Sie, dass dieser Schalter nur das Terminalfenster betrifft, in das Sie eingegeben haben sudo -i. Für Ihren Dateimanager sind Sie immer noch da bobund wenn Sie ein anderes Terminalfenster öffnen, sind Sie immer noch bobda. In diesem Zusammenhang ist das Symbol ~eine Abkürzung für das Basisverzeichnis des aktuellen Benutzers. Für bob ~Mittel /home/bob/aber für root ~Mittel /root/.

Ich hoffe, das klärt die Dinge für Sie.

Maria s
quelle
3
Das ist eine perfekte Antwort!
Pilot6
5
Es ist wahrscheinlich erwähnenswert, dass Roots Ausgangsverzeichnis ursprünglich war /. Der Standardspeicherort wurde aus Sicherheitsgründen geändert (jeder muss in der Lage sein, Dateien /aufzulisten, damit jeder sehen kann, welche Punktedateien der Root-Benutzer hatte.
Austin Hemmelgarn
14

Ich sehe, dass alle antworten, was passiert, wenn Sie sich als root anmelden (Sie erhalten ein ~ -Verzeichnis, das sich nicht in / home befindet), aber niemand sagt warum. Hier ist der Grund:

Wenn die gesamte / home-Struktur unbrauchbar wird und Sie sie reparieren müssen oder wenn Sie / home neu zuordnen müssen, weil der Speicherplatz knapp wird, müssen Sie dies irgendwie tun. Sie können sich nicht als Benutzer mit ~ in / home anmelden, da Sie abstürzen würden, sobald Sie versucht haben, etwas zu tun. Also der root Benutzer hat hir ~ woanders.

Jennifer
quelle
3
Probieren Sie es aus, und je nach Distribution und Sicherheitseinstellungen werden Sie sich als normaler Benutzer nicht anmelden oder mit / as cwd und $ HOME enden, auf das gerade nicht zugegriffen werden kann. Der Punkt ist, dass root höchstwahrscheinlich Zugriff auf sein Home-Verzeichnis haben möchte, wenn andere dies nicht tun, z. B. weil dort Dateien mit besonderen Anforderungen vorhanden sind. Ähnliches gilt für die meisten fss, für die Sie Speicherplatz für root reserviert haben, und für Systemkonten sind Ausgangsverzeichnisse außerhalb / home vorhanden
PlasmaHH
2
Die Antworten von alexf und arp, die später veröffentlicht werden, sagen im Grunde dasselbe. Liest niemand die vorhandenen Beiträge, bevor er seine eigene Antwort hinzufügt?
Jennifer
@ Dan - Ich habe Ihre Änderungen rückgängig gemacht. Zu wissen:
Jennifer
(1) Ich nehme an, es ist eine Verbesserung, / home und ~ in Häkchen zu setzen, aber das ist nicht so wichtig, weil jeder weiß, was ich sowieso meine. Du wusstest was ich meinte. (2) "Sie würden abstürzen, sobald Sie es versuchen" ist inkonsistent. "du würdest" ist "du würdest" und "würdest" ist Vergangenheitsform, also muss es mit "versucht" gehen, was Vergangenheitsform ist, und nicht mit "versuchen", was Gegenwartsform ist. (3) "hir" ist ein neues Pronomen, das von Kate Bornstein erfunden wurde; es deckt "ihn" und "sie" ab und ist nützlich, wenn Sie das Geschlecht nicht kennen. ("Ze" deckt "er" und "sie".)
Jennifer
@ Jennifer Keine Sorge. Sie lernen jeden Tag etwas Neues. Ich dachte, hires wäre ein Tippfehler. Danke für all die Infos! Ich empfehle, die Code-Formatierung hart zu halten, aber das liegt an Ihnen.
Dan
8

Sie sagen, Sie sind kein fortgeschrittener Benutzer, also werde ich versuchen, eine schrittweise Antwort zu schreiben.

Wenn Sie Linux verwenden, müssen Sie sich an einige wichtige Dinge erinnern:

  • Linux ist ein Mehrbenutzersystem. Es wurde von Anfang an nach der Unix-Philosophie so konzipiert (beachten Sie den unterschiedlichen Ansatz von Windows, das als Einbenutzersystem konzipiert wurde).

  • Als Mehrbenutzersystem kann Linux die Dateien der einzelnen Benutzer im System trennen. Dies geschieht unter Linux, indem jedem Benutzer ein Unterordner im /home/Verzeichnis zugewiesen wird . Alle Benutzerdateien gehören ihm / ihr und nur er / sie kann sie öffnen, ändern oder anderen Benutzern erlauben, sie zu verwenden. Umgekehrt gehört jede Datei im Dateisystem einem Benutzer, und dieser Benutzer hat die Macht darüber, wer diese Datei sehen oder verwenden kann. Wie bereits in einer anderen Antwort erwähnt, konnten Benutzer ihre Dateien ursprünglich an einer beliebigen Stelle im System ablegen. Irgendwann wurde jedoch klar, dass die Dinge besser organisiert werden sollten, und /home/("slash-home") wurde der Ort, an dem sich die Dateien des Benutzers befinden sollten.

  • Es gibt jedoch Dateien, die das System selbst und / oder jeder einzelne Benutzer im System benötigt: Binärdateien, Gerätedateien, Systemdateien usw. (Denken Sie daran: In Linux und anderen Unix-ähnlichen Systemen ist alles eine Datei.) . Diese global benötigten Dateien werden in verschiedenen Orten entlang der Dateisystem, organisiert in verschiedenen Ordnern innerhalb der gespeicherten Wurzel des Dateisystems : /. Außerdem gehören diese global benötigten Dateien nicht einem bestimmten Benutzer des Systems, sondern dem System selbst ... aber das kann verwirrend sein: Wem gehören die Binärdateien? Wer erteilt Berechtigungen für diese global benötigten Dateien?

  • Da jede Datei im System "einen Besitzer benötigt", muss es einen "speziellen Benutzer" geben, der die global benötigten Dateien verwalten kann. Darüber hinaus kann dieser "spezielle Benutzer" Dinge tun, die kein anderer Benutzer im System tun kann: Er kann andere Benutzer für das System erstellen. Dieser Benutzer wird "Superuser" (für uns Sterbliche) oder "Root" (für das System) genannt.

  • Jetzt ist dieser Superuser ein anderer Benutzer des Systems, hat jedoch weitaus mehr Befugnisse (und Verantwortlichkeiten) als die anderer Benutzer: zum Beispiel Wartung. So ist es natürlich zu denken, dass "root" einen Platz braucht, um seine Sachen abzulegen, aber es darf nicht mit den Sachen der anderen Benutzer verwechselt werden. Anstatt einen Unterordner darunter zu haben /home/, hat "root" seinen eigenen reservierten Platz im Dateisystem: /root/("slash-root" genannt). Denken Sie daran: "root" ist ein ganz besonderer Benutzer, daher braucht es einen besonderen, privilegierten Ort, um seine Sachen abzulegen.

  • Jetzt ist in Ubuntu standardmäßig kein Root-Konto aktiviert, sodass ein "normaler" Benutzer die Berechtigung über das gesamte System haben muss. Hier setzt der sudoBefehl ("switch user and do") an: Er ermöglicht einem normalen Benutzer (der zuvor in der "sudoers" -Liste enthalten war), Befehle auszuführen, als wäre er ein anderer Benutzer, z. B. "root".

  • Schließlich -ibedeuten diese Optionen "Erstanmeldung simulieren". Dies bedeutet, dass sudodie Daten des "Profils des Zielbenutzers" gelesen werden, bevor der angegebene Befehl ausgeführt wird. Wenn Sie keinen Befehl angeben, sudowird eine Shell-Instanz mit dem (Root-) Profil des Zielbenutzers gestartet ... und dies beginnt mit dem Verschieben in den "Home" -Ordner des "Zielbenutzers". Also sudo -iwerden Sie bewegen, um Stammordner ( /root/) zu tun .

Ich hoffe, das hilft dir zu verstehen, was passiert sudo -i.


BEARBEITEN

Ich glaube, ich habe etwas ungeklärt gelassen, also füge ich es hier hinzu:

  • Ich sagte oben: "In Linux ist alles eine Datei". Und ich meine es wörtlich! Ihre Dokumente und Bilder sind Dateien, aber auch Terminals (auf die Sie mit [STRG] + [ALT] + [Fn] zugreifen können), physische Laufwerke und beispielsweise Ihre Tastatur. Ein Unix-ähnliches System liest oder schreibt Daten aus / in Dateien und leitet den Datenfluss zu / von den entsprechenden Dateien im System, die die Datei darstellen, mit der Sie arbeiten, und die Eingabe von Schlüsseln, die Sie eingeben. und die Ausgabe, die Sie auf dem Bildschirm sehen. Einige dieser Dateien können direkt von Benutzern verwendet werden, andere nicht. Sie können zum Beispiel nicht direkt auf eine Festplatte schreiben oder lesen, aber Sie müssen Linux erlauben, einen normalen, durchsuchbaren Ordner mit der Gerätedatei (unter /dev/) zu verknüpfen, die Ihre Festplatte darstellt.

  • Ein Linux-Dateisystem kann mehrere physische Laufwerke umfassen . Ein einfaches Beispiel ist, wenn Sie ein USB-Stick anschließen: Linux kann dieses Laufwerk mounten (Mounten ist der Vorgang, mit dem das System einen Standardordner, in dem Sie Dateien in einer Shell oder einem Datei-Navigator sehen können, mit einer Gerätedatei in verbindet /dev/) und Sie können damit arbeiten, und wenn Sie fertig sind, fordern Sie Linux auf, das Laufwerk abzumelden und es dann vom USB-Anschluss zu entfernen. Das Wichtigste dabei ist, dass sich dieser Zyklus zum Ein- und Aushängen auf dasselbe Dateisystem auswirkt, das Sie jeden Tag verwenden: Sie erstellen nicht jedes Mal ein neues Dateisystem, wenn Sie ein physisches Laufwerk hinzufügen oder entfernen, sondern Sie fügen dieses physische Laufwerk dem Dateisystem hinzu ( Vergleichen Sie diese Philosophie erneut mit dem Ansatz von Windows.

  • Da sich das Dateisystem über mehrere physische Laufwerke erstrecken kann, wird deutlich, dass verschiedene Dateien des Systems auf verschiedene physische Laufwerke geschrieben werden können. Auf einem Laufwerk können die System-Binärdateien ( /bin/) und auf einem anderen die Dateien des Benutzers ( /home/und seiner Nachkommen) gespeichert werden . In einer Konfiguration mit mehreren Laufwerken wird häufig auf /home/ein anderes physisches Laufwerk geschrieben als /root/. Wenn also das System ausfällt und Benutzer sich nicht anmelden können, weil das Laufwerk nicht mehr /home/funktioniert, kann root. (Das ist sehr simpel. Es müssen viele Dinge auf jedes physische Laufwerk kopiert werden, damit sich root anmelden kann, wenn dies kein anderer Benutzer kann. Dies kann Ihnen jedoch einen allgemeinen Eindruck vermitteln.)

  • Und dieses tilde ( ~) -Zeichen ... bezeichnet das Home-Verzeichnis des aktuellen Benutzers. Wenn Sie als "bob" angemeldet sind, cd ~werden Sie zu weitergeleitet /home/bob/. Wenn Sie jedoch als "root" angemeldet sind, cd ~werden Sie zu weitergeleitet/root/

tl; dr So jetzt denke ich , alles gesagt:

  • "root" ist ein spezieller Benutzer mit Befugnissen und Verantwortlichkeiten, die weit über denen anderer Benutzer liegen

  • "/ root /" ist der Ort, an dem "root" seine Sachen speichern kann, ohne zu riskieren, dass sie mit anderen Sachen von normalen Benutzern verwechselt werden. Dieser Ordner kann auf ein anderes physisches Laufwerk als geschrieben werden /home/.

  • sudo -iStartet eine Shell, die die Anmeldung von root simuliert. Dies bedeutet, dass Sie in den Stammordner von root wechseln. Wie bei jedem anderen Benutzer cd ~werden Sie in Ihr Home-Verzeichnis geleitet. Wenn Sie jedoch Root sind, wird dies auch der Fall sein/root/

  • Wenn das System auf verschiedenen physischen Laufwerken installiert ist, kann sich der Root anmelden und versuchen, das Problem zu beheben, selbst wenn ein anderes Laufwerk im System ausfällt.

Barranka
quelle
1
Perfekte Antwort !
Arch
7

Der Hauptgrund für die unterschiedliche Behandlung des Stammverzeichnisses:

Wenn etwas schief geht, müssen Sie in der Lage sein, Systemwiederherstellungsaufgaben auszuführen, sobald Sie es schaffen, das Dateisystem / bereitzustellen.

Abhängig von Ihrem Setup befinden sich die Home-Verzeichnisse der Benutzer möglicherweise auf einem anderen Dateisystem oder sind sogar über das Netzwerk gemountet.

Um sich als root anzumelden (dh geben Sie an einer Anmeldeaufforderung den Namen root und das root-Passwort ein), müssen Sie von der Konsole aus nur das eine Dateisystem bereitstellen.

(Dies ist auch der Grund, warum sich die Kerndienstprogramme in / bin und / sbin anstelle von / usr / bin oder / usr / sbin befinden - alles in / usr ist entbehrlich.)

arp
quelle