Nfs
Inhaltsverzeichnis
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.