Raspbian richtig (sicher) aufsetzen

  • Hallo Zusammen.


    Ich habe einen Raspberry Pi 3 B+ (und 64GB SD-Karte) und möchte darauf einen Webserver laufen lassen. Jedoch soll die eigentliche Website auf meinem normalen Webhosting laufen und nur bestimmte PHP-Skripts auf dem Raspberry-Server. In einem Testlauf vor über einem Jahr, hat das wunderbar funktioniert.


    Was ich möchte:

    - Raspbian mit Desktop.

    - Apache2, PHP, MqSQL und ein paar andere Programme.

    - Da ich gerne mit Desktop arbeite, möchte ich auf einen SSH-Zugriff verzichten und alles via RealVNC umsetzen.

    - Der Raspberry-Server soll ohne eigenen Bildschirm, Tastatur und Maus laufen (nur LAN)

    - Der Raspberry-Server soll "als Admin" nur lokal erreichbar sein. Ich benötige keinen Zugriff von "außen".

    - Dateien usw. würde ich gerne via Samba (Netzlaufwerk) verwalten und auf einen "FTP" verzichten, wenn das Sinnvoll (?) ist.


    Meine eigentliche Frage: Bevor ich nun anfange den Webserver usw. zu installieren, möchte ich das Betriebssystem möglichst sicher auf die Beine stellen wie einen Baum mit tiefen Wurzeln. ;) Dabei würde ich auch gerne viel lernen und verstehen. Ich habe mir daher eine "Installationsroutine" zusammengestellt und würde euch bitten, diese anzuschauen und etwas dazu zu sagen (Kritik oder Verbesserungsvorschläge).


    Das wäre also der 1. Schritt auf dem Weg zu einem (vernüftig eingerichteten) Webserver:


    Wie ist eure Meinung dazu?


    EDIT:


    Meine Installationsroutine hat sich mittlerweile grundlegend geändert.

  • - Raspbian mit Desktop.

    - Da ich gerne mit Desktop arbeite, möchte ich auf einen SSH-Zugriff verzichten und alles via RealVNC umsetzen.

    möchte ich das Betriebssystem möglichst sicher auf die Beine stellen wie einen Baum mit tiefen Wurzeln.

    Das sind zwei Aspekte, die sich meiner Meinung nach diametral positioniert gegenüber stehen.... also imho der größtmögliche Widerspruch.


    Dabei würde ich auch gerne viel lernen und verstehen.

    Und die beiden ersten ZItate stehen zusammen diametral gegenüber dem dritten Zitat positioniert... also auch hier der größtmögliche Widerspruch.


    Gehen tut das natürlich alles. Linux lässt auch Unsinn zu ... aber 'Baum und tiefe Wurzeln' und 'Sicher' ist so eher nicht erreichbar. Nur ein Hinweis dazu... ein kleiner Vergleich: Windows ist ein grafisches Betriebssystem, Linux ist das nicht! Linux-Betriebssysteme bedürfen keiner grafischen Dialogoberflächen um zu funktionieren. Insofern sind die meisten grafischen Dialog-Anwendungen im Besten Falle als "annähernd bis gar nicht tauglich" für die Administration eines Servers zu bezeichnen.

  • Hallo Alice85 willkomen im Forum. Sieht aus meiner Sicht (Linux-Beginner) recht strukturiert und sinnvoll aus. Bin auch ein Dektop-Fan. Mittlerweile ist Linux in Bezug auf GUI weiter wie vor 20 Jahren. Es gibt mehrere Philosophien und Ansätze dazu. Rein technisch gesehen ist eine reine cli Umgebung von Natur aus sicherer, gilt aber für alle IT-Systeme. Win Server gab / gibt es auch in der cli Konfig. Anstatt eines nur upgrade würde ich einsudo apt full-upgrade vorziehen. Good Luck ux

    Edit: Infolink https://www.comparitech.com/bl…ity/linux-security-guide/

  • Mittlerweile ist Linux in Bezug auf GUI weiter wie vor 20 Jahren.

    Ich glaube nicht, dass "veraltet" der Grund ist.... so etwas zu sagen wäre auch nicht fair. Es trifft doch viel eher zu, dass kaum jemand, der verantwortlich ein umfangreiches System administrieren muss, tatsächlich ernsthaft lust dazu hat, seine Zeit mit absolut dämlicher clickerei zu verplempern. Dieser Clickibunti-Mist ist doch nur ein einzige Behinderung. Ich kriege jedesmal nen Kotzreiz, wenn ich z.B. in den Linuxmint-Menüs irgend ne Einstellung minutenlang suche... und auf der anderen Seite hab ichs im Terminal dreimal fertig, während ich im Grafik-Menü einen Dialog nach dem anderen anklicke und öffne und dann darüber nachdenke, wo könnte das gesuchte denn jetzt wohl stehen.


    Ich glaube, die grafische Unterstützung ist da am weitesten entwickelt, wo sie auch Anwender findet... also auf den Enduser-Systemen. Und genau da reicht das doch auch für die meisten Zwecke vollkommen aus. Wer aber tatsächlich Server adminitrieren will, sollte sich vielleicht auch mit dem Gedanken an einen Paradigmenwechsel vertraut machen.... was ich zweifelsfrei für vorteilhaft erachte.

  • @ThomasL


    Vielen Dank für deine Kritik.


    Die meisten Sachen erledige ich über das Terminal, aber eben mit dem Desktop in Hintergrund. Was genau spricht dagegen, außer das ich ein bisschen Leistung verschwende?


    Ich kann deine Kritik nicht ganz zuordnen. Ist dir die grafische Oberfläche zuwider oder das ich es ohne SSH machen möchte? Ein paar mehr Details wären sehr Hilfreich. Ich stehe ganz am Anfang und bin offen für alles. Mir fehlt aber leider (noch) das Wissen und die Erfahrung, um direkt zu erkennen, was weshalb kritisiert wird.


    Was an meiner Installationsroutine in in Ordnung, was sollte ich ändern/verbessern und was ist "No-Go"?

  • Ist dir die grafische Oberfläche zuwider

    Nein, natürlich nicht, alles hat seinen Sinn....wie ich sagte, z.B. auf Enduser-Desktop-PCs.


    RealVNC und grafische Bloatware befinden sich halt nur auf der anderen Seite, direkt gegenüber von "Sicherheit". RealVNC ist proprietär oder enthält proprietäre Elemente, es spielt gar keine Rolle, ob Du sagst "der Server ist nicht von außen erreichbar" ... mit dem Einsatz von RealVNC hast Du darüber gar keine Kontrolle mehr oder kannst das beeinflussen. RealVNC (sowie jede andere Software aus einer Fremdquelle) ist auf einem solchen System ein absolutes NoGo.


    Darüberhinaus enthalten die grafischen Systeme eine gewaltige Menge an laufender Software, bis hin zu den obligatorisch gestarteten Diensten, wie DHCPD, Networkmanager, avahi, rsyslog und und und. Das ist gleichzeitig eine gewaltige Menge an potentiellen Exploits, worüber Du ebenfalls keine Kontrolle hast, wie die gegen Deinen Server genutzt werden könnten. Das ganz grafische System ist auf User-Interaktion mit dem WWW ausgerichtet ... da ist ein Browser installiert, was zum Henker hat ein Browser auf einem Server zu suchen? Wieso kann es da überhaupt User-Interaktion mit dem Internet geben? Wenn Du zuhause beabsichtigst, Dich auch mit Smartphones mit dem Server oder mit dem LAN zu verbinden, solltest Du auch verstehen, Du hast bei dieser Angriffsfläche nicht die geringste Chance, Deinen Server gegen Malware auf den Smaprtphones zu schützen, genausowenig wie Du kaum eine Chance hast, alle Smartphones vor Malware zu schützen.


    Also klar, Du kannst natürlich alles so tun, wie beabsichtigt.... nur Fakt ist, akzeptiere den Gedanken, dass Du auf diesem Weg nicht beeinflussen oder kontrollieren kannst, wer Deine Hardware verwendet und wer Zugang zu Deinen Daten hat.... egal, ob der Server von außen erreichbar ist oder nicht. Die Türen werden, wenn es passiert, von innen heraus geöffnet.

  • Also soll ich mich auf CLI + SSH als Fundament einschießen? Über ganz konkrete Vorschläge wäre ich sehr dankbar. :thumbup:


    Was ich unbedingt brauche: Apache2, PHP, MqSQL, Samba (oder "klassisches" FTP) und Inkscape.


    EDIT: Ich habe eine Installationsroutine auf Basis von Raspbian Buster Lite + SSH erstellt. Siehe PDF im Anhang. Ich hoffe, man kann es angenehm lesen und begutachten.


    Die Installationsroutine beschreibt die Prozeduren vom starten des Raspberry bis zu dem Punkt, wo ich anfangen würde Programme wie Apache2, Samba usw. zu installieren und genau hier brauche ich eure Hilfe. Fehlt etwas? No-Go? Fehler? Sicherheitseinstellungen die ich nicht kenne?

  • Also soll ich mich auf CLI + SSH als Fundament einschießen?

    Ich würde das so machen.... Raspbian Lite installieren, unbenötigte Dienste und Programme entfernen ... und dann schrittweise die gewünschten Funktionen herstellen. Fail2ban brauchst Du definitiv nicht, wennn Du keine Ports für vom WWW kommenden Pakete im Router öffnest

    Was ich unbedingt brauche: Apache2, PHP, MqSQL, Samba (oder "klassisches" FTP) und Inkscape.

    Inkscape ist ein Anwendungsprogramm im Userspace, das hat auf dem Server nichts verloren. Alle anderen Pakete benötigen keinen xserver.


    Samba ist was was anderes als FTP... was besser geeignet ist, entscheiden Deine Anforderungen. Um Office-Dokumente vom Server zu laden, bearbeiten und speichern ist samba die richtige Wahl... dafür ist FTP denkbar ungeeignet. Alternativ und bei eher verhaltener Verwendung solcher Fileserver-Dienste würde auch SSHFS funktionieren.

  • Leider ist Inkscape der einzige Grund, warum ich mir das ganze (Webserver) "antue". Ich muss SVG-Dateien ins Rasterformat konvertieren und benötige Funktionen wie "Text on Path". Das können auch teilweise andere Tools (ImageMagick), aber eben nicht so gut (schnell, schön und mit allen Funktionen) wie Inkscape. Es wird über die Konsole bedient (Export).


    Welche Dienste und Programme können entfernt werden und wie mache ich das am besten? Mit dem deinstallieren habe ich mich noch überhaupt nicht auseinandergesetzt.


    Bitte nicht verzweifeln: Ich werde noch Raspbian-Profi. ;)

  • Auf einem stationär eingesetzten dedizierten Server entferne ich unnütze Netzwerkkomponenten, wie dhcpd, networkmanager, avahi, wlan-komponenten. Die Netzwerkverbindung wird "Static" via Patchkabel über eine Service-Unit eingerichtet. sudo, rsyslog, triggerhappy, bluetooth... kommt bei mir immer sofort in die Tonne. Aber das muss man von Fall zu Fall untrscheiden. Für mich ist wichtig, dass es nur die Möglichkeiten zur Kontaktaufnahme mit dem Server gibt, die ich explizit freigegeben habe und wo ich zweifelsfreie Kontrolle ausübe. sudo ist zwar nicht Kommunikation, aber nach meiner Sichtweise ein Exploit.... und man brauchts nicht wirklich.


    Was inkscape mit einem Webserver zu tun hat, weiss ich nicht... für mich sieht es aus, wie ein ganz normales Allerweltsprogramm im Userspace. Warum kannst Du inkscape nicht einfach auf einem normalen Linux-Desktop verwenden... also ein Client-PC im LAN?

  • Ich habe eine Website (Webhosting) die seit über 10 Jahren online ist. Der Webhoster weigert sich aber das Programm "Inkscape" zu installieren, weil ich keinen Managed Server habe. Mit einem Managed Server würde sie es wohl sofort installieren, was mich aber mindestens 100,00 Euro pro Monat kosten würde. Lohnt sich für mich nicht.


    Daher mache ich es so: Ich lasse fast alles von meinem "Webhosting-Server" machen, bis auf die konvertierung (SVG zu PNG). Diese lasse ich durch Inkscape auf meinem Home-Server durchführen. Inkscape hat wie ImageMagick eine grafische Oberfläche, aber diese brauche ich auf dem Server nicht. Ich brauche nur die Funktion des "umwandelns". Das kann ich innerhalb eines PHP-Skripts realisieren.


    EDIT:


    Ich habe ein paar weitere Dinge verändert.

  • Ich habe ein paar weitere Dinge verändert.

    Ich habe das gerade mal eben überflogen und so ein paar Sachen kommen mir schon arg merkwürdig vor. Dieses Gewurschtel mit tempuser rein und raus verstehe ich nicht und ich erkenne auch keinen Sinn darin. Ich hatte schon mal angedeuet, dass "sudo" eigentlich ein Exploit vor dem Hintergrund völlig zweckentfremdeter Verwendung ist.... darüberhinaus verstehe ich auch gar nicht, dass Dich dieses "sudo"-Gehampel nicht total stört... einen größeren Blödsinn, als das unzählige Male erneut zu tippen, kann ich mir kaum vorstellen.


    Was willst Du mit der UFW und fail2ban? Reicht es Dir, das einfach nur zu installieren und es ist egal, ob das wirksam ist oder nicht? Wie kontrollierst Du, dass sie tatsächlich wirksam ist...? ... und zwar nicht hinsichtlich des einen freigegebenen Ports, sondern bezogen auf alle anderen denkbaren Aktivitäten irgendwelcher Programme/Dienste über alle anderen Ports. Also, gegen konkret welche Bedrohung soll das wirken? Was soll die UFW überhaupt filtern, wenn Du doch im ersten Posting gesagt hast Ich benötige keinen Zugriff von "außen". Um das hier auch zu betonen, die UFW ist keine Firewall... das ist nur ein sehr rudimentär mit gewissen Defaults vorkonfigurierter Paketfilter, der für jeden Laien mit einer völligen unüberschaubarkeit irgendwas völlig undurchsichtiges tut.

  • Ich erstelle Tempuser, damit ich den User Pi umbennen kann. Anschließend wird Tempuser gelöscht. Was gebe ich denn statt "Sudo" ein? Soll ich mich stattdessen zumroot ummelden oder zum SuperUser machen?


    Wäre das Betriebssystem so wenigstens in Ordnung eingerichtet?

  • Ich erstelle Tempuser, damit ich den User Pi umbennen kann.

    Ich hätte den User pi gar nicht umbenannt. Ich würde so vorgehen:

    - ein sicheres root-Passwort festlegen

    - direkten Root-Login verbieten

    - einen Standarduser erstellen (ohne Rechte)

    - per su und root-passwort Rootrechte beschaffen

    - wenn alles funktioniert, (Rootzugriff, Login als Standarduser...) den User pi löschen.


    Somit kannst du dich als Standarduser einloggen und alle Arbeiten ausführen, die keine Rootrechte erfordern.

    Für alle anderen "Admin-Arbeiten" kannst du dir mit su und dem Rootpasswort dauerhaft Rootrechte verschaffen.


    Wenns noch sicherer sein soll, kannst du dich auch mit einer cert/key-Authorisierung anmelden.

  • Ein paar Gruppen sollte der neue User schon beitreten.

    Ok, Gruppe "users" sowiso. Alles andere kann man ja dann noch nach Bedarf hinzufügen.

  • 1.) Root ein sicheres Passwort verpassen und direktes Login als Root verhindern (habe ich doch bereits?)

    2.) Einen neuen User ohne Rechte erstellen und prüfen, ob ich mir damit Root rechte "beschaffen" kann.


    Wie beschaffe ich mir denn "Root-Rechte" wenn ich kein "sudo" mehr verwende?


    Soll der "neue User" in alle Gruppe einegefügt werden, wie mein aktueller User "alice" auch (außer sudo)? Muss noch etwas gemacht werden? Verzeichnisrechte oder so? Home-Verzeichnis? Ich bin blutiger Anfänger..


    Wäre es in meiner Situation nicht einfacher, wenn ich den User "alice" (vorher pi) einfach aus der Gruppe "sudo" entferne? Wäre das nicht technisch gesehen das selbe, wie wenn ich einen neuen User erstelle?

  • Wie beschaffe ich mir denn "Root-Rechte" wenn ich kein "sudo" mehr verwende?

    Mit su Dann wird das Root-Passwort abgefragt

  • Soll der "neue User" in alle Gruppe einegefügt werden, wie mein aktueller User "alice" auch (außer sudo)? Muss noch etwas gemacht werden? Verzeichnisrechte oder so? Home-Verzeichnis? Ich bin blutiger Anfänger..

    Du kannst die wichtigsten Gruppen übernehmen. Ein Homeverzeichnis kannst du ebenfalls anlegen.

    sudo useradd -m username -m legt ein Userverzeichnis an

  • Ich verstehe. Wenn ich als Admin tätig werden möchte, um z.B. ein Programm zu installieren, gebe ich als User ohne Rechte einmalig (pro Session) su + Passwort ein und kann dann als Root arbeiten. Ich logge mich also als normaler User ohen Rechte ein und wechsel dann das Konto auf "Root". Sudo wäre dann in Zukunft völlig unnötig.


    Wie sieht es denn mit "alice" (ehemals pi) aus? Kann ich diesen einfach aus der "sudo-Grupp" entfernen und einen neuen User sparen?


    In diesen Gruppe ist "alice" eingetragen:


    adm:x:4:alice (wird gebraucht für logs)

    dialout:x:20:alice (entfernen da unnötig)

    cdrom:x:24:alice (entfernen da unnötig)

    sudo:x:27:alice (entfernen da Sicherheitsrelevant)

    audio:x:29:alice (entfernen da unnötig)

    video:x:44:alice (entfernen da unnötig)

    plugdev:x:46:alice (wird wahrscheinlich für die SD-Karte gebraucht?)

    games:x:60:alice

    users:x:100:alice (wird wohl gebraucht)

    input:x:105:alice

    netdev:x:109:alice

    spi:x:999:alice

    i2c:x:998:alice

    gpio:x:997:alice

    alice:x:1000: (wird gebraucht)


    Aus welchen Gruppen soll ich "alice" entfernen?


    EDIT: Zu den anderen Gruppen (schwarz) habe ich auf die schnelle nichts gefunden.

    Edited 3 times, last by Alice85 ().