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