NFS

Aus VDR Wiki
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
K (Dinglische Texte entfernt)
 
(15 dazwischenliegende Versionen von 9 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
NFS '''(N)'''etwork '''(F)'''ile '''(S)'''ystem
+
NFS steht für {{wikipedia|Network File System}}
  
Standard zum transparenten Datenaustausch innerhalb der Unix/Linux- Welt.  
+
NFS ist das traditionelle Standard-Protokoll in der Unix/Linux- Welt um Dateisysteme über eine Netzwerkverbindung auf anderen Rechnern transparent einzubinden. Es ist in seiner traditionellen Variante sehr einfach aufzusetzen und ressourcenschonend. Die dabei auftretenden, eklatanten Sicherheitsprobleme dieser Konfiguration sind innerhalb des typischen Umfeld eines [[VDR]] (lokales, privates Netz) in der Regel vertretbar. Es ist grundsätzlich auch möglich NFS abzusichern z.B durch die Benutzung von {{wikipedia2|Kerberos_%28Informatik%29|Kerberos}}. Der dabei auftretende Aufwand ist dann jedoch wieder erheblich.
  
Konfigurationsdatei des Servers ist '''[[/etc/exports]]''':
+
== Konfiguration von NFS im Allgemeinen ==
 +
NFS erfordert den Betrieb einiger Dienste auf Client und Server. Man sollte die Systeme so konfigurieren das diese Dienste automatisch starten, dabei werden dann in der Regel auch gleich die erforderlichen Kernel-Module geladen.
  
/srv/nfs                192.168.0.0/24(rw,all_squash,async)
+
NFS setzt zur Kommunikation {{wikipedia|Remote Procedure Call}} ein. Aus diesem Grund muß auf Client und Server der Dienst {{wikipedia2|Portmapper|portmap}} laufen.
/srv/ftp                192.168.0.0/24(rw,all_squash,async)
+
  
Auf beiden Seiten (Client und Server) muß der Dienst '''"portmap"''' gestartet sein:
+
Leider haben die Startskripte für die anderen NFS-Dienste unter unterschiedlichen Linux Distributionen keine einheitlichen Namen. Konsultiert im Fall des Zweifels deshalb bitte die entsprechende Dokumentation der von euch verwendeten Distribution. Der Server-Dienst ist dabei immer vom Client-Dienst getrennt und sollte auch nur auf Servern gestartet werden.
  
/etc/init.d/portmap start
+
NFS ist heutzutage unter Linux als Teil des Kernel implementiert. Baut man seinen eigenen Kernel muß man deshalb darauf achten die entsprechende Unterstützung einzubauen.
  
Auf dem Server muß der '''NFS- Server''' gestartet sein:
+
Benutzer- und Gruppenkennungen werden zumindest bis NFS Version 3 nur numerisch übertragen, es ist deshalb sinnvoll die Zuordnung von Namen und Nummern auf den beteiligten Rechnern konsistent zu halten. In der NFS Standardkonfiguration wird aus Sicherheitsgründen wird Kennung 0 ('''root''') eines Client auf dem Server gegen die Kennung '''nobody''' gemappt. Dieses grundsätzlich sinnvolle Verhalten lässt sich Serverseitig mit den '''*_squash''' Optionen beeinflussen. Wer seinen VDR (unnötigerweise) mit Root-rechten betreibt mag an diesen Punkt auf ein Problem stoßen.
  
/etc/init.d/nfsserver start
+
===Server===
 +
NFS-Freigaben auf dem Server werden in der Konfigurationsdatei [[exports|'''/etc/exports''']] definiert.
  
Mit Hilfe des '''mount'''- Befehls kann man nun diese "Freigabe" auf den Client mounten:
+
# Beispiel für eine /etc/exports
 +
/srv/nfs                192.168.25.3(rw,async)
 +
/srv/ftp                192.168.25.0/24(ro,all_squash,async)
 +
/woanders              clas(rw,no_root_squash,sync) jan(rw,async) hein(rw,async) pit(rw,async)
  
 +
Änderungen in der '''/etc/exports''' können dem NFS-Server im laufenden Betrieb mit dem Kommando '''exportfs''' bekannt gegeben werden. Welche Clients Verzeichnisse eingebunden haben, kann (mehr oder weniger zuverlässig) mit '''showmount''' erfragt werden.
 +
 +
Bitte seid sehr vorsichtig was ihr für wen freigebt.
 +
 +
Manpages: '''exports(5)''', '''nfsd(8)''', '''exportfs(8)''', '''showmount(8)''', '''mountd(8)''', '''nfs(5)''' usw.
 +
 +
===Client===
 +
Mit Hilfe des '''mount'''- Befehls kann man nun diese "Freigabe" auf den Client mounten:
 
  mount -t nfs servername:/srv/nfs /video0
 
  mount -t nfs servername:/srv/nfs /video0
  
Automatisiert kann das auf dem Client in der '''/etc/fstab''' eingetragen werden:
+
Damit der Client beim Starten die Freigabe einbindet, kann man einen entsprechenden Eintrag in der '''/etc/fstab''' machen:
  
 
  servername:/srv/nfs /video0 nfs defaults 0 0
 
  servername:/srv/nfs /video0 nfs defaults 0 0
  
==Vorteil==
+
Oft lässt sich die Geschwindigkeit mit passenden Optionen leicht steigern:
Innerhalb der Unix/Linux- Welt beliebig verwendbar. Stellt demnach die ideale Basis für einen "fetten" Dateiserver im Hintergrund des VDR dar.
+
servername:/srv/nfs /video0 nfs rsize=8192,wsize=8192 0 0
 +
 
 +
==VDR-spezifische Nutzung==
 +
Beim VDR wird es bei der Nutzung von NFS in erster Linie darum gehen die Videodaten des Servers auf den Clients einzubinden. Auf diesen Dateisystemen schreibt üblicherweise nur der VDR herum. Es reicht deshalb sicher zu stellen, dass dessen Benutzer- und Gruppenkennung auf allen beteiligten Systemen gleich definiert sind.
 +
 
 +
===VDR-Server===
 +
Der VDR organisiert seine Videodaten so das er entsprechend eingebundene Festplattenpartitionen benutzt.
 +
 
 +
server:~# mount | grep video
 +
/dev/hda6 on /var/lib/video.00 type ext3 (rw)
 +
/dev/hdb1 on /var/lib/video.01 type ext3 (rw)
 +
/dev/hdc1 on /var/lib/video.02 type ext3 (rw)
 +
 
 +
Auf die erste Partition zeigt dabei ein Softlink:
 +
 
 +
server:~# ls -dl /var/lib/video*
 +
lrwxrwxrwx  1 root root    8 2007-10-24 19:30 /var/lib/video -> video.00
 +
drwxr-xr-x 50 vdr  vdr  4096 2008-05-19 20:05 /var/lib/video.00
 +
drwxr-xr-x 50 vdr  vdr  4096 2008-05-19 20:05 /var/lib/video.01
 +
drwxr-xr-x 50 vdr  vdr  4096 2008-05-19 20:05 /var/lib/video.02
 +
 
 +
Für jede Video-Partition definiert man einen Eintrag in der '''/etc/exports''':
 +
 
 +
# /etc/exports
 +
/var/lib/video.00  192.168.25.156(rw,async,subtree_check)
 +
/var/lib/video.01  192.168.25.156(rw,async,subtree_check)
 +
/var/lib/video.02  192.168.25.156(rw,async,subtree_check)
 +
 
 +
Danach benutzt man das Kommando '''exportfs''' um dem NFS-Server die Änderungen übernehmen zu lassen.
 +
 
 +
server:~# exportfs -a
 +
 
 +
===VDR-Client===
 +
Da der VDR bei der Verwendung von mehreren Video-Partitionen absolute Softlinks auf die anderen Partitionen anlegt, müssen die NFS-Freigaben auf den selben Mountpunkten eingebunden werden. Das "Streamen" von Aufnahmen über [[Vdradmin AM]] funktioniert auch nur dann, wenn auf allen Rechnern die gleichen Mountpunkte verwendet werden.
 +
 
 +
Wird auf dem Server nur eine Partition als Videoverzeichnis benutzt, könnte diese auf den Clients grundsätzlich auch an anderer Stelle eingebunden werden.
 +
 
 +
Anlegen der Mountpoints:
 +
 
 +
client:~# mkdir -p /var/lib/video.00 /var/lib/video.01 /var/lib/video.02
 +
client:~# cd /var/lib
 +
client:~# ln -s video.00 video
 +
 
 +
Eintragen der Mounts in die '''/etc/fstab''':
 +
 
 +
# /etc/fstab
 +
server:/var/lib/video.00    /var/lib/video.00 nfs defaults  0 0
 +
server:/var/lib/video.01    /var/lib/video.01 nfs defaults  0 0
 +
server:/var/lib/video.02    /var/lib/video.02 nfs defaults  0 0
 +
 
 +
Der Client mountet die NFS-Freigaben nach dem Aufruf von '''mount -a''' oder nach dem nächsten Reboot.
  
==Nachteil==
+
Auf diese Weise zeigen die Softlinks auf der ersten Video-Platte sowohl beim Client als auch beim Server an die richtige Stellen.
NFS löst keine symbolischen Links auf. Verweist ein Link auf eine Datei außerhalb der Freigabe, ist diese vom Client aus nicht erreichbar. Abhilfe schafft hier die Verwendung von [[LVM]] oder [[Samba]].
+
  
 
[[Kategorie:Software]]
 
[[Kategorie:Software]]

Aktuelle Version vom 30. Juni 2013, 21:37 Uhr

NFS steht für Network File System

NFS ist das traditionelle Standard-Protokoll in der Unix/Linux- Welt um Dateisysteme über eine Netzwerkverbindung auf anderen Rechnern transparent einzubinden. Es ist in seiner traditionellen Variante sehr einfach aufzusetzen und ressourcenschonend. Die dabei auftretenden, eklatanten Sicherheitsprobleme dieser Konfiguration sind innerhalb des typischen Umfeld eines VDR (lokales, privates Netz) in der Regel vertretbar. Es ist grundsätzlich auch möglich NFS abzusichern z.B durch die Benutzung von Kerberos. Der dabei auftretende Aufwand ist dann jedoch wieder erheblich.

Inhaltsverzeichnis

[Bearbeiten] Konfiguration von NFS im Allgemeinen

NFS erfordert den Betrieb einiger Dienste auf Client und Server. Man sollte die Systeme so konfigurieren das diese Dienste automatisch starten, dabei werden dann in der Regel auch gleich die erforderlichen Kernel-Module geladen.

NFS setzt zur Kommunikation Remote Procedure Call ein. Aus diesem Grund muß auf Client und Server der Dienst portmap laufen.

Leider haben die Startskripte für die anderen NFS-Dienste unter unterschiedlichen Linux Distributionen keine einheitlichen Namen. Konsultiert im Fall des Zweifels deshalb bitte die entsprechende Dokumentation der von euch verwendeten Distribution. Der Server-Dienst ist dabei immer vom Client-Dienst getrennt und sollte auch nur auf Servern gestartet werden.

NFS ist heutzutage unter Linux als Teil des Kernel implementiert. Baut man seinen eigenen Kernel muß man deshalb darauf achten die entsprechende Unterstützung einzubauen.

Benutzer- und Gruppenkennungen werden zumindest bis NFS Version 3 nur numerisch übertragen, es ist deshalb sinnvoll die Zuordnung von Namen und Nummern auf den beteiligten Rechnern konsistent zu halten. In der NFS Standardkonfiguration wird aus Sicherheitsgründen wird Kennung 0 (root) eines Client auf dem Server gegen die Kennung nobody gemappt. Dieses grundsätzlich sinnvolle Verhalten lässt sich Serverseitig mit den *_squash Optionen beeinflussen. Wer seinen VDR (unnötigerweise) mit Root-rechten betreibt mag an diesen Punkt auf ein Problem stoßen.

[Bearbeiten] Server

NFS-Freigaben auf dem Server werden in der Konfigurationsdatei /etc/exports definiert.

# Beispiel für eine /etc/exports
/srv/nfs                192.168.25.3(rw,async)
/srv/ftp                192.168.25.0/24(ro,all_squash,async)
/woanders               clas(rw,no_root_squash,sync) jan(rw,async) hein(rw,async) pit(rw,async)

Änderungen in der /etc/exports können dem NFS-Server im laufenden Betrieb mit dem Kommando exportfs bekannt gegeben werden. Welche Clients Verzeichnisse eingebunden haben, kann (mehr oder weniger zuverlässig) mit showmount erfragt werden.

Bitte seid sehr vorsichtig was ihr für wen freigebt.

Manpages: exports(5), nfsd(8), exportfs(8), showmount(8), mountd(8), nfs(5) usw.

[Bearbeiten] Client

Mit Hilfe des mount- Befehls kann man nun diese "Freigabe" auf den Client mounten:

mount -t nfs servername:/srv/nfs /video0

Damit der Client beim Starten die Freigabe einbindet, kann man einen entsprechenden Eintrag in der /etc/fstab machen:

servername:/srv/nfs /video0 nfs defaults 0 0

Oft lässt sich die Geschwindigkeit mit passenden Optionen leicht steigern:

servername:/srv/nfs /video0 nfs rsize=8192,wsize=8192 0 0

[Bearbeiten] VDR-spezifische Nutzung

Beim VDR wird es bei der Nutzung von NFS in erster Linie darum gehen die Videodaten des Servers auf den Clients einzubinden. Auf diesen Dateisystemen schreibt üblicherweise nur der VDR herum. Es reicht deshalb sicher zu stellen, dass dessen Benutzer- und Gruppenkennung auf allen beteiligten Systemen gleich definiert sind.

[Bearbeiten] VDR-Server

Der VDR organisiert seine Videodaten so das er entsprechend eingebundene Festplattenpartitionen benutzt.

server:~# mount | grep video
/dev/hda6 on /var/lib/video.00 type ext3 (rw)
/dev/hdb1 on /var/lib/video.01 type ext3 (rw)
/dev/hdc1 on /var/lib/video.02 type ext3 (rw)

Auf die erste Partition zeigt dabei ein Softlink:

server:~# ls -dl /var/lib/video*
lrwxrwxrwx  1 root root    8 2007-10-24 19:30 /var/lib/video -> video.00
drwxr-xr-x 50 vdr  vdr  4096 2008-05-19 20:05 /var/lib/video.00
drwxr-xr-x 50 vdr  vdr  4096 2008-05-19 20:05 /var/lib/video.01
drwxr-xr-x 50 vdr  vdr  4096 2008-05-19 20:05 /var/lib/video.02

Für jede Video-Partition definiert man einen Eintrag in der /etc/exports:

# /etc/exports
/var/lib/video.00  192.168.25.156(rw,async,subtree_check)
/var/lib/video.01  192.168.25.156(rw,async,subtree_check)
/var/lib/video.02  192.168.25.156(rw,async,subtree_check)

Danach benutzt man das Kommando exportfs um dem NFS-Server die Änderungen übernehmen zu lassen.

server:~# exportfs -a

[Bearbeiten] VDR-Client

Da der VDR bei der Verwendung von mehreren Video-Partitionen absolute Softlinks auf die anderen Partitionen anlegt, müssen die NFS-Freigaben auf den selben Mountpunkten eingebunden werden. Das "Streamen" von Aufnahmen über Vdradmin AM funktioniert auch nur dann, wenn auf allen Rechnern die gleichen Mountpunkte verwendet werden.

Wird auf dem Server nur eine Partition als Videoverzeichnis benutzt, könnte diese auf den Clients grundsätzlich auch an anderer Stelle eingebunden werden.

Anlegen der Mountpoints:

client:~# mkdir -p /var/lib/video.00 /var/lib/video.01 /var/lib/video.02
client:~# cd /var/lib
client:~# ln -s video.00 video

Eintragen der Mounts in die /etc/fstab:

# /etc/fstab
server:/var/lib/video.00     /var/lib/video.00 nfs defaults  0 0
server:/var/lib/video.01     /var/lib/video.01 nfs defaults  0 0
server:/var/lib/video.02     /var/lib/video.02 nfs defaults  0 0

Der Client mountet die NFS-Freigaben nach dem Aufruf von mount -a oder nach dem nächsten Reboot.

Auf diese Weise zeigen die Softlinks auf der ersten Video-Platte sowohl beim Client als auch beim Server an die richtige Stellen.