Hallo,
ich habe eine Frage an diejenigen von Euch, die sich schon einmal -z.B. im Rahmen eines Admin-Jobs- mit dem Network File System (NFS) unter Unix/Linux und insbesondere den Sicherheitsaspekten etwas näher befasst haben.
Folgendes Problem: Ich bin gerade dabei, an meiner alten Schule einen Linux-Fileserver für Linux-Clients fit zu machen. Bislang arbeitet er ausschließlich als Samba-Server für Windows-Clients und authentifiziert einloggende Benutzer gegen ein OpenLDAP-Verzeichnis. Dort läuft die Sache so ab: Der User gibt unter Windows Benutzername und Kennwort ein, das Kennwort wird (wenn auch nur mäßig gut) verschlüsselt zum Server geschickt, und der gibt die angeforderte Ressource (z.B. das Home-Verzeichnis des Users) frei.
Nun soll ein neuer EDV-Raum eingerichtet werden, in dem ausschließlich Linux-Clients aufgestellt werden. Um Verzeichnisse eines Linux-Servers auf Linux-Clients "zugreifbar" zu machen, gibt man sie üblicherweise auf dem Server via NFS frei und mountet sie auf auf dem Client. So wird bei den meisten fertigen Schulserverprodukten stets "/home" per NFS exportiert, das dann auf den Clients importiert wird (z.B. "mount -t nfs server:/home /home" bzw. eben über die üblichen Einträge in "/etc/fstab", damit das Mounten vollautomatisch beim Booten funktioniert oder auch über "automount"). Die Authentifikation der Benutzer (Login) würde mittels PAM am OpenLDAP-Server erfolgen. Auch soweit kein Problem (und läuft in meiner Testumgebung bereits).
Mit anderen Worten: Der User loggt sich ein, der Client erfährt nach erfolgreichem Login vom OpenLDAP-Server die numerische User-ID (z.B. 1000) und das Home-Verzeichnis des Users (z.B. "/home/steffen"). Auf Grund der gesetzten Verzeichnisrechte darf der User mit der User-ID eben nur in diesem Verzeichnis lesen und schreiben.
So weit, so gut. Zu Hause nutze ich NFS seit Langem, um von einem Linux-Rechner auf den anderen zugreifen. Mit der Performance und der Einfachheit der Konfiguration mittels "/etc/exports") bin ich auch durchaus zufrieden.
Allerdings stört mich beim Einsatz dieses Verfahrens in einem mittelgroßen Schulnetz (insgesamt ca. 100 Clients, davon zukünftig ca. 1/4 Linuxbasiert) dann doch erheblich die Tatsache, dass die eigentliche Zugriffssteuerung rein auf dem Client erfolgt. Der Client entscheidet, ob "steffen" nur in "/home/steffen" oder auch im Home-Verzeichnis von "hans" ("/home/hans") lesen und schreiben darf oder nicht. Der Client hat permanent das komplette "/home" des Servers gemountet und allein der Client muss dafür sorgen, dass nichts "Böses" passiert. Der Server kann lediglich auf IP- (und zur Not auf MAC-) Ebene regeln, an welche Clients er "/home" exportiert und an welche nicht. Mehr Steuerungsmöglichkeit hat der Server aber bei NFS bis einschl. Version 3 des NFS nicht.
Und genau da liegt der Haken: Zwar kann ich einen eigenen Client noch halbwegs brauchbar absichern. Allerdings kommt es im Zeitalter der Notebooks immer wieder vor, dass sich $beliebiger_Schüler_mit_Notebook einen Rechner im Rechnerraum aussteckt und stattdessen sein Notebook einsteckt - natürlich nicht legal, aber es ist eben trotz Aufsicht nicht immer vermeidbar. Wenn jetzt der Schüler noch die selbe IP des vorher eingesteckten Schulrechners am Notebook setzt, dann hat natürlich die Berechtigung das ganze "/home" vom Server zu mounten. Er wird aber nicht dazu gezwungen, gegen das OpenLDAP-Verzeichnis des Servers zu authentifizieren. Vielmehr legt er sich auf seinem Notebook einen lokalen User mit der User-ID 1000 an und prompt hat er Zugriff auf das vom NFS-Server gemountete "/home/steffen". Mit anderen Worten: Ein User mit eigenem Rechner (auf dem er sozusagen "root" ist) kann jederzeit sich "/home" mounten und darin machen, was er möchte.
Diese Problematik ist natürlich nicht neu, es gibt durchaus Ansätze zur Abhilfe, bekannt sind mir bislang diese:
- "NFS 4" bietet daher eine Art Berechtigungsticket-System basierend auf Kerberos an. Das ist mir aber "mit Kanonen auf Spatzen geschossen" - schließlich ist es ja auch irgendwo nur ein Schulnetz und mir fehlt die Zeit, mich jetzt noch in Kerberos einzulesen, nachdem ich mich schon in LDAP eingearbeitet habe und dort noch nicht so wirklich fertig mit der Umsetzung bin.
- Der Ansatz "SNFS" soll NFS quasi durch SSH tunneln. Hört sich nicht schlecht an, die Frage ist: Löst das mein Problem wirklich oder sichert "lediglich" die Übertragung ab, sodass diese nicht mehr im Klartext erfolgt und abhörbar ist?
- Man könnte die Linux-Clients natürlich auch via "smbclient" auf den Samba-Server zugreifen lassen. Wie gut läuft das in der Praxis? Gibt es (Locking-)Probleme mit bestimmten Anwendungen?
Fragen über Fragen. Mich würde interessieren: Hat von Euch jemand Praxis-Erfahrung in diesem Bereich? Falls ja: Kann er oder sie vielleicht etwas darüber berichten oder gibt es noch weitere Lösungsansätze, die ich übersehen habe? Oder bin ich zu paranoid? Andererseits - wenn man so leicht an alle User-Verzeichnisse rankommt, ist das schon "nicht ganz ohne".
Ich bedanke mich im Voraus für alle Tipps und Hinweise, die mich in der Sache weiterbringen!
Viele Grüße,
Steffen
Lesezeichen