Die Samba-Freigabeberechtigung hat dem Benutzer das Schreiben einer Datei verweigert, wird jedoch weiterhin angezeigt

12

Sehr seltsames Problem ...

Samba-Freigabe auf der Fernbedienung:

[javaerpm]
    path = /u/abas/erpm/java
    force user = erpm
    guest ok = yes
    read only = no
    writeable = yes

Mount-Befehl auf lokal mit root:

root@crunchbang:/mnt/abas# mount -t cifs -o username=guest,rw,exec,auto //10.0.0.2/javaerpm ./javaerpm

Root kann überhaupt problemlos lesen / schreiben / cd:

root@crunchbang:/mnt/abas# cd javaerpm
root@crunchbang:/mnt/abas/javaerpm# touch test
root@crunchbang:/mnt/abas/javaerpm# ll
total 1
-rw-r--r--  1  501 users   0 Sep 24 09:55 test
root@crunchbang:/mnt/abas/javaerpm# rm test

Aber wenn ich zu einem normalen Benutzer wechsle und dasselbe tue, bekomme ich Folgendes:

shawn@crunchbang:/mnt/abas/javaerpm$ touch test
touch: cannot touch `test': Permission denied

Ich kann llund ich kann sehen, dass es die Datei sowieso geschrieben hat:

shawn@crunchbang:/mnt/abas/javaerpm$ ll
total 1
-rw-r--r--  1  501 users   0 Sep 24 09:55 test

Ich kann sogar rmkein Problem:

shawn@crunchbang:/mnt/abas/javaerpm$ rm test
shawn@crunchbang:/mnt/abas/javaerpm$

Ich habe verschiedene Montagemöglichkeiten ausprobiert. uid=501ändert nichts. Versucht, nounixaber dann funktioniert es überhaupt nicht und ich sehe nichts mit root oder shawn Benutzer.

Garnelenwagen
quelle
Dieses Q scheint fast das gleiche Problem zu sein: unix.stackexchange.com/questions/71896/… .
slm
Nicht genau das gleiche Problem.
Garnelenwagen
Ich sagte fast 8-). Dieser Kommentar richtete sich eher an mich, um Qs und A's mit gemeinsamen Threads für zukünftige Besucher miteinander zu verknüpfen, aber ich dachte, Sie könnten es überprüfen.
slm

Antworten:

7

Hinweis: Ich rate hier nur, ich bin kein Samba-Guru.

Samba / CIFS reproduziert, zumindest so wie Sie es hier verwenden, keine Anmeldeinformationen zwischen dem Server und dem Client. Aufgrund der force userAnweisung auf dem Server werden alle Vorgänge als Benutzer erpmauf dem Server ausgeführt. Da jedoch sowohl der Client als auch der Server ein Unix-System ausführen, haben sie die CIFS-POSIX-Erweiterungen automatisch ausgehandelt . Dadurch scheinen Unix-Berechtigungen bis zu einem gewissen Punkt zu funktionieren, jedoch nur, soweit der Server dies zulässt, und Sie sind auf einen Fall gestoßen, in dem sich die Ansprüche der Unix-Berechtigungen und die Anforderungen des Servers unterscheiden.

Sie werden feststellen, dass alle Dateien als Benutzer-ID 501 angezeigt werden. Dies ist ihre UID auf dem Server.

Wenn Sie versuchen, eine Datei zu erstellen oder zu entfernen, ist eine Schreibberechtigung für das Verzeichnis erforderlich. Alle Zugriffe werden einem einzelnen Benutzer auf dem Server zugeordnet. Die Schreibberechtigung beschränkt sich also darauf, ob erpmin dieses Verzeichnis auf dem Server geschrieben werden darf. Die Antwort ist ja.

Beim Ausführen touchwird die Datei erstellt und anschließend die Änderungszeit geändert. Das Ändern der Änderungszeit einer Datei erfordert den Besitz. Dies wird durch den generischen Dateisystemcode auf der Clientseite getestet.

Wenn Sie ausführen strace touch test, werden Sie feststellen, dass der openAufruf (der die Datei erstellt) erfolgreich ist und der utimesAufruf (oder besser unter Linux der utimensatSystemaufruf) die Zeiten nicht festlegt.

Dies ist eigentlich ein bisschen seltsam, weil utimes es erfolgreich sein sollte , da touches mit einem NULL-Argument aufgerufen wird (was bedeutet, dass der Zeitstempel auf die aktuelle Zeit gesetzt wird), und dies sollte jedem Aufrufer gestattet sein, der in die Datei schreiben kann, und nicht nur an den Besitzer wie das Setzen eines beliebigen Zeitstempels. Ich vermute, dass utimensattatsächlich eine auf Berechtigungen basierende Überprüfung durchgeführt wird und festgestellt wird, dass die Berechtigungen besagen, dass Sie nicht in diese Datei schreiben können, obwohl das Dateisystem unabhängig von den tatsächlichen Berechtigungen einen Schreibvorgang zulassen würde.

Der Hauptvorteil der CIFS POSIX-Erweiterungen, wenn die Serverseite mit den Berechtigungen eines Nicht-Root-Benutzers ausgeführt wird, besteht darin, das ausführbare Bit und möglicherweise den Gruppenbesitz zu übertragen. Es ist möglicherweise weniger verwirrend, wenn Sie den Benutzereigentum mit der forceuidOption mount einem einzelnen clientseitigen Benutzer zuordnen.

Gilles 'SO - hör auf böse zu sein'
quelle
3
Vielen Dank für die gründliche Antwort. Ich habe es schließlich versucht username=guest,defaults,nopermund das hat das Problem total behoben. Ich weiß nicht, welche Antwort ich auf diese Frage akzeptieren soll, da dies username=guest,defaults,nopermwahrscheinlich nicht die beste Antwort ist und ich einfach nicht mehr Zeit habe, Ihre Antwort auszuprobieren. Danke nochmal!
Garnelenwagen
@shrimpwagon Danke für dein Update. Dies löste mein Problem ... Ich hatte lange vergessen, dass ich bei der Montage Standardeinstellungen und Noperm einpfeifen musste.
Matthew