Netzwerkdateisysteme NFS und CIFS
Transcrição
Netzwerkdateisysteme NFS und CIFS
Foliensatz 9 Netzwerkdateisysteme NFS und CIFS Inhalt • Network File System (NFS) • Common Internet File System (CIFS) Network File System (NFS) • Das Network File System (NFS) (definiert in RFC 1094, RFC 1813, RFC 7530 und RFC 5661) wurde ursprünglich von Sun Microsystems entwickelt und erlaubt den Zugriff auf Dateien über ein Netzwerk. • Am Server liegen die Dateien nicht in einer Datenbank oder etwas Ähnlichem, sondern sind in einem normalen Dateisystem (z.B. EXT4) gespeichert. • Es gibt verschiedene Versionen von NFS. Derzeit kommen die Versionen NFSv3, NFSv4 und NFSv4.1 zum Einsatz. Hauptvorteile von NFSv4 sind: • • Authentifikation von Benutzern, nicht nur Hostauthentifikation • Unterstützung von access control lists (ACLs) für erweiterte Zugriffsrechte • Datenübertragung nur mehr über TCP, weil das Protokoll nicht mehr zustandslos ist • Früher benötigte Serverdienste wie portmapper, rpc.mountd und rpc.lockd werden nicht mehr gebraucht Alle gängigen UNIX-/Linux-/BSD-Systeme unterstützen mittlerweile sowohl NFSv3 als auch NFSv4 und NFSv4.1. In aktuellen Windows-Versionen gibt es auch Unterstützung für NFSv3 und NFSv4.1. NFSv4 - Überblick • Da NFSv4 gegenüber NFSv3 viele Vorteile bietet, sollte, wenn möglich, nicht mehr NFSv3 eingesetzt werden. Dies wird dadurch erleichtert, dass NFSv4 in einem zu NFSv3 ähnlichen Modus ohne Benutzerauthentifikation betrieben werden kann. Wir betrachten ab jetzt nur mehr NFSv4, das meiste ist aber auch für NFSv3 gültig. • NFS basiert auf Open Network Computing (ONC) Remote Procedure Call (RPC). Das ist ein System, mit dem Applikationen Nachrichten über das Netzwerk austauschen können. Dabei sieht es für den Programmier so aus, als würde er nur lokal Nachrichten austauschen. ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-05-19 16:16 Seite 1 von 7 NFSv4 - Authentifizierung • Die Authentifizierung erfolgt über RPC und nicht direkt über NFSv4. • Der einfachste Mechanismus, und der einzig sinnvolle, der vor NFSv4 verfügbar war, ist AUTH_SYS. Dabei werden einfach die UID, die primäre GID und die sekundären GIDs mitgeschickt. Damit kann dann der Zugriff auf Dateien am Server gesteuert werden. Da der Server aber nicht feststellen kann, ob der Benutzer sich am Client wirklich authentifiziert hat, ist diese Variante nicht sicher und sollte nur verwendet werden, wenn sowohl das Netzwerk als auch alle Rechner darin gesichert sind. • Mit NFSv4 wurde die Authentifizierung über GSS-API eingeführt, wobei sowohl Server als auch Clients Kerberos V5 via GSS-API unterstützen müssen. Man kann sich auf drei Arten via Kerberos verbinden: • Nur beidseitige Authentifizierung via Kerberos (krb5) • Beidseitige Authentifizierung via Kerberos und Integritätschecks (krb5i) • Beidseitige Authentifizierung via Kerberos und Verschlüsselung (krb5p) NFSv4 - Abbilden von Benutzern und Gruppen • Nachdem jeder Datei ein Benutzer und eine Gruppe zugeordnet ist, müssen diese Informationen auch per NFS übertragen werden. • Vor NFSv3 wurden einfach die UID und GID übertragen. Der Systemadministrator musste daher sicherstellen, dass auf dem Server und den Clients die Zuordnung von Benutzer-/Gruppennamen zu UIDs/GIDs übereinstimmt. Außerdem konnte damit NFS nur eingesetzt werden, wenn es am Client überhaupt so etwas wie eine UID gab. • Um diese beiden Probleme zu beheben, werden bei NFSv4 nicht mehr UID und GIDs über das Netzwerk übertragen, sondern Zeichenketten der Form „user@domain“ bzw. „group@domain“. Damit aber die Kompatibilität zu NFSv3 gewahrt bleibt, ist es weiterhin möglich, statt Namen UIDs und GIDs zu übertragen (siehe RFC 7530, Sektion 5.9). Diese Möglichkeit besteht aber nur, wenn nicht Kerberos verwendet wird und beide Seiten, Server und Client, sie unterstützen (was nicht der Fall sein muss!). NFSv4 - Abbilden von Benutzern und Gruppen unter Linux • Die NFS-Implementierung des Linux-Kernels unterstützt die Übertragung von UIDs und GIDs. • Standardmäßig ist diese Unterstützung aktiviert, d.h. es werden bei Verwendung von AUTH_SYS UIDs und GIDs übertragen. Durch Änderung der Modulparameter nfs.nfs4_disable_idmapping (für den Client) sowie nfsd.nfs4_disable_idmapping (für den Server) kann diese Unterstützung aber deaktiviert werden. • Das Zuordnen von UID/GID zu einem Namen erfolgt durch einen ID-Mapping-Dienst am Client bzw. Server. Unter Linux gibt es dafür zwei Möglichkeiten: die alte Variante mittels des rpc.idmapd Daemons oder die neue mittels des nfsidmap Programms. Standardmäßig wird die neue Variante verwendet und die alte nur dann, wenn die neue Variante ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-05-19 16:16 Seite 2 von 7 nicht konfiguriert ist. • Beide Varianten verwenden zur Konfiguration /etc/idmapd.conf. Dort solle man den Domain-Teil festlegen, wenn er nicht der DNS-Domain entspricht. NFSv4-Server einrichten • Es empfiehlt sich, dass am Server sowie auf den Clients die gleichen Benutzer die gleichen UIDs besitzen. Dies ist zwar nicht mehr unbedingt nötig, beugt aber Problemen vor (vor allem, wenn Kerberos nicht eingesetzt wird). • Unter Ubuntu werden alle nötigen Programme bei der Installation des Pakets nfs-kernel-server installiert und nach der Installation laufen alle benötigten Dienste mit den Standardeinstellungen. • Da nur NFSv4 angeboten werden soll, muss in /etc/default/nfs-kernel-server bei RPCMOUNTDOPTS die Optionen --no-nfs-version 3 --no-nfs-version 2 hinzugefügt und das nfs-kernel-server Service neugestartet werden. • In /etc/idmapd.conf muss der Domainnname der NFS-Domain festgelegt werden (außer er entspricht der DNS-Domain). Weiters sollen keine numerischen IDs unterstützt werden, daher müssen die entsprechenden Kernelmodulparameter geändert werden, i.e. die Datei /etc/modprobe.d/nfs.conf mit folgendem Inhalt anlegen: options nfs nfs4_disable_idmapping=N options nfsd nfs4_disable_idmapping=N NFSv4-Server einrichten - Exports • Nachdem die Dienste entsprechend eingerichtet worden sind, muss dem NFS-Server noch mitgeteilt werden, welche Verzeichnisse exportiert werden sollen. Dazu braucht man die Datei /etc/exports und den Befehl exportfs. • In der Datei /etc/exports werden die Verzeichnisse mit den dazugehörigen Optionen eingetragen, die man freigeben will. Jede Zeile enthält ein Verzeichnis und dann eine Liste von Rechnern (durch Leerzeichen getrennt), die darauf zugreifen können. Direkt nach der Angabe von Rechnern können Optionen in runden Klammern angegeben werden. /srv/exports hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check) • Wichtig: Bei NFSv4 müssen (im Gegensatz zu NFSv3) alle Verzeichnisse unter einem Wurzelverzeichnis liegen. Das heißt, wenn das Wurzelverzeichnis /srv/exports ist, müssen alle zu exportierenden Verzeichnisse in diesem Verzeichnis liegen. Will man ein schon existierendes Verzeichnis exportieren, so muss man ein bind-Mount machen. NFSv4-Server einrichten - Exports Optionen • Einige wichtige Export-Optionen: • sec=Security → Authentifizierungsvariante angegben („sys“, „krb5“, „krb5i“ und „krb5p“) • rw → Lese- und Schreibzugriff ist möglich (sonst nur Lesezugriff) • sync → Synchroner Zugriff (Antwort von Server erst, nachdem Änderungen geschrieben worden sind) • no_subtree_check → Keine Überprüfung von Unterverzeichnissen (sollte man fast immer verwenden) ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-05-19 16:16 Seite 3 von 7 • • fsid=Wert → Angabe einer eindeutigen ID für das exportierte Verzeichnis (unter NFSv4 muss man die Wurzel der exportierten Verzeichnisse mit fsid=root exportieren) • [no_]root_squash → Den Administrator (nicht) auf den anonymen Benutzer abbilden Nach dem Eintragen der zu exportierenden Verzeichnisse müssen die Änderungen dem NFS-Server mitgeteilt werden: $ exportfs -rav NFSv4-Server einrichten - Kerberos • Sowohl für den Server als auch für den Client wird ein Principal der Form nfs/FQDN@REALM in /etc/krb5.keytab gebraucht. • In /etc/idmapd.conf muss das Kerberos-Realm als NFS-Domain angegeben werden. • Danach muss am Server das nfs-kernel-server Service neugestartet und am Client das rpc-gssd gestartet werden. Die Services rpc-gssd bzw. rpc-svcgssd sind für die Authentifizierung via GSS/Kerberos nötig. • Nun muss noch die Datei /etc/exports angepasst werden. Damit die Authentifizierung via Kerberos verwendet wird, muss bei den exportierten Verzeichnisse bei der Option sec= zusätzlich entweder krb5, krb5i oder krb5p angegeben werden. NFS-Client einrichten • Der ID-Mapper am Client muss gleich wie am Server konfiguriert werden, d.h. die NFS-Domain muss übereinstimmen. • Weiters muss auch der Modulparameter nfs.nfs4_disable_idmapping mit der Einstellung am Server übereinstimmen. • Anschließend braucht man das Netzwerkdateisystem nur wie ein normales Dateisystem einhängen. Die URIs, die NFS verwendet, haben die Form hostname:/Pfad/zu/Verzeichnis. $ mount -t nfs4 server:/ /mnt • Um ein NFS-Verzeichnis mittels Kerberos zu mounten, muss als Mount-Option „sec=krb5“ oder eine Variante davon verwendet werden. Common Internet File System (CIFS) • Das Common Internet File System (CIFS), auch bekannt unter Server Message Block (SMB), ist, wie NFS, ein Netzwerkdateisystem. Allerdings bietet es darüber hinaus auch noch andere Möglichkeiten, zum Beispiel Druckerfreigaben. • Das Protokoll wurde ursprünglich Anfang der 1980er Jahre bei IBM entwickelt und später stark von Microsoft weiterentwickelt. Änderungen im Protokoll müssen von Microsoft auf Druck der EU seit einige Jahren veröffentlicht werden, damit andere als die Microsoftimplementierung ohne ReverseEngineering möglich sind. • Unter Unix-artigen Betriebssystemen gibt es seit 1992 die freie Software Samba, die die Kommunikation über SMB bzw. CIFS ermöglicht. Die aktuelle Version von Samba ist Version 4, die es nun auch ermöglicht, einen Active Directory-Domain Controller zu betreiben. Damit kann man mit Samba ohne Microsoft-Server ein Windows-Netzwerk betreiben. ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-05-19 16:16 Seite 4 von 7 Samba-Server einrichten - Basiskonfiguration • Unter Ubuntu werden die benötigten Komponenten für den Server durch das Paket samba bereitgestellt (ab Ubuntu 14.04 wird damit Samba 4 installiert). • Im Gegensatz zu NFS umfasst ein Samba-Server viel mehr Komponenten und ist dementsprechend auch schwieriger aufzusetzen, auch wenn man nur die Netzwerkdateisystem-Komponente benutzen will. • Die Konfigurationsdatei /etc/samba/smb.conf wird sowohl für die Konfiguration des Servers als auch der Client-Programme verwendet. Es gibt eine Unmenge von einstellbaren Optionen. Die Konfiguration von Samba als Active Directory-Domain Controller sprengt den Rahmen der Vorlesung, wir werden uns nur mit der Freigabe von Dateien beschäftigen. • Wichtige Konfigurationsoptionen der Gruppe global: • workgroup → Der Name der Arbeitsgruppe bzw. der Domain • security → Bestimmt das verwendete Sicherheitsmodell, ist für unseren einfachen Fall auf user zu setzen Samba-Server einrichten - Shares konfigurieren • • Konfigurationsoptionen für die Gruppe homes (erlaubt das automatische Exportieren der HomeVerzeichnisse der Benutzer unter deren Benutzernamen, falls aktiviert) bzw. für allgemeine Shares: • read only → Sollte no sein, wenn auch Schreibzugriffe möglich sein soll • guest ok → Anonymen Zugriff auf das Share erlauben • path → Das zu exportierende Verzeichnis (nicht nötig für die Gruppe homes) Um ein Verzeichnis als Share zu exportieren, eine Optionengruppe mit dem Namen anlegen und darin die nötigen Optionen setzen: [home] path = /home guest ok = no read only = no • Hinweis: Die geänderte Konfigurationsdatei kann mittels samba-tool testparm auf Fehler überprüft werden. • Nach Änderungen an der Konfigurationsdatei müssen die Samba-Dienste neugestartet werden: $ systemctl restart nmbd smbd Samba-Server einrichten - Benutzer definieren • Samba benutzt für die Authentifikation von Benutzern eine eigene Datenbank oder, falls so konfiguriert, einen LDAP-Server (Option passdb backend). Das heißt, dass die am System definierten Benutzer nicht automatisch zum Zugriff auf den Samba-Server verwendet werden. • Damit ein Benutzer zugreifen kann, muss man ihn als Administrator in die Passwortdatenbank mittels smbpasswd aufnehmen. $ smbpasswd -a ict New SMB password: ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-05-19 16:16 Seite 5 von 7 Retype new SMB password: Added user ict. Benutzer können später mit Hilfe dieses Programmes auch ihr Samba-Passwort ändern. • Das Programm pdbedit kann von root auch für die Verwaltung der Passwortdatenbank genutzt werden: $ pdbedit -x praxis # Benutzer löschen $ pdbedit -a praxis # Benutzer hinzufügen $ pdbedit -L # Benutzer auflisten Samba-Client einrichten • Am Client-Rechner müssen die Pakete smbclient und cifs-utils installiert werden. Das erste stellt das Programm smbclient zur Verfügung, das zweite erlaubt das Einhängen eines Samba-Shares mittels mount.cifs. • Der Befehl smbclient agiert ähnlich wie ein FTP-Client-Programm und kann für die Interaktion mit einem CIFS-Dateiserver verwendet werden. $ smbclient -U ict -L //server # Auflisten aller Shares am Server $ smbclient -U ict //server/home # Verbinden zum Share home • Um ein CIFS-Share in das Dateisystem einzuhängen, verwendet man den Befehl mount.cifs, welcher wie der Befehl mount funktioniert. Die wichtigsten Optionen sind dabei user, pass und dom (Arbeitsgruppenname bzw. Domain), wobei das Passwort interaktiv abgefragt wird, wenn es nicht spezifiziert worden ist. $ mount.cifs //host99.ict/home /mnt -o user=ict,dom=ICT Password: Ein Nachteil dieser Methode ist, dass nur ein Benutzer auf so ein Share zugreifen kann, weil beim Mounten der Benutzername explizit angegeben werden muss. Samba-Server einrichten - Kerberos • Soll die Authentifizierung am CIFS-Server statt über Benutzername und Passwort mittels Kerberos funktionieren, so hat man prinzipiell zwei Möglichkeiten: • Man richtet Samba als komplette Active Directory Domain ein. Dies erfordert mehr Aufwand und ist auch komplizierter. • Oder man verwendet wirklich nur die Authentifizierung via Kerberos und sonst keine zusätzlichen Komponenten von Samba. Diese Variante betrachten wir. Achtung: Bei dieser Variante ist aber ein Anmelden mit Passwort nicht mehr möglich! • Es muss ein Kerberos-Principal cifs/FQDN@REALM erstellt werden und am Server in die /etc/krb5.keytab exportiert werden. • Weiters muss die Samba-Konfiguration folgendermaßen angepasst werden (statt „ICT“ den richtigen Kerberos-Realm einsetzen): workgroup = ICT ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-05-19 16:16 Seite 6 von 7 realm = ICT security = ads kerberos method = dedicated keytab dedicated keytab file = /etc/krb5.keytab Samba-Server einrichten - Kerberos - Fortsetzung • Jetzt kann auf die Shares des Servers nur mehr mittels Kerberos (oder als anonymer Benutzer, falls eingestellt) zugegriffen werden. Für smbclient verwendet man die Option -k (zuvor ein KerberosTicket holen): $ smbclient -L //server -k • Hat man Kerberos aktiviert, so ist es auch möglich, Shares mit der Option multiuser zu mounten. Damit kann ein CIFS-Share einmal z.B. beim Start des Computer gemountet werden und die Benutzer können mit ihren eigenen Rechten darauf zugreifen (so wie bei NFSv4). Dazu legt man fürs Mounten am besten einen eigenen Systembenutzer cifs-mount am CIFS-Server an, erzeugt einen Kerberos-Principal mit zufälligem Schlüssel für diesen Benutzer und exportiert diesen Schlüssel in die /etc/krb5.keytab-Datei am Client. Anschließend kann als Administrator das Share so gemountet werden: $ mount -o sec=krb5,dom=ICT,multiuser,user=cifs-mount //server/share /mountpoint ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-05-19 16:16 Seite 7 von 7