Nfs

aus PUG, der Penguin User Group
Wechseln zu: Navigation, Suche

nfs4

Dieser Beitrag soll helfen, einen NFS4 Server so aufzusetzen, dass die NFS4 Funktionen auch genutzt werden können. Sehr praktisch ist da insbesondere der ID-Mapper.

DNS

Die Reverse-DNS Einträge spielen eine große Rolle bei NFS. Existiert ein Reverse-DNS Eintrag für eine IP-Adresse, dann wird vom Server nur der Name in der /etc/exports geprüft.

Server

Damit der Server funktioniert, müssen zunächst die Pakete nfs-common und nfs-kernel-server installiert werden. Weiterhin sind die folgenden Dateien zu bearbeiten:

/etc/exports

/home           192.168.1.*(rw,no_root_squash,async,subtree_check,fsid=0)

Diese Einstellung ist für den Betrieb in einem LAN gedacht, im Internet sollte NFS IMHO garnicht benutzt werden. Weiterhin wird bei dieser Config davon ausgegangen, dass kein reverse DNS vorhanden ist. Wird nun z.B. 192.168.1.99 aufgelöst zu test.bla.fasel, dann greift dieser Eintrag nicht und der Request wird abgewiesen. Werden alle IPs, die auf den NFS Server zugreifen sollen auf die Domain bla.fasel aufgelöst, dann ist dieser Eintrag in der /etc/exports vorzunehmen:

/home           *.bla.fasel(rw,no_root_squash,async,subtree_check,fsid=0)

Es sei darauf hingewiesen, dass diese Art der Authentifizierung sehr schwach ist. IMHO hat NFS nichts im Internet verloren, wer sowas unbedingt über das Internet machen will, der sollte auf jeden Fall NFS nur über ein VPN machen.

/etc/idmapd.conf

[General]

Verbosity = 0
Pipefs-Directory = /var/lib/nfs/rpc_pipefs
Domain = mydomain

[Mapping]

Nobody-User = nobody
Nobody-Group = nogroup

Hier ist die Einstellung Domain sehr wichtig, die muss bei dem Server und den Clients gleich sein, sonst funktioniert der ID-Mapper nicht.

Clients

/etc/idmapd.conf

[General]

Verbosity = 0
Pipefs-Directory = /var/lib/nfs/rpc_pipefs
Domain = mydomain

[Mapping]

Nobody-User = nobody
Nobody-Group = nogroup

Die Einstellung ist hier wie bei dem Server.

Diagnose

Ein mount -t nfs4 server:/ /mnt sollte ohne Fehlermeldung funktionieren. Ein ls -la /mnt sollte dann z.B. zu folgendem Ergebnis führen:

cf@pc01:~$ l /mnt/
insgesamt 575936
drwxrwsr-x 24 root     staff         4096 2008-06-08 12:35 .
drwxr-xr-x  9 root     root          4096 2008-06-14 09:37 ..
-rw-r--r--  1 root     staff    534177792 2008-06-08 12:40 7.0-RELEASE-i386-disc1.iso
drwxr-xr-x 40 cf       cf            8192 2008-06-13 17:12 cf
drwxr-sr-x  5 root     staff           60 2006-05-01 10:03 cpan
drwxr-xr-x  3 nobody   nogroup        104 2007-08-03 02:27 debian
drwxr-sr-x  2 root     staff            6 2008-06-03 09:00 etc
drwxr-xr-x  7 nobody   nogroup       4096 2008-02-10 13:19 files
drwxr-xr-x  4 ftp      nogroup         50 2007-02-14 18:58 ftp
drwx--S---  6 nobody   nogroup        152 2008-06-13 21:22 mysql
drwxr-xr-x  3 cf       cf              34 2008-03-04 19:28 openwrt
drwxrwxrwx 22 root     staff         4096 2008-06-01 18:14 public
drwxrwxrwx  4 nobody   nogroup       4096 2008-02-07 12:27 test
drwxr-sr-x 14 root     staff         4096 2008-06-08 12:14 tftpboot
drwxr-sr-x  3 root     staff           16 2007-12-26 18:04 tmp
drwxr-sr-x 12 www-data www-data      4096 2008-04-13 09:19 www

Wie man sieht, gibt es auf der einen Seite Angaben zu den User/Gruppen der Files/Directories und zum Anderen die Angabe nobody bzw. nogroup. Diese beiden Namen werden von NFS benutzt, wenn es auf dem lokalen System keinen passenden User gibt. Steht überall nobody / nogroup, dann konnte entweder kein User aufgelöst werden, oder der ID-Mapper arbeitet nicht richtig.

Syslog Einträge wie z.B.

Jun 14 09:46:22 pc01 rpc.idmapd[6906]: nss_getpwnam: name '0' does not map into domain 'mydomain'

sind ein Zeichen dafür, dass der ID-Mapper nicht funktioniert. Hier passen offensichtlich die Domain Einträge in der /etc/idmap.conf auf Client und Server nicht.

Wenn sich dagegen syslog Einträge wie z.B.

Jun 14 09:48:54 pc01 rpc.idmapd[6906]: nss_getpwnam: name 'debian' not found in domain 'mydomain'
Jun 14 09:48:54 pc01 rpc.idmapd[6906]: nss_getpwnam: name 'mysql' not found in domain 'mydomain'

finden, dann wurden zwar einige Namen nicht aufgelöst, aber der ID-Mapper funktioniert ansonsten.


Christian