- Registriert
- Dez. 2017
- Beiträge
- 47
#5 - Geplante Systemstruktur oder: Denken in Modulen
29.03.2020
Anmerkung: Man entschuldige die lange Verzögerung seit dem letzten Eintrag. Allerdings haben mich Arbeit sowie Erkältung von mir und meinen Kleinen recht erfolgreich vom Schreiben hieran abgehalten. In der nächsten Zeit sollte ich wieder regelmäßiger dazu kommen. Im nächsten Eintrag wird dann endlich mal "produktiv" gearbeitet - ich installiere das erste Hostsystem (mein privates Debian). Wie weit der Eintrag reicht, ist noch nicht ganz klar. Das Standardprozedere kann ich jedenfalls nur eingeschränkt nutzen.
Zurück zum Startpost
29.03.2020
Anmerkung: Man entschuldige die lange Verzögerung seit dem letzten Eintrag. Allerdings haben mich Arbeit sowie Erkältung von mir und meinen Kleinen recht erfolgreich vom Schreiben hieran abgehalten. In der nächsten Zeit sollte ich wieder regelmäßiger dazu kommen. Im nächsten Eintrag wird dann endlich mal "produktiv" gearbeitet - ich installiere das erste Hostsystem (mein privates Debian). Wie weit der Eintrag reicht, ist noch nicht ganz klar. Das Standardprozedere kann ich jedenfalls nur eingeschränkt nutzen.
Zurück zum Startpost
Übersicht für diesen Eintrag
Systemaufbau visualisiert
Der Wahnsinn hat System
Ein genauerer Blick auf die Sicherheit
Mein Konzept für LVM näher betrachtet
Fußnoten
Wie zuvor bereits angedeutet, will ich in diesem Teil einen Überblick über meine geplante Systemstruktur geben. Dabei gehe ich auf den grundsätzlichen Aufbau ein, welche besonderen Techniken ich nutzen will und warum ich keine (wirkend oder auch tatsächlich) simpleren Alternativen nutze. Alle, die am praktischen Arbeiten mit Linux interessiert sind, werden hier wohl nicht so viel Brauchbares finden. Vielleicht findet sich dann ja aber doch die ein oder andere Anregung für eigene Experimente.
Systemaufbau visualisiert
Damit das Ganze nicht zu trocken und abstrakt wird, im Folgenden doch direkt mal eine grobe Veranschaulichung des geplanten Systemaufbaus.
Der Wahnsinn hat System
So, die obige Darstellung mag nun recht verwirrend scheinen. Und dabei zeigt sie noch nicht einmal alles, was genutzt werden wird. Es soll aber ein Grundprinzip andeuten, dass ich versuche (mehr oder minder) strikt durchzuziehen: Separation nach Nutzungsszenario. Die Gründe dafür sind recht vielfältig, aber nur um einige zu nennen:
- Ich will Privates, Gaming, Arbeit und Dozententätigkeit trennen. Ja, "Privates" und "Gaming" sind hier tatsächlich zwei verschiedene Dinge für mich. Steam haben z.B. meine privaten Fotos nicht wirklich zu interessieren. Ähnliches gilt natürlich für meine "reguläre" Arbeit bzw. meine Dozententätigkeit 1. Jedes soll gegenüber den anderen sinnvoll separariert werden.
- Daher kann ich auch relativ2 sicher sein, dass sich professionelle (vertrauliche) Dinge und privates nicht vermischen können. Zum Beispiel sollte selbst im Fall, dass Schadsoftware auf meinem privaten Hostsystem landet (aus welchem Grund auch immer, das ist zweitrangig), keine Arbeitsdaten gefährdet sein.
- Ich will im Falle von Fehlern (fehlerhafte Konfigurationen, aber "Schädlingsbefall" gehört auch dazu), ohne großen Zeit- und Arbeitsaufwand Systembestandteile auf einen früheren Stand zurücksetzen können. Darin begründet liegt sowohl die Konfiguration von minimalistischen Hostsystemen, als auch die intensive Nutzung von Virtualisierungslösungen.
Ein genauerer Blick auf die Sicherheit
Wie zuvor beschrieben hat Sicherheit bei der Nutzung meines Systems durchaus eine hohe Gewichtung. Ich würde aber nicht soweit gehen, Sicherheit über alles zu stellen. Am Ende muss ich dennoch produktiv arbeiten können3. Das zählt im Übrigen auch für meinen privaten Bereich und selbst das Gaming - bis zu einem gewissen Grad zumindest. Somit gibt es natürlich Wege, die Sicherheit meines Systems weiter zu erhöhen. Zum Beispiel sei hier nur die Separation mit unterschiedlichen (physischen) Systemen zu nennen. Natürlich wäre das sicherer, als so ziemlich alles, was ich mit meinem Konzept irgendwie anstellen kann. Im folgenden führe ich einige Punkte näher aus, die zentrale Punkte meines eigenen Sicherheitskonzeptes darstellen.
- LUKS
Üblicherweise genutzt zur Vollverschlüsselung von Speichermedien. In meinem speziellen Fall spreche ich ausdrücklich nicht davon, da ich eben nicht die klassische Variante (komplettes Laufwerk während der Installation verschlüsseln) nutze. Vielmehr sind zum Beispiel einer meiner SSDs drei Hauptpartitionen vorhanden, die alle separat verschlüsselt werden. Somit liegen zum Beispiel Volumes (zu LVM direkt hierunter kurz), die Privatdaten enthalten, auf einer anderen (LUKS)Partition als Arbeitsdaten4. - LVM
Entsprechend meines Setups nutze ich hier prinzipiell "LVM on LUKS". Dabei wird auf einem verschlüsselten Laufwerk eine LVM-Konfiguration genutzt. Nun mag man sich darüber streiten, ob LVM an sich die Sicherheit eines Systems erhöht. Es erlaubt mir allerdings, verschiedene Bereiche (Volumes) meines Systems unterschiedlich zu handhaben. Ganz konkret beziehe ich mir etwa auf die unterschiedlichen Optionen, ein Volume zu mounten5. - Virtualisierung
Es sollte inzwischen ja klar geworden sein: Virtualisierung ist ein zentraler Punkt für mich. Dies sowohl aus Gründen der Bequemlichkeit aber natürlich auch Sicherheit. Ich nutze hier VirtualBox, und zumindest für die vorhersehbare Zukunft wird das so bleiben6. Hier sind insbesondere auch sogenannte "unveränderliche" Images von Interesse. Diese werden mit jedem Neustart auf den vorherigen Zustand zurückgesetzt. Wo immer sinvoll, versuche ich auf diese zurückzugreifen. - Monitoring
Ich überwache innerhalb meines Setups definierte Verzeichnisse auf Änderungen. Als Beispiel seien hieretc
(ja, komplett) oderauth.log
genannt. Nun sind solche Überwachungen ja reaktiver Natur und proaktiven Maßnahmen (wie Verschlüsselung zum Beispiel). Ich bin aber der festen Überzeugung, dass einer der Hauptschlüssel zu einem sicheren System eine gute Dokumentation ist7. Zum Beispiel werden alle Konfigurationsänderungen in einem (GIT)Repository gespeichert. - Veracrypt/LUKS-Container
Die Vollverschlüsselung meines Laufwerks trägt zur Datensicherheit meiner bescheidenen Meinung nach nur bedingt bei. Sobald das Laufwerk entschlüsselt wurde, liegen die Daten ja unverschlüsselt vor. Zudem ist Diebstahl bzw. unerwünschter physischer Zugriff (selbst im geschäftlichen Umfeld) wohl deutlich weniger oft ein Bedrohungszenario. Daten, die als vertraulich, kritisch o.ä. eingestuft werden, sollten also zusätzlich abgesichert werden. Im vorliegenden Fall werde ich dabei hauptsächlich auf Veracrypt-Container zurückgreifen. Sollte ich mir sicher sein, dass entsprechende Daten nur unter Linux-basierten Systemen gelesen werden müssen, wirds vielleicht auch mal LUKS genutzt. - Passwort-Management
Eine Lösung zur Verwaltung der Passwörter ist meiner Meinung nach heutzutage lebensnotwendig. In meinem speziellen Fall wohl noch mehr als ohnehin schon. Ich werde dazu (wie vllt zu erwarten ist) KeepassXC nutzen. Dabei wird aber nicht eine Passwort-Datenbank genutzt, sondern mehrere - nach der Kritikalität der entsprechend enthaltenen Passwörter separariert. Natürlich richten sich danach auch die entsprechenden Speicherorte (für das ein oder andere werde ich auch hardwareverschlüsselte Speicherlaufwerke nutzen).
Mein Konzept für LVM näher betrachtet
Wie im vorherigen Abschnitt bereits beschrieben, ist LVM ein zentraler Punkt in meinem Konzept, um das relativ komplexe Setup effizient verwalten zu können. Dabei kann man sich meine geplante Struktur etwa wie folgt vorstellen8:
Code:
nvme0n1
+pv01_hosts_private
-+vg01_hosts_private
---01000_debian
---01010_home
---01020_opt
---01030_var
---01031_var_log
...weitere Systeme nach Bedarf
+pv02_hosts_gaming
...Systeme nach Bedarf
+pv03_hosts_work
...Systeme nach Bedarf
+pv04_hosts_train
...Systeme nach Bedarf
+pv19_hosts_testing
...Systeme nach Bedarf
[...]
+pv20_vms_private
-+vg20_vms_private
...LVs nach Bedarf
[...] Separate PVs/VGs usw. für Gaming, Arbeit und Dozent
+pv29_vms_shared
-+vg29_vms_shared
...LVs nach Bedarf
[...]
nvme0n2
+pv50_data_private
-+vg50_data_private
---50000_docs
---50010_movies
...weitere LVs nach Bedarf
[...]
...weitere PVs/VGs nach Bedarf für Gaming und Dozent (Arbeit nicht, siehe Kommentare unten)
Nun sieht das oben ja furchtbar kompliziert aus. Im Grunde ist es das aber gar nicht - im Folgenden einige Anmerkungen dazu:
- Aufmerksame Leser werden es vielleicht schon bemerkt haben: Ich versuche einzelne Elemente zu indexieren. Dies vor dem Hintergrund, dass ich später ein einzelnes logisches Volume über die fünfstellige ID referenzieren kann.
- Physical Volumes und Volume Groups sind dabei vierstellig gekennzeichnet. Die entsprechend einer Volume Group zugeordneten Logical Volumes nutzen die zweistellige Nummer. Wie man am Beispiel für mein privates Debian-System erkennen kann, weiß ich anhand der ID immer, dass ein LV, welches mit
01
beginnt, zu meinen privaten Host-Systemen gehört9. - Alle LVs, die mit
010
beginnen, sind explizit und direkt meinem privaten Debian-Hostsystem zugeordnet. Ähnliches Prinzip gilt für alle anderen Hosts. - Für LVs von Hostsystemen sind IDs bis 19999 gedacht. Dabei ist die Gruppe 19 explizit für Hosts mit Testcharakter reserviert. Ich nutze dort z.B. eine separate Debian-Installation, in der Konfigurationsänderung hardwarenah getestet werden können, bevor sie "in Produktion" überführt werden.
- LVs, auf denen ich eigentliche Daten ablege, nutzen IDs ab 50000. Auch hier lege ich wieder Wert darauf, dass eine entsprechende Separation vorhanden ist.
- In keinem Fall werden direkte Arbeitsdaten direkt auf dem System gespeichert, sondern immer nur auf externen (üblicherweise hardwareverschlüsselten) Laufwerken. Das erleichtert mir die Beurteilung nach Projektende anzugeben, dass sich keine Kundendaten mehr in meinem Besitz befinden.
- Natürlich verliert die Nutzung von LVM aufgrund meines genutzten Setups einen guten Teil seiner Vorzüge. Das ist mir durchaus bewusst.
- Gleichzeitig ist das gar kein so großes Problem. Meine Hosts (von solchen, die maximale Performance liefer sollen, mal abgesehen) greifen auf eine minimalistische Grundinstallation zurück, die nur wenig mehr als einen Desktop und eine Virtualisierungslösung bereitstellen. Dementsprechend gibt es da auch keine großen zu erwartenden Änderungen.
- Der eigentliche Teil meiner tagtächlichen Angelegenheiten (privat wie Arbeit) geschieht in den einzelnen VMs. Natürlich werde ich nicht für jede VM einzelne LVs auf den Hosts erzeugen.
- Ebenso werden nur die wenigsten VMs "innerhalb" eine vergleichbare Struktur wie die Hosts aufweisen. VMs werden nach Bedarf zwischen unterschiedlichen Hosts geteilt (das "Grundimage") und dann gemäß des Hosts unterschiedlich konfiguriert (etwa mit separaten eingebundenen Images, geteilten Ordnern o.ä.).
- Wo immer möglich, sind die VMs als unveränderlich konfiguriert. Hier werden dann die benötigten Daten über separate Images eingebunden. In diesem Fall separiere ich die Datenstruktur innerhalb der VM nicht weiter.
Fußnoten
- Wie sich jeder denken kann, ist diese zumindest aktuell faktisch nicht vorhanden.
- Ich würde an dieser Stelle ja "absolut" schreiben. Wie man auch später sehen wird, steckt hier schon mehr dahinter, als "nur" unterschiedliche Bootsysteme. Ich vermeide aber in aller Regel die Nutzung von Absolutismen, sofern das Thema nicht mein täglich Brot ist (und selbst dort ist das eher die Ausnahme).
- Ganz aktuell bin ich da an einer Beratung, wo ich mich schon nach der Sinnahftigkeit gewisser Maßnahmen frage. Die Sicherheit des Unternehmens ist quasi "bunkermäßig". Nix kann (ohne weiteres) rein, nix raus - mal von Emails agesehen, die aber auf 10MB begrenzt sind. Wer sich mit TIA-Portal o.ä. beschäftigt, weiß aber, dass die entsprechenden Programme locker 50MB oder mehr erreichen können. In der Maschinensicherheit gibt es den Punkt der Unbedienbarkeit. Ist ein System unbedienbar, wird sich er Nutzer einen Weg suchen, wie er eine Arbeit dennoch erledigen kann. Der Programmierer wird also versuchen, seine Daten über alternative Wege (Cloud, Whatsapp, muaha...) auszutauschen. Ob das am Ende besser ist, als ein (unter eigener Kontrolle befindliches) System, mag jeder selbst entscheiden.
- Natürlich werden für das Mounten von Volumes Root-Privilegien benötigt. Sollte das also unbewusst oder unbemerkt passieren, hat man ganz andere Probleme. Ich denke, es wird aber klar, worauf ich hinaus will.
- Natürlich gibt es mehr, aber in meiner fstab-Konfiguration wird desöfteren
readonly
,noexec
odernosuid
zu sehen sein. - Ich würde ja gerne KVM nutzen, da ich durchaus die Vorzüge verstehen kann. Zudem würde das auch eher meinem Credo entsprechen, dass ich nach Möglichkeit nativ unterstützte Tools verwenden will. Allerdings verfüge ich in Zusammenhang mit VirtualBox doch über Kenntnisse, die deutlich weiter als "Einsteiger" reichen. Bei KVM kann ich das nicht behaupten. Da ich mich aber dennoch gerne näher damit beschäftigen würde, wird es auch dazu eine Lösung geben. Und wer weiß, vielleicht wird es auch irgendwann den Weg in meine Produktivsysteme finden.
- Ein Punkt, der meiner Erfahrung nach im Automatisierungsumfeld (gerade Mittelstand) leider oft vernachlässigt wird. Ich bin da schon positiv überrascht, wenn die Risikobeurteilung (was in der IT am ehesten dem Sicherheitskonzept entspricht) vor der eigentlichen Produktion erstellt wird. Von Sachen wie einem (durchgängigen) Vieraugen-Prinzip, konsistenter Programmierung bei verketteten Anlagen oder der ominösen Frage "Was ist denn jetzt der aktuelle Stand auf der Maschine?" fange ich jetzt mal gar nicht an...
- Wie so oft: Natürlich nur ein Auszug. Zudem passe ich das individuell an. Nicht jedes System ist gleich konfiguriert und insbesondere (unveränderliche) VMs weichen hier ab. Ähnliches gilt für Installationen auf externen Laufwerken (wozu eben insbesondere auch separate Windows-Systeme gehören).
- Zugegebenermaßen könnte man das natürlich auch am Pfad innerhalb von
/dev
erkennen. Ich denke aber, es sollte verständlich sein, dass ich hier den Fokus auf die eindeutige Identifizierung unabhängig davon legen will.