Frage Unix-Serverpartitionierung und Dateisystemlayout


Es gibt viele widersprüchliche Informationen über die Unix-Server-Partitionierung im Internet, daher brauche ich einen Ratschlag, wie es weitergehen soll.

Bisher war es mir auf den Servern in unserer Testumgebung nicht wichtig, zu partitionieren und ich konfigurierte ein einziges monolithisches System / plus eine Swap-Partition. Dieses Partitionierungsschema scheint für unsere Produktionsserver keine gute Idee zu sein. Ich habe einen guten Ausgangspunkt gefunden Hier, aber es scheint sehr vage auf die Details.


Im Grunde habe ich einen Server, auf dem ich einen einfachen LAMP-Stack (Apache, PHP und MySQL) laufen lassen werde. Es muss Dateien hochladen (bis zu 2 GB). Das System verfügt über ein 2 TB RAID 1-Array.

Ich plane zu setzen:

/         100GB 
/var     1000GB (apache files and mysql files will be here), 
/tmp      800GB (handles the php tmp file)
/home      96GB
swap        4GB

Klingt das gesund oder übertreibe ich Dinge?


28
2017-11-16 11:58


Ursprung


Was ist dein Endziel? Was genau willst du erreichen? - Scott Pack
Wie auch immer Sie sich entscheiden, es zu schnitzen, ich würde vorschlagen, LVM zu verwenden, um Ihre Partitionen zu definieren und dann Speicherplatz konservativ zuzuweisen, so dass etwas Speicherplatz nicht zugewiesen ist. Wenn Sie dann entscheiden, dass Sie irgendwo mehr Speicherplatz benötigen, können Sie einfach das LV- und Dateisystem erweitern. - ktower


Antworten:


Eine Sache, die Sie beachten sollten, wenn Sie Ihre Partitionen anlegen, sind Fehlermodi. Typischerweise hat diese Frage die Form: "Was passiert, wenn Partition x füllt sich? "Lieber Vortaq7 brachte die Situation mit einem vollen auf / eine beliebige Anzahl von schwierig zu diagnostizierenden Problemen verursachen. Lassen Sie uns einige spezifischere Situationen betrachten.

Was passiert, wenn Ihre Partition, die Protokolle speichert, voll ist?  Sie verlieren Auditing- / Reporting-Daten und werden manchmal von Angreifern dazu benutzt, ihre Aktivitäten zu verbergen. In einigen Fällen authentifiziert Ihr System keine neuen Benutzer, wenn es ihr Anmeldeereignis nicht aufzeichnen kann. 

Was passiert auf einem RPM-basierten System? /var ist voll?  Der Paket-Manager installiert oder aktualisiert keine Pakete und kann je nach Konfiguration im Hintergrund fehlschlagen.

Das Auffüllen einer Partition ist einfach, besonders wenn ein Benutzer dazu in der Lage ist. Zum Spaß, führen Sie diesen Befehl aus und sehen Sie, wie schnell Sie eine ziemlich große Datei erstellen können: cat /dev/zero > zerofile.

Es geht weit über das Auffüllen von Partitionen hinaus, wenn Sie Positionen auf verschiedenen Mountpunkten platzieren, können Sie auch ihre Mount-Optionen anpassen.

Was passiert, wenn /dev/ ist nicht mit montiert noexec?  Schon seit /dev wird normalerweise vom Betriebssystem beibehalten und enthält nur Geräte, die häufig (und manchmal noch immer) dazu verwendet werden, schädliche Programme zu verstecken. Weggehen noexec ermöglicht es Ihnen, dort gespeicherte Binärdateien zu starten.

Aus all diesen Gründen und mehr, viele Härtungsleitfäden werden die Partitionierung als einen der ersten durchzuführenden Schritte diskutieren. In der Tat, wenn Sie einen neuen Server erstellen, wie Sie die Festplatte partitionieren ist fast genau das zuerst Ding du haben zu entscheiden, und oft am schwierigsten später zu ändern. Es gibt eine Gruppe namens Zentrum für Internetsicherheit Das erzeugt gut lesbare Konfigurationshilfen. Sie können wahrscheinlich einen Leitfaden für Ihre spezifischen finden Betriebssystem und sehen Sie irgendwelche Besonderheiten, die sie sagen können.

Wenn wir uns RedHat Enterprise Linux 6 ansehen, lautet das empfohlene Partitionierungsschema:

# Mount point           Mount options
/tmp                    nodev,nosuid,noexec
/var                    
/var/tmp                bind (/tmp)
/var/log
/var/log/audit
/home                   nodev
/dev/shm                nodev,nosuid,noexec

Das Prinzip all dieser Änderungen besteht darin, zu verhindern, dass sie sich gegenseitig beeinflussen und / oder einschränken, was auf einer bestimmten Partition getan werden kann. Nimm die Optionen für /tmpzum Beispiel. Das heißt, dass dort keine Geräteknoten erstellt werden können, keine Programme von dort ausgeführt werden können und das set-uid-Bit auf nichts gesetzt werden kann. Von Natur aus, /tmp ist fast immer schreibbar und ist oft eine spezielle Art von Dateisystem, das nur im Speicher existiert. Dies bedeutet, dass ein Angreifer diesen als einen einfachen Zwischenspeicherpunkt zum Löschen und Ausführen von bösartigem Code verwenden kann. Wenn das System abstürzt (oder einfach neu startet), löscht es alle Beweise. Seit der Funktionalität von /tmp erfordert keine dieser Funktionalität, können wir die Funktionen leicht deaktivieren und diese Situation verhindern.

Die Protokollspeicherplätze, /var/log und /var/log/audit sind ausgeschnitten, um sie vor Erschöpfung der Ressourcen zu schützen. Darüber hinaus kann auditd einige spezielle Aufgaben ausführen (normalerweise in Umgebungen mit höherer Sicherheit), wenn der Protokollspeicher beginnt, sich zu füllen. Durch die Platzierung auf der Partition wird diese Ressourcenerkennung besser ausgeführt.

Ausführlicher sein und zitieren mount(8), genau das sind die oben genannten Optionen:

noexec Erlauben Sie keine direkte Ausführung von Binärdateien auf dem angehängten Dateisystem. (Bis vor kurzem war es möglich, Binärdateien mit einem Befehl wie /lib/ld*.so auszuführen              / mnt / binär. Dieser Trick schlägt seit Linux 2.4.25 / 2.6.0 fehl.)

Knotenpunkt  Interpretieren Sie keine Zeichen oder blockieren Sie spezielle Geräte im Dateisystem.

Nosuid Lassen Sie nicht zu, dass Set-User-Identifier oder Set-Group-Identifier-Bits wirksam werden. (Dies scheint sicher, ist aber in der Tat ziemlich unsicher, wenn Sie suidperl (1) installiert haben.)

Aus Sicherheitsgründen sind dies sehr gute Optionen, da sie es Ihnen ermöglichen, Schutz für das Dateisystem selbst zu schaffen. In einer sehr sicheren Umgebung können Sie sogar die hinzufügen noexec Option zu /home. Es wird es Ihrem Standardbenutzer erschweren, Shell-Skripte für die Verarbeitung von Daten zu schreiben, zum Beispiel die Analyse von Protokolldateien, aber es verhindert auch, dass sie eine Binärdatei ausführen, die die Rechte erhöht.

Beachten Sie auch, dass das Standard-Home-Verzeichnis des Root-Benutzers ist /root. Dies bedeutet, dass es in der sein wird / Dateisystem, nicht im /home.

Wie viel Sie jeder Partition geben, hängt stark von der Systemauslastung ab. Ein typischer Server, den ich verwaltet habe, wird selten eine Interaktion mit dem Benutzer erfordern /home Partition muss nicht sehr groß sein. Gleiches gilt für /var da es dazu neigt, eher kurzlebige Daten zu speichern, die häufig erstellt und gelöscht werden. In der Regel wird jedoch ein Webserver verwendet /var/www als sein Spielplatz, was bedeutet, dass entweder auf einer separaten Partition oder auch sein muss /var/ muss groß gemacht werden.

In der Vergangenheit habe ich Folgendes als Baselines empfohlen.

# Mount Point       Min Size (MB)    Max Size (MB)
/                   4000             8000
/home               1000             4000
/tmp                1000             2000
/var                2000             4000
swap                1000             2000
/var/log/audit       250

Diese müssen entsprechend dem Systemzweck und der Funktionsweise Ihrer Umgebung überprüft und angepasst werden. Ich würde auch empfehlen, LVM und gegen das Zuordnen der gesamten Scheibe zu verwenden. Auf diese Weise können Sie problemlos Partitionen erweitern oder hinzufügen, wenn solche Dinge erforderlich sind.


32
2017-11-16 20:23



Das noexec Beobachtung ist im Allgemeinen eine wichtige - Es gilt als gute Übung zu montieren /tmpmit dem noexec Flag, um zu verhindern, dass böswillige Benutzer Rootkits über Browser-Sicherheits-Exploits hochladen. Ähnlich /home ist oft montiert nosuid da es keinen Grund gibt, dass setuid-Binärdateien da sind. Re: /dev und noexecauf vielen (wenn auch nicht allen) modernen Systemen /dev ist oft ein devfs Dateisystem und lässt Benutzer keine normalen Dateien erstellen / speichern (unter FreeBSD gibt es "Operation not supported", auf Ubuntu der udev Dateisystem eingehängt /dev können Sie normale Dateien erstellen.). - voretaq7
@ Voretaq7: Ja, mit /tmp wie ein Sprungkissen ist sehr lustig, da es immer da ist und fast nie gesperrt. - Scott Pack
Danke für diese Ratschläge. Ich werde nach noexec suchen, da es die Sicherheit verbessert! - Buzut


Ignorieren des zugrunde liegenden RAID-Arrays (In dieser Frage finden Sie weitere Informationen zu RAID-Array-Ebenen und wann Sie sie verwenden möchten), konzentrieren wir uns auf die Kernfrage, die Sie stellen:
"Wie sollte ich die Dateisysteme meines Unix-Servers anlegen?"


Was ist los mit einem Riesen? / Trennwand?

Wie Sie in Ihrer Frage angemerkt haben, verwenden viele Linux-Distributionen (insbesondere die "Desktop" -Distributionen wie Ubuntu) ein sehr einfaches Dateisystemlayout: / und [swap].

Dieses Schema hat den Vorteil von Einfachheit - Es ist großartig für DOS / Windows-Benutzer, die ihren Heim-PC mit "der Festplatte" als einen großen monolithischen Container (C:\), in die du Sachen dumpst, und du musst dir keine Sorgen machen, dass dir der Speicherplatz in Dateisystemen knapp wird - sorge nur dafür, dass du unter der Kapazität der Festplatte bleibst und alles (zumindest theoretisch) in Ordnung ist.

Das Single-Dateisystem-Schema hat jedoch einige Nachteile - der am häufigsten genannte Nachteil ist, dass Unix-Systeme dazu neigen, sehr schlecht zu reagieren, wenn das Root-Dateisystem voll ist (bis zu dem Punkt, dass das Booten verweigert wird) und wenn alles schreibt / (die Wurzel) ein unberechenbares Programm oder Benutzer kann das ganze System herunternehmen.
Ein einzelnes großes Dateisystem ist auch anfällig für einen Totalverlust im Falle eines Systemabsturzes und der nachfolgenden Beschädigung des Dateisystems.

Die oben genannten Probleme plus ein starkes Gefühl der Organisation, warum Unix-Server in der Regel mehrere Dateisysteme haben.


Wie brichst du das Unix-Dateisystem auf?

Hoffentlich sind Sie überzeugt, dass mehrere Dateisysteme sinnvoll sind. Die Frage ist nun, wie Sie das System in logische Blöcke aufteilen, und wie entscheiden Sie, wie viel Platz jeder bekommt?
Die Antwort ist, dass Sie wissen und verstehen, was Ihr Betriebssystem wohin bringt. Der Ausgangspunkt für dieses Verständnis ist die hier Man Seite. Die meisten Unix-Systeme kommen mitman hier von einem Linux-System, und man hier von einem BSD-System), und das plus Ihr lokales Wissen darüber, was der Code Sie Die Installation wird Sie bei der Erstellung eines vernünftigen Partitionierungslayouts unterstützen.

Ich werde hier ein allgemeines Partitionierungsschema beschreiben, aber dieses Schema sollte immer modifiziert werden, um Ihre spezifischen Bedürfnisse zu erfüllen.

Ein Allgemeines Unix-Partitionierungsschema

/
    The "root partition", /, does not usually need to be very large.
    It holds the basic items needed to boot the system, mount other filesystems
    and get you to a running, usable, multi-user environment.  It's also what
    is available to you when you bring up the system in single-user ("recovery")
    mode.  
    The contents of / should not change or grow substantially over time.

    NOTE: Anything that doesn't go on one of the other partitions described
          below will wind up taking space on the root partition (/).

/var
    The /var filesystem holds variable data -- log files, email, and on some
    systems databases (like MySQL or Postgres) store their data files here.  
    `/var` should be "Big Enough" to hold all the data you intend to cram into
    it.  I generally advise 10GB for systems that won't have a database or email
    server (just logs).  If you are building a database or mail server you
    should obviously make `/var` larger, or carve out separate filesystems for
    the database/mail data.

/usr
    The /usr filesystem holds "userland" programs, data, manual pages, etc.
    This is where things like the Firefox browser binary live.  On systems that
    will have a lot of large user applications this filesystem may be very large
    (100GB or more), and on stripped-down servers it may be relatively small.  
    A good rule of thumb is that the /usr filesystem should be twice as large
    as you need it to be in order to fit your initial installation of programs.

/home
    The /home filesystem holds user home directories, and on desktop systems is
    the largest and most prone to filling up.  When you download files from the
    internet, create spreadsheets, store a music library, etc. that data is
    stored in your home directory, and it adds up fast.
    It's important to allow enough room under /home for the "accumulated junk"
    you will gather over time, even on servers -- ad-hoc tarball backups, 
    package files you copied over to install, and the like.

Spezielle Dateisysteme

/tmp and /var/tmp
    The temporary scratch space (/tmp) is "special" -- on most Unix systems
    the contents of /tmp are cleared on reboot, and on many modern systems
    /tmp is a special "tmpfs" (RAM) filesystem for better performance.
    /var/tmp is usually "persistent temporary files" (like vi recovery
    files), and is not cleared on reboot
    The same general rule applies as for all other filesystems: Make sure
    your temporary scratch filesystems are big enough to hold the stuff you
    want to put in them.

[swap]
    Swap Space is used by the kernel when you are running low on RAM --
    The old general rule of thumb was to have at least twice as much swap
    as you did RAM, however on modern systems it's usually sufficient to
    have "enough" swap -- 2GB is a practical lower limit, and an amount
    between half the installed RAM and the total installed RAM is usually
    adequate.
    On modern systems with relatively huge RAM pools (12G and up) it is
    probably not practical to use the system if it's swapping heavily
    enough to warrant the old "Twice the installed RAM" rule.

12
2017-11-16 19:21



Die zwei Gründe, die Sie aufgelistet haben, sind heute weitgehend veraltet. ext [234] reserviert etwas Speicherplatz für root und erlaubt es Benutzerprogrammen nicht, all dies zu verwenden, so dass das System keine Probleme mit Speicherplatzmangel bekommt und alle modernen Dateisysteme Journaling verwenden, so dass sie danach nicht beschädigt werden ein Unfall. - psusi
@psusi Der für den Benutzer root reservierte Speicherplatz (normalerweise 5-10% der Dateisystemgröße) hilft Ihnen nicht, wenn der Benutzer root die Dateien schreibt, die die Festplatte füllen (wie es bei Log-Dateien häufig der Fall ist). Es ist auch falsch anzunehmen, dass ein Dateisystem nur dann gespeichert werden kann, wenn es im Journal gespeichert ist - Journaling erhöht die Robustheit, aber es nicht Garantiere Sicherheit (vor allem, wenn Sie über einen unentdeckten Fehler im Dateisystem / Journaling-Code stolpern und das Journal aufrütteln - Die ReiserFS-Leute können einige großartige Geschichten darüber aus den frühen Tagen dieses Dateisystems erzählen). - voretaq7
Einen intakt haben /usr oder /var hilft nicht, wenn / ist korrupt. Ebenso eine intakte haben / hilft nicht (viel) wenn /home ist korrupt. Sie müssen am Ende entweder aus dem Backup wiederherstellen. Ganz zu schweigen davon, dass solche Fehler eins zu einer Million sind, es sei denn, Sie führen ein neues / unstable fs aus. - psusi


Die Praxis, das Dateisystem so abzuschneiden, stammt aus den Zeiten, in denen es keinen Software-Raid gab und die Festplattenlaufwerke klein waren. Sie mussten also mehrere davon verwenden, und das war der einzige Weg, das Dateisystem zu durchbrechen und verschiebe verschiedene Verzeichnisse auf verschiedene Laufwerke. Der andere historische Grund dafür war, dass Sie eine Partition problemlos aushängen und dump es für die Sicherung, die Sie nicht mit dem Root tun konnten. Dieses Tool ist in diesen Tagen weitgehend in Ungnade gefallen und kann stattdessen auf einem LVM-Snapshot verwendet werden, selbst auf der Root.

Es gibt wenig bis keinen Grund, dies mehr zu tun. Der einzige Grund dafür ist, wenn Sie zum Beispiel verhindern wollen /tmpvom Auffüllen der gesamten Festplatte.

Dieser Grund ist heutzutage weitgehend irrelevant, da die Bereitstellung von Benutzern mit allgemeinem Shell-Zugriff auf der Strecke geblieben ist und heutzutage Server dedizierte Dienste wie Web- oder Mail-Server ausführen. Da Sie keine zufälligen Benutzer haben, die beliebige Befehle ausführen können, müssen Sie sich in der Regel nicht darum kümmern, dass sie versuchen, Ihr Dateisystem zu füllen (und selbst wenn Sie dies taten, hatten Sie Festplattenkontingente, um dies zu stoppen).

Was den zu verwendenden Raid-Level anbelangt, müssen Sie sich daran erinnern, dass der Hauptzweck von Raid nicht darin besteht, Daten zu schützen (dafür gibt es Backups), sondern um die Betriebszeit aufrechtzuerhalten. Wenn Sie setzen /tmp Bei einem Raid0 würde der Server immer noch herunterfahren und Sie müssten ihn reparieren, wenn eine der Festplatten ausfällt. Vielleicht möchtest du auch raid10 anstelle von raid1 verwenden, damit du auch eine bessere Leistung bekommst.

Ein sehr guter Grund, das Dateisystem NICHT aufzulösen, ist, dass Sie, wenn Sie die Zuordnungen falsch erhalten, einen Teil des Dateisystems voll haben können, obwohl es an anderer Stelle genügend freien Speicherplatz gibt. Es kann schwierig sein, dies zu korrigieren, es sei denn, Sie verwenden LVM und belassen etwas nicht zugewiesenen Speicherplatz.


4
2017-11-16 16:46



Es gibt viele Gründe dafür, weiterhin ein Unix-Dateisystem auf traditionelle Weise zu erstellen. Wenn es keinen Grund dafür gäbe, hätten wir jetzt angehalten - Systemadministratoren sind es nicht DAS an arkane Traditionen angehängt :) - voretaq7
@ Voretaq7, dann einige nennen. Wenn du das nicht kannst, dann ist blind anzunehmen, dass es dumm ist. - psusi
Es wäre angebracht, diese Ablehnung zu einem Gegenargument zu machen, anstatt blind die konventionelle Weisheit zu plappern. - psusi
Keeps / var / log von alles nehmen, indem Sie auffüllen. Begrenzt die Korruption auf ein Dateisystem. Vereinfacht Backups - egal, ob es sich um Snapshots oder Mount-Traversal-Regeln handelt, oft möchte man Backups in verschiedenen Zeitplänen erstellen. Vereinfacht das Imaging / Upgrades. Ermöglicht die Auswahl der auf Dateisystemen basierenden Leistung in Bezug auf die Aufgabe. - Jeff Ferland
@JeffFerland, im besten Fall ist das ein schwacher Grund, / var / log auf eine eigene Partition zu setzen, aber nicht für die anderen Partitionen. Es sei denn du benutzt noch dumpBei der Sicherung verschiedener Teile der fs müssen diese Teile nicht auf verschiedenen Partitionen liegen. Upgrades sind auf die eine oder andere Weise egal. Imaging ist keine gute Möglichkeit, Dinge zu tun. - psusi


Ein Großteil der Partitionierungsinformationen wurde generiert, wenn der Speicherplatz knapp war. Als Ergebnis sehen Sie relativ kleine Partitionen für eine Reihe von Fällen. Die erforderlichen Partitionsgrößen variieren je nach Servernutzung. Die meisten Variablen neigen dazu, zu sein /tmp, /var, home, /opt, und /srv. /usr tendenziell von einer vernünftigen und stabilen Größe. Platz für / kann alle oder alle anderen Partitionen und ihre Platzanforderungen enthalten. Sizing ist wirklich abhängig von dem, was Sie das System tun.

Ich würde zunehmen swap und montieren /tmp auf tmpfs. Sie /tmp wird dann Swap als Sicherungsspeicher verwenden, aber Speicher als verfügbar verwenden. Die Größe deines /tmp sieht extrem hoch aus, wird aber abgebrochene Uploads verarbeiten, die nicht bereinigt werden.

Ich würde in Betracht ziehen, die MySQL-Dateien zu verschieben /srv. Dies ist eine relativ neue Ebene in der Festplattenhierarchie.

Wenn Sie Ihre ultimativen Anforderungen nicht kennen, sollten Sie LVM verwenden und Ihre Partitionen erweitern.


3
2017-11-16 12:52



Seien Sie vorsichtig beim Erhöhen des Swap - Es ist gut, "genug" Swap zu haben, aber wenn Sie zu viel haben, werden Sie es nie benutzen (denn wenn Sie so stark tauschen, ist die Systemleistung einfach zu schmerzhaft). Ich würde sagen, das in der Frage vorgeschlagene 4G ist wahrscheinlich "genug" für einen LAMP-Stack - wenn Sie 4G Swap verwenden (und diese Daten tatsächlich ein- und ausblättert), werden Sie vermutlich auch am Telefon angeschrieen, weil Die Website ist langsam :) - voretaq7
@ Voretaq7 Es spielt keine Rolle, welche Größe Swap ist, wenn Sie für aktive Programme verwenden. Wenn Sie es für tmpfs verwenden, wo große Dateien auf die Festplatte geschrieben werden, aber kleinere Dateien resident bleiben, ist dies eine vernünftige Verwendung von swap. Es speichert jede Datei auf die Festplatte, wenn es anderswo gespeichert werden soll. Ich schlug vor, den Swap-Speicherplatz zu vergrößern, weil er groß erschien /tmp Platz kann benötigt werden. - BillThor
Warum nicht eine reguläre Datei für den Austausch verwenden? Waren sie lange nicht so schnell wie eine dedizierte Swap-Partition? - Chris Smith
@ChrisSmith Eine reguläre Datei sollte fast so schnell wie eine dedizierte Partition sein, aber möglicherweise nicht zusammenhängend auf der Festplatte, was zu geteilten E / A-Anforderungen führt. Dies kann durch Streifen ausgeglichen werden. Außerdem ist es relativ einfach, versehentlich eine Auslagerungsdatei zu löschen. Die gelöschte Datei wird erst beim Systemneustart sichtbar, wenn sie nicht mehr den Swap Space hat. - BillThor
@BillThor Das ist wahr - wenn du es benutzt tmpfs und erwarten, swap als Backing Store zu treffen, sollten Sie "genug" Swap haben, um Ihre tmpfs Anforderungen zu erfüllen, plus eine angemessene Reserve für das System. (Dies ist nicht etwas, an das ich normalerweise denke, da es das einzige System ist, in dem ich arbeite tmpfs ist so konfiguriert, dass Swap nicht gedrückt wird, da es einen RAM-Überschuss hat und ich den temporären Platz für kleine Dateien verwende, die schnell erstellt / gelöscht werden :) - voretaq7


Abhängig von Ihrer Architektur - Sie möchten möglicherweise nicht / tmp verwenden, da es nach jedem Neustart gelöscht wird. Wenn Ihre Website mit der eventuellen Verarbeitung von Uploads zu tun hat, könnte das eine Änderung an einem anderen Ort (über php.ini) sein; in dem Sie es zu jedem Mount-Punkt machen können.

Wie bereits erwähnt, wird empfohlen, LVM zu verwenden und bei Bedarf zu erhöhen.

Ich würde auch eine dedizierte Partition für MySQL-Daten empfehlen (Sie können sie immer noch unter / var / lib / mysql mounten).


2
2017-11-16 16:56



Es ist im Allgemeinen eine gute Idee, dass Dateien in anzunehmen /tmp vielleicht später nicht mehr da - rettet Sie später vor unangenehmen Überraschungen :-) - voretaq7