• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

NFS, keine umask möglich?

pixel

Hacker
Hallo zusammen,

ich habe den ganzen Mittag damit verbracht nach einem Problem bzw. dessen Lösung zu suchen dass mich schon länger quält. Gegeben ist ein FileServer mit OpenSuSE 12.2 und ein Client mit gleichem OS. Als Filesystem im Netz kommt NFS4 zum Einsatz. Wenn ich vom Client aus auf einem NFS-Share eine Datei anlege hat diese die Rechte:

- rw-r--r--

Nun versuche ich das zu ändern dass neue Dateien mit

-rw-rw---

erzeugt werden. Im Wen habe ich hierzu verschiedene Ansätze gefunden:

"/etc/export mit ownmask=value und othmask=value"

Allerdings kennt der NFS diese Optionen nicht und in der Manpage habe ich davon auch nicht gefunden. Meine /etc/fstab am Server:
Code:
/dev/vda1            swap                 swap       defaults              0 0
/dev/vda2            /                    ext4       acl,user_xattr        1 1
proc                 /proc                proc       defaults              0 0
sysfs                /sys                 sysfs      noauto                0 0
debugfs              /sys/kernel/debug    debugfs    noauto                0 0
usbfs                /proc/bus/usb        usbfs      noauto                0 0
devpts               /dev/pts             devpts     mode=0620,gid=5       0 0
/dev/vdb1            /data                ext4       acl,user_xattr        1 2
# NFS-Root zusammen stellen
/data/backup            /nfs4root/backup                none    bind  0 0
/data/bibli             /nfs4root/bibli         none    bind    0 0 
/data/dokus             /nfs4root/dokus            none    bind    0 0
/data/home              /nfs4root/home             none    bind    0 0
/data/download          /nfs4root/download         none    bind    0 0
/data/isoimages         /nfs4root/isoimages        none    bind    0 0
/data/korrespondenz     /nfs4root/korrespondenz none    bind    0 0
/data/texte             /nfs4root/texte            none    bind    0 0
/data/mdaten            /nfs4root/mdaten            none    bind    0 0

Meine exports auf dem Server:
Code:
/nfs4root               *(fsid=0,crossmnt,ro,all_squash,sync,no_subtree_check,insecure)
/nfs4root/backup        *(rw,all_squash,async,no_subtree_check,insecure,anonuid=50000,anongid=10000)
/nfs4root/bibli         *(rw,all_squash,async,no_subtree_check,insecure,anonuid=50000,anongid=10000)
/nfs4root/dokus         *(rw,all_squash,async,no_subtree_check,insecure,anonuid=50000,anongid=10000)
/nfs4root/home          *(rw,no_root_squash,async,no_subtree_check,insecure)

Die /etc/fstab am Client:
Code:
tux.local.lan:/ /nfs4root       nfs4    rw,rsize=16384,wsize=16384 0 0

Ich habe dann mal am Client die Datei /etc/profile.local angelegt und dort:

umask 007

eingetragen. Reboot aber dass hat nichts geändert. Ist es wirklich so dass man dies nicht auf Server-Seite festlegen kann. Ich kann das bei einem Server-OS irgendwie nicht glauben.

Viele Grüsse
pixel
 

stka

Guru
Du hast zwei Möglichkeiten:
1. über bindfs. Dazu habe ich das hier für dich:
http://forum.linhes.org/viewtopic.php?f=24&t=20622
http://code.google.com/p/bindfs/
2. Du verwendest die default ACLs, damit kannst du Rechte an Verzeichnissen setzen und alle Dateien die du DANACH neu anlegst erhalte dann die Rechte, die du als default ACL gesetzt hast.
 
OP
P

pixel

Hacker
Danke für die Tipps. Ich werde es mit BINDFS machen. Zunächst mal ohne NFS4 getestet und auf dem Server bindfs installiert. Ein Verzeichnis:
Code:
/data/test
angelegt. Hier sollen die eigentlich Daten liegen. Dieses Verzeichnis wird mit bindfs unter:
Code:
/nfs4root/test
eingebunden. Hierzu habe ich den Befehl:
Code:
bindfs -u flexshare -g allusers --perms=0000:u+rwD:g+rwD:o-rD /data/test /nfs4root/test/
ausgeführt. Klappt wunderbar. Lege ich im Verzeichnis Dateien/Verzeichnisse an haben diese exakt die Rechte die ich möchte:
Code:
tux:/nfs4root/test # mkdir test
tux:/nfs4root/test # touch test2
tux:/nfs4root/test # l
insgesamt 12
drwxrwx---  3 flexshare allusers 4096  2. Mär 11:29 ./
drwxrwxrwt 12 root      root     4096  2. Mär 10:40 ../
drwxrwx---  2 flexshare allusers 4096  2. Mär 11:29 test/
-rw-rw----  1 flexshare allusers    0  2. Mär 11:29 test2
Nun brauche ich einen entsprechenden fstab-Eintrag. In der Manpage steht als Beispiel:
Code:
bindfs#/home/bob/shared /var/www/shared/bob fuse perms=0000:u+rD 0 0
bzw unter dem Link den du gepostet hast:
Code:
bindfs#/mnt/mythwrong /myth fuse owner=mythtv,group=mythtv,perms=0000:u+rwD:g+rwD:o+rD   0   0
Übertragen auf mein Beispiel sollte der Eintrag doch nun:
Code:
bindfs#/data/test /nfs4root/test fuse owner=flexshare,group=allusers,perms=0000:u+rwD:g+rwD:o-rD   0   0
sein. Wenn ich den in die fstab schreibe und versuchen diesen zu mounten erhalte ich den Fehler:
Code:
mount /nfs4root/test/
mount: wrong fs type, bad option, bad superblock on bindfs#/data/test,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try                                                         
       dmesg | tail or so
Was habe ich falsch gemacht??

Gruss pixel
 
OP
P

pixel

Hacker
ich versuche mich gerade an den erweiterten Posix-ACL's Zum testen benutze ich das Verzeichnis /data/backup. /data ist eine ext4-Partition die mit der Option 'acl' gemountet ist.
Die Ausgangssituation bezogen auf die Rechte ist:

Besitzer: flexshare
Gruppe: allusers
Zugriffs-Bits Directory: 770
Zugriffs-Bits Files: 660

Erreichen möchte ich dass neue Dateien und Verzeichniss dem User 'flexshare' und der Gruppe 'allusers' gehören. Beide sollen für neu erstellte Dateien automatisch rw und für neu erstellte Verzeichnisse rwx erhalten. Durch die ACL's wäre ich dann später flexibler wenn eine Gruppe oder User Zugriff auf ein bestimmtes File/Directory benötigt.

Zu Beginn habe ich die Default-ACL's mit:
Code:
setfacl -d -m u:flexshare:rwx,g:allusers:rwx,o:- backup
gesetzt. Wenn ich diese nun überprüfe sieht dass für mich auch richtig aus:
Code:
getfacl backup/
# file: backup/
# owner: flexshare
# group: allusers
user::rwx
group::rwx
other::---
default:user::rwx
default:user:flexshare:rwx
default:group::rwx
default:group:allusers:rwx
default:mask::rwx
default:other::---
Nun wechsle ich als normaler User in das Verzeichnis /data/backup und erstelle ein Verzeichnis 'test'. Anschliessend prüfe ich die Rechte:
Code:
touch test
getfacl test 
# file: test
# owner: sven
# group: allusers
user::rw-
user:flexshare:rwx              #effective:rw-
group::rwx                      #effective:rw-
group:allusers:rwx              #effective:rw-
mask::rw-
other::---
Warum hier die Maske rw- gesetzt wird weiss ich (noch) nicht aber im Falle einer Datei wäre dass ja gewünscht. Allerdings unterscheidet die Maske ja nicht zwischen Directorys und Files was bei einem neu erstellten Directory zu folgenden Rechten führt:
Code:
md test2
getfacl test2
# file: test2
# owner: sven
# group: allusers
user::rwx
user:flexshare:rwx              #effective:r-x
group::rwx                      #effective:r-x
group:allusers:rwx              #effective:r-x
mask::r-x
other::---
default:user::rwx
default:user:flexshare:rwx
default:group::rwx
default:group:allusers:rwx
default:mask::rwx
default:other::---
Dies besagt doch dass der User 'flexshare' und die Gruppe 'allshare' kein Schreibrecht besitzen, oder?

Des weiteren ist der Owner sowohl bei dem neu angelegten Verzeichnis wie auch bei der Datei 'sven' also der User der es/sie angelegt hat. Genau dieses Verhalten wollte ich doch mit den ACL's verändern.

Habe ich da einen grundsätzlichen Fehler in der Denkweise. Kann mir jemand einen Tipp geben?

Viele Grüsse
pixel
 

stka

Guru
ACHTUNG Wen du ACKs gesetzt hast darfst du NIEMALS mehr die Rechte über "chmod" ändern, denn dann änderst du die Maske! Die Rechte für Besitzer und Gruppe MUSST du dann auch über "setfacl" ändern. So kommen die "effectif rights" zustande. Die Man-page zu setfacl ist da falsch.
 
OP
P

pixel

Hacker
stka schrieb:
ACHTUNG Wen du ACKs gesetzt hast darfst du NIEMALS mehr die Rechte über "chmod" ändern, denn dann änderst du die Maske!
ja das habe ich gelesen aber im konkreten Fall hatte ich chmod nicht benutzt.

stka schrieb:
Die Rechte für Besitzer und Gruppe MUSST du dann auch über "setfacl" ändern. So kommen die "effectif rights" zustande. Die Man-page zu setfacl ist da falsch.
Das ist klar. Die Kernfrage ist aber wie kann ich steuern dass beim neu anlegen von Dateien/Verzeichnissen der owner und die Gruppe auf:

flexshare:allusers

gesetzt werden?
 

spoensche

Moderator
Teammitglied
Lege das Verzeichnis, das du per NFS freigibst als User flexshare an. Dann ist der Eigentümer immer flexshare.
 
OP
P

pixel

Hacker
spoensche schrieb:
Lege das Verzeichnis, das du per NFS freigibst als User flexshare an. Dann ist der Eigentümer immer flexshare.
Äh dass war nicht die Frage. Eingangs ging es darum die umsak zu setzen und zwar serverseitig dass das alle Dateien die vom Client aus NEU angelegt werden 660 und die Verzeichnisse 770 haben. Das erzwingen der Besitzverhältnisse über NFS war nie das Problem. Dass kann ich über die /etc/exports machen.

Unter dem Gesichtspunkt verstehe ich deinen Post überhaupt nicht :???:

Es kamen dann die Themen 'bindfs' und ACL's in's Spiel. bindfs scheidet aus da es sich hierbei nur um einen "übergestülpte" Sicht auch die Rechte handelt. ACL's scheinen dieses Problem nichht zu lösen denn hier kann ich zwar die Datei- und Verzeichns- Rechteflags erzwingen. Nicht jedoch Besitzer/Gruppe (man möge mich korrigieren wenn dass falsch ist).

Nachdem es auf diese Wege nicht funktioniert war mein Gedanke es mit einem mount -o bind ..... zu machen und dabei uid und gid zu erzwingen. Klappt bei NTFS aber nicht bei den üblichen LinuxFS-Varianten.

Wir lassen jetzt mal NFS und Samba ausser Acht. Gegeben eine lokale Linux-Maschine mit einer Partition /data (ext4). Darin gibt es ein Verzeichnis 'test' mit chmod 770 und es gehört flexshare:allusers

Wie schaffe ich es das:

- alle neuen Dateien oder Verzeichnisse die von jedem beliebigen User IN diesem Verzeichnis angelegt werden flexshare:allusers gehören
- im Falle einer Datei die Maske 660 haben
- Im Falle eines Verzeichnisses die Maske 770 haben

Das ist die Frage die ich mir stelle und bin ein wenig erstaunt dass dies nicht funktionieren soll.
 

stka

Guru
Setze doch das SGID-Bit am Verzeichnis "chmod g+s verz" bevor du die ACLs setzt und dann gehören alle Einträge immer der Gruppe, der auch das Verzeichnis gehört. Den Besitzer kannst du nicht vorbelegen. Immer derjenige, der den Eintrag erzeugt ist der Besitzer. Das geht nur unter Windows bzw. Samba.
 
Oben