bitte eine Anleitung: NFSv4 - Server mit FreeBSD hochziehen

Yoda

[Linux|FreeBSD] - User
Hallo Leute,

kann mir bitte jemand mal zwei "saubere" Anleitungen für NFSv4-only (also kein NFSv2 bzw. NFSv3) machen?

Eine hätte ich gerne nach der "klassischen" Methode

und eine mit ZFS (sharenfs=on), ich weiß, das ist wohl noch experimental.

Deshalb reicht eigentlich erstmal auch die "klassischen" Methode.

Danke!

Gruß
Yoda


EDIT:
Kerberos und ACL's möchte ich nicht machen/verwenden, die Sicherheit muss hier nicht so hoch priorisiert werden, da es nur im privaten LAN läuft. Da spar ich mir lieber die Ticket's....

Linux als NFSv4-Server bekomme ich problemlos hin, es hapert nur bei FreeBSD! :-(
 
Zuletzt bearbeitet:
Bis jetzt hatte ich alles so konfiguriert, wie ich das so im Netz gelesen hatte...
aber irgendwie geht der Port 2049 nie auf (ich denke das er das aber sollte)
und der RPC wird als erstes gestartet und trotzdem bekomme ich diese Meldung auf dem localen FreeBSD-Server:
Code:
[root@erde ~]# mount_newnfs localhost:/home/kontor/ /mnt/
[tcp] localhost:/home/kontor: RPCPROG_NFS: RPC: Program not registered
[tcp6] localhost:/home/kontor: RPCPROG_NFS: RPC: Program not registered
^C


und auf dem Linux-Client kommt nix:
Code:
vi /etc/fstab
erde:/   /mnt   nfs4    _netdev,noauto,sec=sys  0  0

Code:
root@wanderer:~# mount /mnt/
Password: ****
^C

Code:
root@wanderer:~# mount.nfs4 erde:/home/kontor/ /mnt/
^C


Konfiguriert hab ich den Server so:

Code:
vi /etc/exports
V4: / -sec=sys
#V4: /home/kontor -sec=sys -alldirs -mapall=kontor:nutzer -network 192.168.9 -mask 255.255.255.0
#
/home/kontor -alldirs -mapall=kontor:nutzer -network 192.168.9 -mask 255.255.255.0

Code:
vi /etc/rc.conf

# NFSv4
netfs_types="nfs4:NFS4 smbfs:SMB portalfs:PORTAL nwfs:NWFS"
rpcbind_enable="YES"
mountd_enable="YES"
mountd_flags="-r"
nfs_client_enable="YES"
nfs_server_enable="YES"
nfs_server_flags="-t -n 2"
nfsv4_server_enable="YES"       # nfsd
#nfs_reserved_port_only="YES"
nfsuserd_enable="YES"
nfscbd_enable="YES"
#weak_mountd_authentication="YES"


Gestartet hab ich den Server so:

Code:
[root@erde ~]# /etc/rc.d/rpcbind restart
Stopping rpcbind.
Starting rpcbind.
[root@erde ~]# /etc/rc.d/nfsd restart
nfsd not running?
Starting nfsd.
[root@erde ~]# /etc/rc.d/nfsserver restart
[root@erde ~]# /etc/rc.d/nfsuserd restart
Stopping nfsuserd.
kill: 16364: No such process
kill: 16365: No such process
kill: 16366: No such process
kill: 16367: No such process
Starting nfsuserd.
[root@erde ~]# /etc/rc.d/nfsclient restart
NFS access cache time=60
[root@erde ~]# /etc/rc.d/nfscbd restart
Stopping nfscbd.
Waiting for PIDS: 16400.
Starting nfscbd.
[root@erde ~]# /etc/rc.d/mountd restart
Stopping mountd.
Starting mountd.


Im Log erscheint dann soetwas:

Code:
Nov  6 16:20:27 erde nfsd[15534]: Can't open /var/db/nfs-stablerestart
Nov  6 16:25:02 erde nfsd[16104]: Can't open /var/db/nfs-stablerestart
Nov  6 16:26:33 erde nfsd[16333]: Can't open /var/db/nfs-stablerestart
Nov  6 17:25:40 erde nfsd[75783]: Can't open /var/db/nfs-stablerestart
 
Wie wäre es ganz dreist mit
Code:
touch /var/db/nfs-stablerestart

Danke!
Das sieht schon deutlich besser aus, aber da fehlt scheinbar noch etwas...

Server:

Code:
[root@erde ~]# touch /var/db/nfs-stablerestart

[root@erde ~]# bash /tmp/nfs4.txt
Stopping rpcbind.
Starting rpcbind.
nfsd not running?
Starting nfsd.
Stopping nfsuserd.
Starting nfsuserd.
NFS access cache time=60
Stopping nfscbd.
Starting nfscbd.
Stopping mountd.
Starting mountd.

[root@erde ~]# netstat -an | fgrep 2049
tcp6       0      0 *.2049                 *.*                    LISTEN
tcp4       0      0 *.2049                 *.*                    LISTEN

[root@erde ~]# mount_newnfs localhost:/home/kontor/ /mnt/
[tcp] localhost:/home/kontor: Permission denied
[tcp6] localhost:/home/kontor: Permission denied
^C


Client:

Code:
root@wanderer:~# mount.nfs4 erde:/home/kontor/ /mnt/
mount.nfs4: mount system call failed

...noch eine Idee?
 
Wie wäre es damit die Manualpages zu lesen? Normalerweise bin ich kein Freund von RTFM-Antworten, aber in diesem Fall siehe einfach man nfsv4.

Ich habe es allerdings nicht selbst getestet. Kann also sein das ich mich hier zu weit aus dem Fenster lehne :eek:.
 
Wie wäre es damit die Manualpages zu lesen? Normalerweise bin ich kein Freund von RTFM-Antworten, aber in diesem Fall siehe einfach man nfsv4.

Ich habe es allerdings nicht selbst getestet. Kann also sein das ich mich hier zu weit aus dem Fenster lehne :eek:.

Gut, mein Englisch ist bei weitem nicht das beste,
aber ich dachte, dass ich bereits alles gemacht hatte was da drin steht...

...ich hab auch die Datei nochmal mit "Install" angelegt,
aber das brachte keine Änderung. :-(

Meintest du etwas bestimmtes aus der Man-Page?

Gruß
Yoda

EDIT:
Wie muss eigentlich die "/etc/exports" richtig aussehen?

so (ich vermute, diese ist richtig):
Code:
/home/kontor -alldirs -mapall=kontor:nutzer -network 192.168.9 -mask 255.255.255.0
V4: / -sec=sys

oder so (beim Anblick der manpage könnte auch das passen...?):
Code:
V4: /home/kontor -sec=sys -alldirs -mapall=kontor:nutzer -network 192.168.9 -mask 255.255.255.0

Test's:

Code:
[root@erde ~]# mount_newnfs localhost:/home/kontor/infos/ /mnt/
[tcp] localhost:/home/kontor/infos: Permission denied
[tcp6] localhost:/home/kontor/infos: Permission denied
^C

[root@erde ~]# mount_newnfs localhost:/home/kontor/ /mnt/
[tcp] localhost:/home/kontor: Permission denied
[tcp6] localhost:/home/kontor: Permission denied
^C

[root@erde ~]# mount_newnfs localhost:/home/ /mnt/
[tcp] localhost:/home: Permission denied
[tcp6] localhost:/home: Permission denied
^C

[root@erde ~]# mount_newnfs localhost:/ /mnt/
[tcp] localhost:/: Permission denied
[tcp6] localhost:/: Permission denied
^C

In der Logdatei steht jetzt folgendes:

Code:
Nov  7 00:39:35 erde mountd[22043]: mount request denied from 127.0.0.1 for /home/kontor/infos
Nov  7 00:39:35 erde mountd[22043]: mount request denied from ::1 for /home/kontor/infos
Nov  7 00:39:40 erde mountd[22043]: mount request denied from 127.0.0.1 for /home/kontor
Nov  7 00:39:40 erde mountd[22043]: mount request denied from ::1 for /home/kontor
Nov  7 00:39:45 erde mountd[22043]: mount request denied from 127.0.0.1 for /home
Nov  7 00:39:45 erde mountd[22043]: mount request denied from ::1 for /home
Nov  7 00:39:50 erde mountd[22043]: mount request denied from 127.0.0.1 for /
Nov  7 00:39:50 erde mountd[22043]: mount request denied from ::1 for /
 
Zuletzt bearbeitet:
Leider wird im FreeBSD-Handbuch mit keinem Wort auf NFSv4 eingegangen, ist sicher noch zu neu...

Bin nach einigem lesen (und meditieren :) zu dem Schuss gekommen, das die "/etc/exports" bei mir wohl so aussehen sollte:

Code:
V4: /home/ -sec=sys -network 192.168.9 -mask 255.255.255.0

...allerdings ist mir noch absolut schleierhaft, wo hier Usernamen eingegeben werden können/müssen?!?

Denn in der Manpage wird "<user>@<dns.domain>" erwähnt und auf meinem Linux-Rechner wird immer nach einem Passwort gefragt... :confused:

Ich dachte NFSv4 geht ohne Kerberos nach vorhandenen UID's und IP's...

Ich hab scheinbar NFSv4 noch nicht richtig verstanden, wäre für eine Erleuchtung sehr dankbar.

Gruß
Yoda
 
Allgemein musst du erst einmal den großen Unterschied zwischen NFS2 und 3, sowei dem neuen NFS4 verstehen. Bei ersteren Protokollen wird ein Verzeichniss freigegeben und ist dann direkt für alle Clients, die Berechtigungen haben, zugänglich. Da dabei die Prüfung der Berechtigungen auf den Client abläuft, sind sie im Großen und Ganzen gar nicht wirksam. Daher gab es Aufsätze auf NFS3 wie z.B. Kerberos, aber das war auch nicht so das Wahre. NFS4 führt daher eine weitere Abstraktionsschicht ein: Ein NFS4-Sever exportiert einen oder mehrere NFS4-Bäume, Freigaben werden in einen Baum definiert. Jeder Baum hat klare Berechtigungen, die Serverseitig durchgesetzt werden.

Ein Beispiel, um es klarer zu machen: Ein Server hat die Verzeichnissen /banane und /apfel, die freigegeben werden sollen. Damit das passieren kann, muss nun erst einmal ein NFS4-Baum angelegt werden. Wir wählen als Wurzel des Baumes das Verzeichnis /, also das Root des Servers. Man kann auch jedes andere Verzeichnis nehmen, wichtig ist nur, dass der Client Pfade relativ zu dem Verzeichnis mounten muss. In Form einer /etc/exports sieht es nun so aus:

Code:
V4: / -sec=sys -network 192.168.0.0 -mask 255.255.255.0 # Der Baum und seine Berechtigungen
/banane
/apfel

Der Client kann nun /apfel und /banane mounten. Das ganze noch einmal mit relativen Pfaden: Wir wollen /gemuese/erbsen und /gemuese/bohnen freigeben:

Code:
V4: /gemuese -sec=sys -network 192.168.0.0 -mask 255.255.255.0 # Der Baum und seine Berechtigungen
/gemuese/erbsen
/gemuese/bohnen

Der Client mountet nun relativ zu /gemuese, also /erbsen und /bohnen.

Wie du sagtest, gibt es verschiedene Berechtigungslevel. Kerberos ist eigentlich für NFS4 gedacht, aber da kaum jemand ein eigenes Realm hat und will, gibt es eben auch "sys". "sys" geht nach Systemberechtigungen. Damit das funktioniert, müssen aber zwei Dinge gewahrt bleiben:
1. Auf dem Client und dem Server müssen gleiche Nutzer auch die gleiche UID haben. Gleiche Gruppen die gleiche GID.
2. Der Server muss NFS4-ACL bieten.
 
Danke für die Erläuterung, ich verstehe es so,
das NFSv4 (mit sec=sys) sich in der Anwendung wie ein NFSv3 verhält...
richtig?

Trotzdem versehe ich noch nicht wieso ich beim mounten nach einem Passwort gefargt werde:

Code:
root@wanderer:~# tail -n2 /etc/fstab 
erde:/home/kontor   /mnt   nfs4    _netdev,noauto,sec=sys,proto=tcp,port=2049  0  0

root@wanderer:~# mount /mnt/
Password: 
^C

Kannst DU mir das auch erklären? :)

Gruß
Yoda

P.S.: Vielleicht sollte ich doch warten bis es über NFSv4 einen Abschnitt im FreeBSD-Handbuch gibt...
 
Zurück
Oben