FreeBSD 8 Server -> NFSv4 und ACLs -> FreeBSD 8 Client

Morfio

Well-Known Member
Hallo alle zusammen,

ich würde gerne NFS-Freigaben von einem FreeBSD 8.0 Server mit ACLs auf UFS2 für (erstmal - später ZFS und Linux- sowie Mac OS X- und Windows-Clients) FreeBSD 8.0 Clients machen.

Dazu habe ich auf dem Server folgendes eingetragen

/etc/rc.conf
nfsv4_server_enable="YES"
nfsuserd_enable="YES"
rpcbind_enable="YES"

/etc/exports

Der "Mount" läuft auf dem FreeBSD-Client via (freebsd ist der Servername)

mount_nfs freebsd:/volume0 /mnt/volume0

Das funktioniert einwandfrei, wenn in der rc.conf vom Server nur nfs_enable="YES" steht, aber nicht mit v4. Letztlich sind die ACLs, die auf dem Server aber eingestellt sind, nicht im Mount vorhanden.

Was muss ich noch beachten? Gibt es vielleicht noch eine Mount-Option, die ich noch nicht gefunden habe?

Vielen Dank, Morfio
 
Hallo alle zusammen,

ich würde gerne NFS-Freigaben von einem FreeBSD 8.0 Server mit ACLs auf UFS2 für (erstmal - später ZFS und Linux- sowie Mac OS X- und Windows-Clients) FreeBSD 8.0 Clients machen.

Dazu habe ich auf dem Server folgendes eingetragen

/etc/rc.conf


/etc/exports


Der "Mount" läuft auf dem FreeBSD-Client via (freebsd ist der Servername)



Das funktioniert einwandfrei, wenn in der rc.conf vom Server nur nfs_enable="YES" steht, aber nicht mit v4. Letztlich sind die ACLs, die auf dem Server aber eingestellt sind, nicht im Mount vorhanden.

Was muss ich noch beachten? Gibt es vielleicht noch eine Mount-Option, die ich noch nicht gefunden habe?

Vielen Dank, Morfio

müsste das auf dem client nicht mount_newnfs sein?
 
müsste das auf dem client nicht mount_newnfs sein?

Ja, da ist eins. Geht aber leider genauso wenig. Wenn man sich die Manpage ansieht, scheint es einfach das gleiche wie mount_nfs zu sein. Auch die Dateigrößen von mount_nfs und mount_newnfs (23664) sind identisch.
 
Hmm,

anscheinend greifen die ACL-Rechte auch über NFSv3.

Ich arbeite jetzt daran, NFSv4 zum Laufen zu bewegen. Dazu habe ich folgende Dinge gemacht (laut nfsv4-Manpage):

Server

/etc/rc.conf
nfs_server_enable="YES"
nfsv4_server_enable="YES"
nfsuserd_enable="YES"

/etc/exports

Client

/etc/rc.conf
nfsuserd_enable="YES"
nfscbd_enable="YES"

Ich versuche dann via:

mount_newnfs -o nfsv4 freebsd:/volume0 /mnt/volume0

zu mounten. Da kommt dann aber:

mount_newnfs: /mnt/volume0, : No such file or directory

(das Verzeichnis /mnt/volume0 existiert aber).

Hat vielleicht noch jemand einen Hinweis?

Viele Grüße, Morfio
 
Nfs4 Mounts benutzen ein Root-Verzeichnis. Wenn dieses bereits /volumen0 ist dann entfällt dies beim Mount Befehl. Also Entweder:

/etc/exports
Code:
....
V4: /volume0 ‐sec=sys,.....

und mounten mit

Code:
mount_newnfs -o nfsv4 freebsd:/ /mnt/volume0

oder

/etc/exports
Code:
....
/volume0 ....
V4: / ‐sec=sys,.....

und mounten mit

Code:
mount_newnfs -o nfsv4 freebsd:/volume0 /mnt/volume0

wobei mir die zweite Variante besser gefällt, da nfs3 und nfs4 Mounts die gleichen Verzeichnisse benutzen, aber das ist Ansichtsache.
 
Ah, vielen Dank schonmal. Jetzt bekomme ich beim "ls" oder "cd" folgenden Fehler:

ls: : Input/output error

-su: cd: /mnt/volume0/: Input/output error

Die exports sieht so aus:

V4: / -sec=sys thorsten

wobei "thorsten" der Rechner ist, mit dem darauf zugegriffen werden soll. Wenn ich den weglasse, passiert das gleiche, ebenfalls beim Weglassen aller Optionen. Gemountet wird via

[root@thorsten ~]# mount_newnfs -o nfsv4 freebsd:/volume0 /mnt/volume0/

Wenn ich via NFSv3 mounte (also vor der ganzen Umstellung), ging der Zugriff auf volume0.

Woran könnte diese (hoffentlich) Kleinigkeit noch liegen?

Viele Grüße, Morfio
 
Meines Wissens muss man die freizugebenden Verzeichnisse noch einmal extra in der /etc/export angeben:

Code:
/volume0
V4: / -sec=sys thorsten

Zumindest habe ich das so verstanden (siehe früheren Post und beachte die Punkte). Dies wäre auch analog zum nfs4 unter Linux, wo man zuerst die fsid=0 angibt und darunter die freizugebenden Verzeichnisse.
 
Guten Morgen,

ok, das Prinzip habe ich (nach dem Lesen der exports-Manpage) soweit verinnerlicht. Funktioniert anscheinend auch, allerdings funktionieren die ACLs noch nicht, zumindest die beiden Programme getfacl und setfacl. So, wie ich das verstanden habe, sind ACLs mit NFSv4 ja generell aktiviert. Allerdings kommt bei setfacl:

[root@thorsten /mnt/volume0]# setfacl -m u:thorsten:rwx gna
setfacl: acl_get_file() failed: Operation not supported

Letztlich würde ich behaupten, entweder funktionieren die Programme über das NFSv4-Protokoll nicht wirklich oder für die Verbindung

mount_newnfs -o nfsv4 freebsd:/volume0 /mnt/volume0/

wird noch NFSv3 genutzt.

Wo könnte ich da ansetzen?

Viele Grüße, Morfio
 
Also, in 8.0 sind die NFS4 für UFS2 drin. In anderen Subsystemen meines Wissens noch nicht. Inzwischen ist das aber jede Menge in HEAD committet worden, zumindest in ZFS und NFSv4 sollten sie dort nun funktionieren. Ob sie bereits in 8-STABLE zurückgeflossen sind, weiß ich leider aus dem Kopf nicht. Da müsste man einen Blick in die Commitlogs werfen.
 
Hi,

ich bin jetzt einen kleinen Schritt weiter. Ich habe jetzt einen aktuellen Kernel mit aktuellem Userland installiert. Unter ZFS habe ich ACLs:

[root@bsd /server/test]# getfacl gna
# file: gna
# owner: root
# group: wheel
owner@:--x-----------:------:deny
owner@:rw-p---A-W-Co-:------:allow
group@:-wxp----------:------:deny
group@:r-------------:------:allow
everyone@:-wxp---A-W-Co-:------:deny
everyone@:r-----a-R-c--s:------:allow

Via

zfs set sharenfs=on server/test

habe ich die Freigabe angelegt (/etc/zfs/exports):

[root@bsd /server/test]# cat /etc/zfs/exports
# !!! DO NOT EDIT THIS FILE MANUALLY !!!

/server/test

In der Datei /etc/exports steht folgendes:


Die /etc/rc.conf sieht folgendermaßen aus (für NFS):

nfs_client_enable="YES"
nfs_server_enable="YES"
nfsv4_server_enable="YES"
nfsuserd_enable="YES"
nfscbd_enable="YES"

Mounten kann ich das Laufwerk (derzeit probiere ich, um Fehler zu vermeiden, alles auf dem einen Rechner zu machen) via:

mount_newnfs -o nfsv4,acls bsd:/server/test /mnt/test/

Das funktioniert. Allerdings werden die ACLs, wie es aussieht, nicht exportiert:

[root@bsd /mnt/test]# getfacl gna
# file: gna
# owner: root
# group: wheel
user::rw-
group::r--
other::r--

und das Setzen dieser wird mit einer Fehlermeldung quittiert:

[root@bsd /mnt/test]# setfacl -m u:thorsten:rwx gna
setfacl: gna: acl_get_file() failed: Operation not supported

Hat vielleicht jemand einen Tipp, woran das liegen könnte?

Viele Grüße, Morfio
 
Kann es sein, daß du die Optionen

Code:
options NFSCL
options NFSD
in der Kernel-config brauchst, um NFSv4 (und damit auch ACLs) zu nutzen? Zumindest suggeriert mir das /usr/src/sys/conf/NOTES.
 
Kann es sein, daß du die Optionen

Code:
options NFSCL
options NFSD
in der Kernel-config brauchst, um NFSv4 (und damit auch ACLs) zu nutzen? Zumindest suggeriert mir das /usr/src/sys/conf/NOTES.

Laut nfsv4-Manpage kann man das auch mit:

nfsuserd_enable="YES"
nfscbd_enable="YES"

für den Client und

nfs_server_enable="YES"
nfsv4_server_enable="YES"
nfsuserd_enable="YES"

für den Server in der /etc/rc.conf.
 
Dann reicht aber laut manpage ein /etc/exports mit
Code:
/volume0
nicht aus, du brauchst
Code:
V4: /volume0
(siehe auch exports(5))

Edit: Nein, nein, Blödsinn. Ich habe eine Idee, woran es liegen könnte. Momentan nutzt du ja sowohl den NFS-Daemon im Userspace (da du keinen NFSv4-Support im Kernel hast) als auch die NFS-export-Funktion von ZFS. Es ist gut möglich, daß NFSv4-ACLs über den NFS-Server von ZFS nur mit dem experimentellen NFSv4-Server im Kernel funktionieren. Die Optionen sind also:
1. Neuen Kernel kompilieren, oder
2. Die ZFS-export-Funktion erst einmal rausnehmen und das ZFS-Filesystem über den NFS-Userspace-Daemon exportieren.
 
Zuletzt bearbeitet:
Hallo zusammen,

ich habe die Frage auch mal in den offiziellen FreeBSD-Foren gestellt (http://forums.freebsd.org/showthread.php?t=16169), dort aber auch keine Antwort bekommen, deshalb schildere ich hier nochmal die genaue Vorgehensweise, vielleicht kann das Problem jemand nachvollziehen und mich auf meinen Fehler aufmerksam machen:

Vorbereitung

Code:
# mkdir /tmp/from
# mkdir /tmp/to
# dd if=/dev/zero of=/tmp/testfile bs=1m count=1024
# mdconfig -a -t vnode -f /tmp/testfile -u 0
# newfs -O2 -U /dev/md0
# mount -o nfsv4acls /dev/md0 /tmp/from
# mount

        /dev/md0 on /tmp/from (ufs, local, soft-updates, nfsv4acls)

/etc/rc.conf

Code:
mountd_enable="YES"
nfs_client_enable="YES"
nfs_server_enable="YES"
nfsv4_server_enable="YES"
nfsuserd_enable="YES"
nfscbd_enable="YES"

/etc/exports

Code:
/tmp/from -maproot=root
V4: / -sec=sys

Daemons neustarten

Code:
# /etc/rc.d/nfsd restart
# /etc/rc.d/nfsserver restart
# /etc/rc.d/nfsuserd restart
# /etc/rc.d/nfsclient restart
# /etc/rc.d/nfscbd restart
# /etc/rc.d/mountd restart

Mounts (alle mit dem selben Ergebnis - ACLs gehen nicht (s. weiter unten))

Code:
# mount_nfs -o nfsv4 $server:/tmp/from /tmp/to
oder
# mount_newnfs $server:/tmp/from /tmp/to
oder
# mount_newnfs -o acls $server:/tmp/from /tmp/to

"mount" gibt folgendes aus

Code:
/dev/md0 on /tmp/from (ufs, NFS exported, local, soft-updates, nfsv4acls)
$server:/tmp/from on /tmp/to (newnfs)

Datei erstellen und auf dem lokalen Datenträger ACLs vergeben

Code:
# touch /tmp/from/test
# setfacl -m u:thorsten:rwxp::allow /tmp/from/test
# getfacl /tmp/from/test

    # file: /tmp/from/test
    # owner: root
    # group: wheel
         user:thorsten:rwxp----------:------:allow
                owner@:--x-----------:------:deny
                owner@:rw-p---A-W-Co-:------:allow
                group@:-wxp----------:------:deny
                group@:r-------------:------:allow
             everyone@:-wxp---A-W-Co-:------:deny
             everyone@:r-----a-R-c--s:------:allow

Auf dem mit NFS gemounteten Volume funktioniert es nicht

Code:
# setfacl -m u:thorsten:rwxp::allow /tmp/to/test
    setfacl: /tmp/to/test: acl_get_file() failed: Operation not supported

# getfacl /tmp/to/test
    # file: /tmp/to/test
    # owner: root
    # group: wheel
    user::rw-
    group::r--
    other::r--

Sieht vielleicht jemand, was ich falsch machen könnte?

Viele Grüße, Morfio
 
Zurück
Oben