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 ll
und 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 rm
kein Problem:
shawn@crunchbang:/mnt/abas/javaerpm$ rm test
shawn@crunchbang:/mnt/abas/javaerpm$
Ich habe verschiedene Montagemöglichkeiten ausprobiert. uid=501
ändert nichts. Versucht, nounix
aber dann funktioniert es überhaupt nicht und ich sehe nichts mit root oder shawn Benutzer.
Antworten:
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 user
Anweisung auf dem Server werden alle Vorgänge als Benutzererpm
auf 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
erpm
in dieses Verzeichnis auf dem Server geschrieben werden darf. Die Antwort ist ja.Beim Ausführen
touch
wird 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 deropen
Aufruf (der die Datei erstellt) erfolgreich ist und derutimes
Aufruf (oder besser unter Linux derutimensat
Systemaufruf) die Zeiten nicht festlegt.Dies ist eigentlich ein bisschen seltsam, weil
utimes
es erfolgreich sein sollte , datouch
es 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, dassutimensat
tatsä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
forceuid
Option mount einem einzelnen clientseitigen Benutzer zuordnen.quelle
username=guest,defaults,noperm
und das hat das Problem total behoben. Ich weiß nicht, welche Antwort ich auf diese Frage akzeptieren soll, da diesusername=guest,defaults,noperm
wahrscheinlich nicht die beste Antwort ist und ich einfach nicht mehr Zeit habe, Ihre Antwort auszuprobieren. Danke nochmal!