Warum kann ein nicht privilegierter Benutzer den Befehl "sync" ausführen?

11

Derzeit unter Ubuntu Linux, aber ich habe dies auch auf anderen Betriebssystemen bemerkt. Anscheinend kann jeder Benutzer den syncBefehl ausführen - aber warum ist das so? Ich kann nur den Nachteil erkennen: System verlangsamt sich aufgrund unnötiger Schreibvorgänge.

Warum kann jeder Benutzer ausführen sync?

Jippie
quelle
1
Meine Frage zu diesem Thema wäre: Gibt es überhaupt eine Möglichkeit, Benutzer daran zu hindern, sync () zu verwenden?
Bonsi Scott
@BonsiScott Sicher, Sie können die Berechtigungsbits aus der ausführbaren Datei entfernen. Aber ich weiß nicht, ob dabei etwas kaputt geht.
Jippie
Jeder Benutzer kann nicht nur die Synchronisierung ausführen, Sie benötigen auch kein Konto. Das Konto 'synchronisieren' wird /bin/syncals Shell ausgeführt, sodass Sie synchronisieren können, ohne sich
anzumelden
Wofür ist das nützlich? Übrigens gibt es kein Passwort für das Synchronisierungskonto auf der Box, an der ich gerade arbeite, so dass dies nicht funktioniert.
Jippie
Für Produktionssysteme wird empfohlen, die Wartezeit zwischen sync-calls zu verkürzen (z. B. unter HP-Unix). Der Grund besteht darin, unnötige Wartezeiten zu vermeiden, da Massen ausstehender Schreibvorgänge gleichzeitig auf die Festplatte geschrieben werden.
Nils

Antworten:

16

Es gibt viele Möglichkeiten für einen nicht privilegierten Benutzer, ein System zu verlangsamen, und die Synchronisierung ist bei weitem nicht effizienter. Auf der anderen Seite ist es eine legitime Anforderung, die Dateisystemdaten auf die Festplatte zu übertragen, sodass es übermäßig wäre, Benutzern (und damit ihren Prozessen) zu verbieten, dies zu tun.

In jedem Fall bin ich nicht einverstanden mit Ihrer Aussage "Unnötige Schreibvorgänge auf der Festplatte". Diese Schreibvorgänge sind sicherlich notwendig und werden ohnehin nach kurzer Zeit automatisch erfolgen.

Es gibt sogar keine Garantie dafür, dass der Synchronisierungsaufruf je nach Implementierung überhaupt etwas Bestimmtes bewirkt. Das Aufrufen der Synchronisierung ist, wie im POSIX-Standard definiert , nur ein "Vorschlag" für das Betriebssystem, seine Dateisystem-Caches zu leeren. Es erzwingt nicht unbedingt das sofortige Löschen. Genauer gesagt, die Aufrufe fordern das Betriebssystem auf, einen Cache-Flush zu planen. Es gibt jedoch keine Garantie dafür, dass dieser vor dem bereits geplanten Zeitpunkt erfolgt, obwohl die Linux-Implementierung darauf wartet, dass er vor der Rückkehr erfolgt.

Darüber hinaus würde das mehrmalige Aufrufen der Synchronisierung die Systeme nicht so stark verlangsamen, da die Caches leer sind, wenn kein Prozess aktiv in Dateien schreibt, sodass die Synchronisierung ein No-Op ist.

Wenn Sie wirklich verhindern möchten, dass Benutzer die Synchronisierung auf Ihrem System ausführen, können Sie einfach die folgenden Befehle ausführen:

mv /bin/sync /bin/.sync
ln /bin/true /bin/sync

Dies würde von den Benutzern weitgehend unbemerkt bleiben und hat keine negativen Auswirkungen, außer bei Personen, die nur die Synchronisierung ausführen und dann Speichergeräte (z. B. USB-Stick) entfernen, ohne sie zu entfernen, aber diese Benutzer haben sich ohnehin schon dumm verhalten.

Beachten Sie, dass ich den vorherigen Link / bin / sync mit / bin / true nicht empfehlen würde. syncist sicherlich in einigen Fällen nützlich. Wenn Sie beispielsweise befürchten, dass in Kürze ein brutales Herunterfahren (Stromausfall, Systempanik usw.) eintreten könnte, würde dies dazu beitragen, den Inhalt des Dateisystems zu erhalten. Dies nenne ich eine legitime Anfrage.

jlliagre
quelle
2
@jippie Die syncBinärdatei ruft lediglich die sync()Funktion auf. Wie Bonsi Scott sagte, fragen Sie also wirklich, warum der Kernel nicht privilegierte Benutzer aufrufen lässtsync()
Michael Mrozek
2
@ Jippie Ich denke, Sie verpassen den Punkt. Alles, was die Synchronisierung jemals macht, ist das Festschreiben (sofort) auf Festplatten, die ohnehin festgeschrieben werden mussten. Wenn ich ein Flash-Laufwerk entferne, möchte ich sicherstellen, dass alles, was ich darauf geschrieben habe, tatsächlich geschrieben wurde. Und obwohl umount dies garantieren soll, bin ich mir nicht sicher, also möchte ich (als Benutzer) sicherstellen, bevor ich es ziehe. Es ist KEIN SCHADEN, das System zu zwingen, Puffer auf die Festplatte zu spülen. Im schlimmsten Fall bleiben einige Dinge eine Sekunde lang zurück, während das System die Puffer aktiv spült. Die Gefahr besteht darin, Benutzern diese Funktion zu verweigern.
Killermist
2
@killermist: Die Synchronisierung erzwingt nicht, sondern schlägt nur vor. Die Synchronisierung kehrt möglicherweise mit einem erfolgreichen Exit-Status zurück, ohne dass etwas auf die Festplatte geschrieben wurde. Ganz zu schweigen davon, dass die Festplatte selbst möglicherweise auch das Schreiben unter der Haube verzögert. Während ich im Allgemeinen die Meinung teile, dass Windows die erforderlichen Funktionen fehlen, würde ein Synchronisierungsbefehl das geringste meiner Bedenken sein.
Jlliagre
3
@killermist @jippie ist korrekt. Sie sollten besser darauf vertrauen umount, dass unabhängig vom Betriebssystem immer die Puffer geleert werden (es sei denn, die Festplatte ist weg ...), anstatt dass syncdies je nach Betriebssystem garantiert wird. Beachten Sie, dass Linux darauf syncwartet, dass der Flush wirksam wird, sodass auch vertrauenswürdig ist.
Jlliagre
1
linux.die.net/man/2/sync -> Gemäß der Standardspezifikation (z. B. POSIX.1-2001) plant sync () die Schreibvorgänge, kann jedoch zurückkehren, bevor das eigentliche Schreiben abgeschlossen ist. Seit Version 1.3.20 wartet Linux jedoch tatsächlich. (Dies garantiert immer noch nicht die Datenintegrität: Moderne Festplatten haben große Caches.)
Bonsi Scott
5

synckann dem System keinen Schaden zufügen. Es kann es verlangsamen, aber nicht mehr als das Ausführen von Programmen, die auf die Festplatte zugreifen. Warum sollte es eingeschränkt werden?

Es gibt einen guten Grund, jedem Benutzer das Ausführen zu erlauben sync. Dies ist erforderlich, wenn einige Vorgänge ausgeführt werden müssen, auch wenn das System abstürzt oder die Stromversorgung verliert. Stellen Sie sich beispielsweise einen Mail Transfer Agent vor, der eine E-Mail empfängt. Sobald die Datei mit der E-Mail in den Spool geschrieben wurde, ruft sie auf syncund antwortet erst dann dem sendenden Computer, der ihn darüber informiert, dass die E-Mail empfangen wurde. Wenn es nicht anruft syncund der empfangende Computer kurz nach dem Senden der Empfangsbenachrichtigung, aber vor dem Festschreiben der Datei auf die Festplatte, die Stromversorgung verliert, geht die E-Mail verloren.

Betriebssysteme verzögern das Schreiben von Datenträgern aus Effizienzgründen. Sie können nicht wissen, wann eine Anwendung das Schreiben wirklich benötigt. So erhalten Anwendungen die Möglichkeit, das Betriebssystem anzuweisen, jetzt mit sync(1)und sync(2)und zu schreiben fsync(2).

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