Warum benötigt mount root-Rechte?

54

Warum verlangt Linux, dass ein Benutzer root / using sudo / spezifisch autorisiert ist, um etwas zu mounten? Es scheint, als ob die Entscheidung, ob ein Benutzer etwas bereitstellen darf, auf seinen Zugriffsrechten auf das Quellvolume / die Netzwerkfreigabe und auf den Bereitstellungspunkt basieren sollte. Einige Verwendungszwecke für das Mounten ohne Rootberechtigung sind das Mounten von Dateisystem-Images in eine benutzereigene Richtung und das Mounten einer Netzwerkfreigabe in ein benutzereigenes Verzeichnis. Wenn der Benutzer die Kontrolle über beide Seiten der Mount-Gleichung hat, sollte alles cool sein.

Erläuterung der Zugangsbeschränkung:

Ich bin der Meinung, dass ich in der Lage sein sollte, alles zu mounten, was der Benutzer ansonsten Zugriff auf einen Mount-Punkt hätte, dessen Eigentümer der Benutzer ist.

Beispielsweise gehört / dev / sda1 auf meinem Computer dem Benutzer root und der Gruppe disk mit Berechtigungen brw-rw----. Nicht-Root-Benutzer können sich daher nicht mit / dev / sda1 anlegen, und mount sollte es ihnen eindeutig nicht erlauben, es anzulegen. Wenn der Benutzer jedoch /home/my_user/my_imagefile.img und mount point / home / my_user / my_image / besitzt, warum sollte er dann nicht in der Lage sein, diese Image-Datei an diesem Mount-Punkt einzuhängen mit:

mount /home/my_user/my_imagefile.img /home/my_user/my_image/ -o loop

Wie Kormac betonte, gibt es ein schwerwiegendes Problem. Daher müssten einige Einschränkungen hinzugefügt werden, um zu verhindern, dass Suid ein Problem darstellt, sowie möglicherweise einige andere Probleme. Möglicherweise besteht eine Möglichkeit darin, dass das Betriebssystem alle Dateien als zu dem Benutzer gehörend behandelt, der das Mounten durchgeführt hat. Beim einfachen Lesen / Schreiben / Ausführen verstehe ich jedoch nicht, warum dies ein Problem wäre.

Anwendungsfall:

Ich habe ein Konto in einem Labor, in dem mein Speicherplatz zu Hause auf 8 GB beschränkt ist. Das ist winzig und sehr sehr nervig. Ich möchte ein nfs-Volume von meinem persönlichen Server laden, um den verfügbaren Speicherplatz wesentlich zu vergrößern. Da Linux solche Dinge jedoch nicht zulässt, muss ich beim Hin- und Herwechseln von Dateien die 8-GB-Grenze einhalten.

CrazyCasta
quelle
4
Es hört sich so an, als ob das Problem weniger darin besteht, dass "Linux solche Dinge nicht erlaubt ", als dass Sie solche Dinge in Ihrem Labor nicht tun dürfen, da das System so konfiguriert sein könnte, dass Sie dies erlauben. Sie können dieses Problem mit den Personen besprechen, die das System verwalten. wenn sie nicht freundlich sind, dann geht es um Politik und nicht um Computer;)
Goldlöckchen
Ist es möglich, beliebige Mount-Punkte zu mounten, auf die man normalen Zugriff hat? Es scheint, als müsste der Administrator eine explizite Zeile zur fstab für mein nfs-Mount hinzufügen, um dies zuzulassen. Im Gegenzug würde dies wahrscheinlich einen Präzedenzfall schaffen, in dem sie dies auch für alle anderen tun müssten, die danach fragten, was meines Erachtens unhaltbar wäre. Daher die Frage, warum Linux es nicht erlaubt, beliebige Dinge zu mounten, die sicher wären (auf eine eingeschränkte Art und Weise).
CrazyCasta
10
Hast du es versucht sshfs? Es wird ein Remote-Verzeichnis sshwie von Ihnen selbst bereitgestellt, ohne dass Root-Zugriff erforderlich ist. Es muss nur FUSE (Dateisystem in UserSpacE) installiert werden.
Arcege
1
Sie haben von dem Problem mit der schlechten Festplatte usw. gehört. Ich weiß, dass ich das einige Male gesagt habe, aber die Philosophie ist, dass das "Mounten von beliebigen Dingen" nicht sicher gemacht werden kann , und deshalb ist es so eingestellt, wie es ist ist (Ausnahmen müssen vereinbart werden). Übrigens, wenn Sie nicht über FUSE verfügen, sftpist die Verwendung ein wenig angenehmer als scp.
Goldlöckchen
1
Es sieht so aus, als ob (eine Variante von) dies hier schon einmal gefragt wurde: Hängen Sie eine Schleifendatei ohne Root-Berechtigung ein?
Daniel Pryden

Antworten:

37

Es ist sowohl eine historische als auch eine Sicherheitsbeschränkung.

In der Vergangenheit waren die meisten Laufwerke nicht austauschbar. Daher war es sinnvoll, das Mounten auf Personen zu beschränken, die einen legitimen physischen Zugriff hatten, und sie würden wahrscheinlich Zugriff auf das Root-Konto haben. Mit den fstab-Einträgen können Administratoren die Bereitstellung von Wechseldatenträgern an andere Benutzer delegieren.

Unter Sicherheitsgesichtspunkten gibt es drei Hauptprobleme, die es beliebigen Benutzern ermöglichen, beliebige Blockgeräte oder Dateisystemabbilder an beliebigen Orten bereitzustellen.

  • Durch das Mounten an einem nicht im Besitz befindlichen Speicherort werden die Dateien an diesem Speicherort gespiegelt. Beispiel: Hängen Sie ein Dateisystem Ihrer Wahl /etcmit /etc/shadoweinem Root-Kennwort an, das Sie kennen. Dies wird behoben, indem ein Benutzer ein Dateisystem nur in einem Verzeichnis bereitstellen kann, dessen Eigentümer er ist.
  • Dateisystemtreiber wurden häufig nicht so gründlich mit fehlerhaften Dateisystemen getestet. Ein fehlerhafter Dateisystemtreiber kann einem Benutzer, der ein fehlerhaftes Dateisystem bereitstellt, das Einfügen von Code in den Kernel ermöglichen.
  • Das Mounten eines Dateisystems kann dem Mounter ermöglichen, dass einige Dateien angezeigt werden, für deren Erstellung er sonst keine Berechtigung hätte. Ausführbare Setuid-Dateien und Gerätedateien sind die offensichtlichsten Beispiele, und sie werden durch die nosuidund nodev-Optionen behoben, die durch das Vorhandensein von userin impliziert werden /etc/fstab.
    Soweit erzwungen userwannmountwird nicht von root aufgerufen ist genug. Im Allgemeinen ist es jedoch problematisch, eine Datei zu erstellen, die einem anderen Benutzer gehört: Der Inhalt dieser Datei wird möglicherweise vom mutmaßlichen Eigentümer anstelle des Mounters zugewiesen. Eine zufällige Attribut-erhaltende Kopie von root in ein anderes Dateisystem würde eine Datei erzeugen, die dem deklarierten, aber nicht beteiligten Eigentümer gehört. Einige Programme prüfen, ob eine Aufforderung zur Verwendung einer Datei legitim ist, indem sie prüfen, ob die Datei einem bestimmten Benutzer gehört, und dies wäre nicht mehr sicher (das Programm muss auch prüfen, ob die Verzeichnisse im Zugriffspfad diesem Benutzer gehören; Wenn willkürliches Mounten erlaubt wäre, müssten sie auch überprüfen, ob keines dieser Verzeichnisse ein Mount-Punkt ist, an dem das Mounten weder von root noch vom gewünschten Benutzer erstellt wurde.

Aus praktischen Gründen ist es heutzutage möglich, ein Dateisystem ohne Rootberechtigung über FUSE bereitzustellen . FUSE-Treiber werden als Bereitstellungsbenutzer ausgeführt, sodass keine Gefahr der Eskalation von Berechtigungen durch Ausnutzen eines Fehlers im Kernelcode besteht. Mit FUSE-Dateisystemen können nur Dateien verfügbar gemacht werden, zu deren Erstellung der Benutzer berechtigt ist, wodurch das letzte Problem oben behoben wird.

Gilles 'SO - hör auf böse zu sein'
quelle
24

Wenn ein Benutzer direkten Schreibzugriff auf ein Blockgerät hat und dieses Blockgerät mounten kann, kann er eine entsprechende ausführbare Datei auf das Blockgerät schreiben, mounten, ausführen und so Root-Zugriff auf das System erhalten. Aus diesem Grund ist das Mounten normalerweise auf root beschränkt.

Jetzt kann root normalen Benutzern das Mounten mit bestimmten Einschränkungen ermöglichen. Er muss jedoch sicherstellen, dass das Mounten nicht zulässig ist, wenn der Benutzer Schreibzugriff auf das Blockgerät hat, und dass auch Devnodes, bei denen ein ähnliches Problem vorliegt (das der Benutzer herstellen kann) ein devnode, der ihnen Schreibzugriff auf ein wichtiges Gerät gibt, auf das sie keinen Schreibzugriff haben sollten).

Psusi
quelle
8

Es erfordert nicht immer Superprivs. Vonman mount

   The non-superuser mounts.
          Normally,  only  the  superuser can mount filesystems.  However,
          when fstab contains the user option on a line, anybody can mount
          the corresponding system.

          Thus, given a line

                 /dev/cdrom  /cd  iso9660  ro,user,noauto,unhide

          any  user  can  mount  the iso9660 filesystem found on his CDROM
          using the command

                 mount /dev/cdrom

          or

                 mount /cd

          For more details, see fstab(5).  Only the user  that  mounted  a
          filesystem  can unmount it again.  If any user should be able to
          unmount, then use users instead of user in the fstab line.   The
          owner option is similar to the user option, with the restriction
          that the user must be the owner of the special file. This may be
          useful e.g. for /dev/fd if a login script makes the console user
          owner of this device.  The group option  is  similar,  with  the
          restriction  that  the  user  must be member of the group of the
          special file.
RS
quelle
Ja, Sie haben Recht, ich war in meiner Frage etwas ungenau. Mir ist bekannt, dass man spezifisch von Mount zu Mount autorisiert werden kann. Es scheint jedoch, dass der Benutzer in der Lage sein sollte, ohne bestimmte Berechtigung zu mounten, wenn der Mountpunkt und das Volume beide Eigentum des Benutzers sind.
3
@ CrazyCasta: Der Bereitstellungspunkt gehört möglicherweise dem Benutzer, der Geräteknoten jedoch nicht. Was die Eigentümer usw. für die Daten in der Partition sind, ist a) nicht bekannt, b) irrelevant.
Goldlöckchen
Was aber, wenn der Geräteknoten dem Benutzer gehört?
CrazyCasta
Dann sollte es eine parallele Ausnahme in fstab geben, da ein benutzereigener Geräteknoten anfangs eine Ausnahme darstellen würde (versuchen Sie es und erstellen Sie einen). Auch hier gilt das Prinzip, dass ein sicheres System eingeschränkt ist und den Menschen Privilegien gewährt werden. Wenn Ihnen keine Privilegien gewährt wurden, haben Sie leider kein Glück. Sehen Sie, * nix verkauft keine Magazine mit hoher Kapazität über den Ladentisch - Sie benötigen eine Genehmigung.
Goldlöckchen
Für den mount()Systemaufruf ist immer root erforderlich. suid-Dienstprogramme können zu root werden und es Nicht-Root-Benutzern ermöglichen, sich mountanzumelden. Wenn der Befehl suid installiert ist, wird dies basierend auf dem Benutzerflag in fstab durchgeführt. Andere suid-ausführbare Dateien wurden geschrieben, um Benutzern das Mounten zu ermöglichen, z. B. pmount, um externen Datenträgern das Mounten zu ermöglichen, und um die entsprechenden Einschränkungen zu erzwingen, z. B. nosuid, nodev.
Psusi
5

Kormac und andere haben darauf hingewiesen, dass dies nicht das Dilemma ist, in dem Sie es darstellen. Es scheint mir, dass dies auf die Philosophie hinausläuft , den Benutzern explizit Berechtigungen gegenüber einem System zu gewähren , bei dem alle Benutzer das unveränderliche Recht hätten , ein Dateisystem zu mounten.

Gilles behebt einige der Sicherheitsprobleme, die beim Mounten von Dateisystemen auftreten. Ich werde rückwirkend eine vorläufige und tangentiale Diskussion über mögliche technische Probleme im Zusammenhang damit vermeiden (siehe Kommentare), aber ich halte es für fair, dass nicht vertrauenswürdige Benutzer kein unveränderliches Recht haben, Festplatten zu mounten.

Das Problem in Bezug auf virtuelle und ferne Dateisysteme (oder ferne Dateisysteme über virtuelle Dateisysteme, a la FUSE) ist weniger bedeutsam, aber die Sicherheitsfrage ist damit nicht gelöst (obwohl FUSE dies könnte und sicherlich Ihr Problem lösen würde). Es ist auch wichtig zu berücksichtigen, dass auf die Daten in solchen Dateisystemen fast immer zugegriffen werden kann, ohne dass ein Gerät gemountet werden muss, entweder durch Dateitransfer oder durch Tools, die ohne Mounten aus Images extrahieren Dies ist kein unüberwindliches Problem beim Zugriff auf Daten, die Sie bizarrerweise in einer Image-Datei abgelegt haben oder (verständlicherweise) von einem Remote-System abrufen möchten. In einer Situation, in der dies nicht der Fall ist, kann es sich lohnen, folgende Fragen zu stellen:

  1. Was genau versuche ich zu tun?

  2. Wo versuche ich es zu tun?

Wenn die Verwaltung des Systems fair ist, erklärt # 2, warum # 1 für Sie unmöglich ist. Wenn die Verwaltung des Systems nicht fair ist, ist das Politik . Die Lösung für das Problem "Mein Sys-Administrator ist nicht fair" besteht darin, das Betriebssystem nicht neu zu gestalten, sodass Sys-Administratoren die Benutzer nicht überall einschränken können.

Das System ermöglicht dem Superuser, Ihre Aktivitäten entweder explizit oder durch Auslassung einzuschränken ("Wir stellen keine SICHERUNG zur Verfügung" usw.). Privilegien sind ein Mechanismus, mit dem dies erreicht wird. Es mag nicht schön sein zu sagen: "Das musst du nicht tun", aber wenn es wahr ist ... que sera ... musst du das nicht tun. Verwenden Sie FTP usw. Wenn dies nicht der Fall ist, sollten Sie die Verantwortlichen belästigen.

Goldlöckchen
quelle
Ihre Antwort ist verwirrend. Sind die Volumes selbst (z. B. / dev / sda1, / dev / sda2 usw.) nicht vor Benutzern geschützt, die sie lesen / schreiben? Ich frage mich, warum ein Benutzer etwas nicht bereitstellen kann, auf das er sonst Zugriff hat. Zur Verdeutlichung, wenn ich eine Image-Datei habe, die ext2 heißt, könnte ich eine Anwendung schreiben, mit der ich das Image lesen / schreiben kann (natürlich nicht als Teil des Dateisystems des Betriebssystems). Diese Anwendung kann von den Partitionen in / dev nicht lesen / schreiben (es sei denn, diese Partitionen wurden geändert, um dem Benutzer den Zugriff darauf zu ermöglichen, was normalerweise keinen Sinn ergibt).
CrazyCasta
PS Ich bin nicht damit einverstanden, dass Benutzer in der Lage sein sollten, ein Dateisystem bereitzustellen, auf das sie ansonsten keinen Zugriff haben, ohne eine bestimmte Berechtigung, da allein der Vorgang des Einbindens möglicherweise eine Aktion (wie die Überprüfung des Dateisystems) auslösen kann, die Root nicht wollte.
CrazyCasta
Das Mounten eines Images umfasst weiterhin Geräteknoten (z. B. / dev / loop). Sie haben Recht, dass dies Ärger mit sich bringt, aber das "Treffen von Vorkehrungen" wird von System zu System unterschiedlich sein (zum einen gibt es nur eine begrenzte Anzahl von Loop-Geräten). Aus diesem Grund ist alles standardmäßig eingeschränkt. Diese Standardeinstellung kann jedoch vom Superuser für jeden anderen Benutzer überschrieben werden.
Goldlöckchen
Das ist ein guter Punkt in Bezug auf das Limit von Loopback-Geräteknoten. Mir ist nicht wirklich klar, warum es ein Loopback-Gerät geben muss, scheint aber ein bisschen überflüssig. Ich weiß, es liegt daran, dass für das Mounten eine blockweise Datei und keine normale Datei erforderlich ist. Ich verstehe nicht, warum das so ist. Können Sie uns einen Einblick geben, wie der Kernel Blockgeräte und reguläre Dateien signifikant anders behandelt?
CrazyCasta
1
@goldilocks: Der Grund für diese Antwort ist, dass Ihre Theorie hinter der Einschränkung sehr überzeugend ist, aber es ist völlig falsch, dass das von Ihnen angesprochene Problem nicht existiert. Wenn Sie die Erstellung eines virtuellen Dateisystems (wie FUSE) zulassen, können Sie mit IPC nichts tun, was auf Umwegen noch nicht möglich ist. Ihr Hinweis zu Interrupts auf Geräten ist völlig irrelevant. Die einzige signifikante Unterbrechung, die für ein entferntes Dateisystem auftritt, kommt von der Netzwerkkarte, die vollständig vom Kernel behandelt wird.
Lie Ryan
5

Zu Ihrer Information: Die neuesten Kernel unterstützen "Namespace". Normale Benutzer können einen Namespace erstellen und in diesem Namespace root lustige Dinge wie das Einhängen von Dateisystemen ausführen.

Es gibt Ihnen jedoch keine "echten" Superuser-Berechtigungen - Sie können nur das tun, was Sie bereits dürfen (dh Sie können nur Geräte einbinden, die Sie bereits lesen können).

http://lwn.net/Articles/531114/ Siehe Abschnitt 4.

BraveNewCurrency
quelle
Namespaces sind beschränkter. Sie können rootinnerhalb eines Benutzernamensraums auftreten, aber Sie können keine normalen Dateisystemtypen bereitstellen, selbst wenn Sie das Blockgerät lesen und schreiben können. Experiment 2 finden Sie hier: unix.stackexchange.com/questions/517317/…
sourcejedi
0

Da die Daten auf dem Dateisystem, das gemountet werden soll, die Sicherheit des Servers gefährden oder sogar zum Absturz bringen können (wenn dies absichtlich so konstruiert wurde).

sendmoreinfo
quelle
Könnten Sie näher darauf eingehen? Ich bin nicht sicher, wie "die Daten auf dem Dateisystem, das gemountet werden soll", die Sicherheit gefährden würden. Wenn Sie die Datei normal lesen / schreiben können, sollten Sie sie mounten können (ist mein Argument). Wenn ich einen Mount-Punkt lesen / schreiben kann, sollte ich in der Lage sein, alles zu mounten, mit der Ausnahme, dass ich ihn tatsächlich in ein Verzeichnis mounte. Wenn Sie es nicht lesen / schreiben oder das Verzeichnis, in dem es sich befindet, nicht anzeigen können, um festzustellen, ob es vorhanden ist, schlägt mount genauso fehl wie ein Befehl vom Typ ls oder cat.
Ihr Argument ist gültig, wenn Sie der einzelne Benutzer sind. Denken Sie daran, dass Linux (und Unix) Mehrbenutzersysteme sind, auf denen Benutzer nicht unbedingt vertrauenswürdig sind.
Sendmoreinfo
suid Binärdateien zu einem Gerät hinzugefügt werden könnten, auf dem Kasten montiert und verwendet , um ein Feld zu verankern, weshalb standardmäßig ist ownerund user(s)eingestellt nosuid. Sie möchten nicht, dass jemand so einfach umgeht, wenn er es ihm erlaubt, dennosuid
RS
@sendmoreinfo Mir ist klar, dass Linux ein Mehrbenutzersystem ist und keine Bevormundung erforderlich ist. Ich frage mich, warum ich nicht in der Lage bin, Netzwerkfreigaben und Image-Dateien bereitzustellen, auf die ich sonst viel Zugriff habe. Die Antwort von kormoc ist aufschlussreich, obwohl ich neugierig bin, warum bestimmte Flags nicht auf Nicht-Root-Benutzer (wie nosuid) angewendet werden konnten, um dies zu beheben. Es scheint, als ob ich in der Lage sein sollte, eine Image-Datei / Netzwerkfreigabe, auf die ich ansonsten Zugriff habe, zum Zwecke des einfachen Lesens / Schreibens auf einen Bereitstellungspunkt, den ich besitze, bereitzustellen.
CrazyCasta
1
Mit @CrazyCasta WRT "wird das System zum Absturz gebracht", ist es sicherlich möglich, defekte Hardware zu mounten, die Schwachstellen in der Hardware-Schnittstelle ausnutzt. Jeder, der eine Festplatte mit genügend defekten Blöcken hat, kann Ihnen sagen, wie sich dies auf den Kernel (und damit auf das gesamte System) auswirken kann. Er befindet sich in einer belebten Schleife und lähmt effektiv das gesamte Kit und Kaboodle. Es gibt vermutlich eine Logik an der Wurzel dessen, was es unmöglich macht, es zu lösen, da es sich um ein bekanntes Problem handelt, das seit langer Zeit ohne Lösung existiert.
Goldlöckchen
0

In GNOME benötigt gvfs kein Root-Verzeichnis zum Mounten des Remote-Dateisystems (ftp oder ssh) und gnome-mount benötigt auch kein Root-Verzeichnis zum Mounten des externen Speichers (USB-Laufwerk, CD / DVD usw.).

Die meisten Systeme möchten wahrscheinlich nicht das gesamte GNOME nur für eine Remote- Bereitstellung haben , dann können Sie lufs , sshfs oder ftpfs verwenden .

gvfs, lufs, sshfs und ftpfs verwenden FUSE, um Nicht-Root-Benutzern das Mounten des virtuellen Dateisystems zu ermöglichen. und im Gegensatz zu Mount- -o userServern benötigt FUSE keinen Sysadmin, um bestimmte Mount- Server anzuordnen. Solange Sie über die Berechtigung zum Mount-Verzeichnis und zu den Ressourcen verfügen, die zum Erstellen des Dateisystems erforderlich sind, können Sie einen FUSE-Mount erstellen.

Warum benötigt mount root-Rechte?

Denn mountist in erster Linie / ursprünglich für das lokale Dateisystem gedacht, bei dem es sich fast immer um eine Hardware handelt.

Lüge Ryan
quelle